算法分析与设计题.docx
- 文档编号:24543389
- 上传时间:2023-05-28
- 格式:DOCX
- 页数:17
- 大小:36KB
算法分析与设计题.docx
《算法分析与设计题.docx》由会员分享,可在线阅读,更多相关《算法分析与设计题.docx(17页珍藏版)》请在冰豆网上搜索。
算法分析与设计题
算法设计与分析期末综合实验试题清单
分治与递归
1-1合并排序
问题描述:
给定n个整数,利用合并排序思想将其调整成单调序列。
输入:
整数的个数n,以及n个整数
输出:
从大到小排序的n个整数(或从小到大排序)
1-2split快速排序(枢点法)
问题描述:
给定n个整数,利用枢点法快速排序的思想将其调整成单调序列。
输入:
整数的个数n,以及n个整数
输出:
从大到小排序的n个整数(或从小到大排序)
1-3平面最近点对
问题描述:
平面内有若干点,设计一算法在O(nlogn)时间内求出直线距离最近的一对点,并输它们的距离。
输入:
点对的数目n以及n对点的坐标
输出:
最近的点对坐标(x,y)以及距离d
1-4棋盘覆盖问题
问题描述:
在一个2k×2k个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。
在棋盘覆盖问题中,要用图示的4种不同形态的L型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L型骨牌不得重叠覆盖。
输入:
棋盘的行列数n,棋盘中特殊方格的行列号(x,y)
输出:
棋盘的覆盖方案
1-5求k大(小)元素(基于split枢点法划分)
问题描述:
有一数列,设计一分治递归算法,以Ω(nlogn)时间找出其第k大(小)元素。
输入:
整数的个数n、n个整数以及k值
输出:
第k大(小)元素值以及其对应的下标i
1-6二分检索
问题描述:
有一单调序列,设计一分治算法检索出元素x。
输入:
整数的个数n、n个单调增(减)个整数以及需检索的元素值x
输出:
最近的点对坐标(x,y)以及距离d
1-7大整数乘法(10进制)
问题描述:
有两个10制的大整数(不少于30位),设计一分治算法,以O(nlogn)时间算出其乘积。
输入:
第一个大整数的位数m、第二个大整数的位数n,以及两个大整数x,y
输出:
两个大整数的乘积s
1-8循环赛比赛安排
问题描述:
设计一个满足以下要求的比赛日程表:
(1)每个选手必须与其他n-1个选手各赛一次;
(2)每个选手一天只能赛一次;
(3)循环赛一共进行n-1天。
输入:
选手的个数n、n个选手的编号
输出:
每天的赛事安排(共n-1天)
1-9整数的划分问题
问题描述:
将正整数n表示成一系列正整数之和:
n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。
正整数n的这种表示称为正整数n的划分。
求正整数n的不同划分个数以及划分情况。
输入:
正整数n
输出:
n的划分个数以及划分情况
1-10主元素问题
问题描述:
有一个整数数列,数列中元素出现次数超过一半的元素定义为主元素,设计一分治算法,求出主元素。
输入:
整数的个数n以及n个整数
输出:
如果有主元素,输出主元素以及它们所在的位置;如果没有主元素,输出-1
1-11全排列的生成
问题描述:
给出一个序列,生成这个序列的全排列
输入:
整数的个数n以及n个整数
输出:
生成这n个数的全排列
贪婪算法
2-1加油站问题
问题描述:
一辆汽车加满油后,可行使n千米。
旅途中有若干个加油站。
若要使沿途加油次数最少,设计一个有效算法,对于给定的n和k个加油站位置,指出应在哪些加油站停靠加油才能使加油次数最少。
输入:
汽车加满油后可行驶千米数n,加油站个数k。
以及两两加油站之间的距离。
输出:
最少的加油次数m,如果无法到达目的地,则输出“NoSolution”。
2-2货币兑换问题
问题描述:
当前有N种面额的货币,请为M元钱找出最合理的兑换方案(要求找出的货币数目最少)
输入:
货币面额的种类以及各种货币的面额以及需要兑换的钱数M
输出:
兑换方案以及用到的货币张数。
2-3普通背包问题
问题描述:
给定n种物品和一个背包。
物品i的重量是Wi,其价值为Vi,背包的容量为C。
应如何选择装入背包的物品,使得装入背包中物品的总价值最大?
(物体可以分割)
输入:
物体的件数n,背包的容量C,每件物品的重量和价值
输出:
背包内物品的总价值以及装载方案。
2-4单源最短路径问题
问题描述:
给定一张有向带权图,求源点到其他各个点的最短距离以及路径。
输入:
顶点个数n,有向带权图的邻接表数据
输出:
各个点到源点的最短距离以及最短路径
2-5最小生成树(prim)
问题描述:
给定一张无向带权图,利用pirm算法的思想求能将图的各个顶点全部连通的最短路径和(即最小生成树)
输入:
无向带权图
输出:
最小生成树
2-6最小生成树(kruskal)
问题描述:
给定一张无向带权图,利用kruscal算法的思想求能将图的各个顶点全部连通的最短路径和(即最小生成树)
输入:
无向带权图
输出:
最小生成树
2-7活动安排问题
问题描述:
设有n个活动的集合E={1,2,…,n},其中每个活动都要求使用同一资源,每个活动i都有一个要求使用该资源的起始时间si和一个结束时间fi,且si 如果选择了活动i,则它在半开时间区间[si,fi)内占用资源。 为这样的活动场所安排尽可能多的活动。 输入: 活动的个数n,以及每个活动的起始时间si和一个结束时间fi,且si 输出: 可安排的最大相容活动子集。 2-8排队接水问题 问题描述: 有N个人在一个水龙头前排队接水,假如每个人接水的时间为Ti,请编程找出这N个人排队的一种顺序,使得N个人的平均等待时间最小。 输入: 人数N以及每个人的接水时间T1,T2,……,Tn, 输出: 排队顺序,即1到N的一种排列以及这种方案下的平均等待时间。 2-8田忌赛马 问题描述: 田忌和齐王赛马各有n匹马,现进行n场比赛, 比赛规则如下: 1、马匹不得重复参赛。 2、赢一场得2分,输一场得0分,平局各得1分 请为田忌安排马匹出场次序,使其得分最高。 输入: 马匹数目n,田忌每匹马的斗争值T1,T2,……,Tn,以及齐王每匹马的斗争值Q1,Q2,……,Qn,(值大的胜值小的马) 输出: 田忌马的出场次序以及最后的得分。 2-9程序存储问题 问题描述: 设有n个程序{1,2,3,…,n}要存放在长度为L的磁带上。 程序i存放在磁带上的长度是li,1≤i≤n。 要求确定这n个程序在磁带上的一个存储方案,使得能够在磁带上存储尽可能多的程序。 输入: 先是两个正整数,分别表示程序文件个数n和磁带长度L,接下来是n个正整数,表示程序存放在磁带上的长度。 输出: 最多可以存储的程序个数m,以及已存程序的编号。 2-10数列极差问题 问题描述: 在黑板上写了N个正整数作成的一个数列,进行如下操作: 每一次擦去其中的两个数a和b,然后在数列中加入一个数a×b+1,如此下去直至黑板上剩下一个数,在所有按这种操作方式最后得到的数中,最大的max,最小的为min,则该数列的极差定义为M=max-min,编程求解这样的极差。 输入: 正整数的个数N,以及N个正整数 输出: 极差d 动态规划 3-1导弹拦截问题 问题描述: 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统。 但是这种导弹拦截系统有一个缺陷: 虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度。 某天,雷达捕捉到敌国的导弹来袭。 由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹。 输入: 导弹依次飞来的高度(不大于30000的正整数), 输出: 最多能拦截多少导弹数,以及被拦截的导弹飞来时候的高度。 3-2合唱队型问题 问题描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学排成合唱队形。 合唱队形是指这样的一种队形: 设K位同学从左到右依次编号为1,2...,K,他们的身高分别为T1,T2,...,TK,则他们的身高满足T1<... 输入: 队员人数N和每个学生身高T[i], 输出: 最长的合唱队形的长度和相应的合唱队员编号。 3-3最大子段和问题 问题描述: 给定一个整数序列,求其连续子序列的和的最大值,如果序列中全为负数则规定最大子段和为0,长度L=0。 输入: 整数的个数n以及n个整数 输出: 最大连续子序列之和以及序列长度。 3-40/1背包问题 问题描述: 给定n种物品和一个背包。 物品i的重量是Wi,其价值为Vi,背包的容量为C。 应如何选择装入背包的物品,使得装入背包中物品的总价值最大? (物体不可以分割) 输入: 物体的件数n,背包的容量C,每件物品的重量和价值。 输出: 背包内物品的总价值以及装载方案。 3-5最长公共子序列问题 问题描述: 最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(LongestCommonSubsequence)。 其定义是,一个序列S,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则S称为已知序列的最长公共子序列。 设计一算法,求解两个序列的最长公共子序列。 输入: 已经序列A、B以及长度对应的长度m、n; 输出: 最长公共子序列以及其长度 3-6矩阵连乘加括号问题 问题描述: 给定n个矩阵{A1,A2,…,An},其中Ai与Ai+1是可乘的,i=1,2,…,n-1。 给矩阵加上括号以确定计算矩阵连乘积的计算次序,使得依此次序计算矩阵连乘积需要的数乘次数最少。 输入: 矩阵个数和n,以及n个矩阵的行、列信息 输出: 加括号的信息以及最少的乘法次数。 3-7金矿开采问题 问题描述: 现在n座金矿,每座金矿开采需要的人数以及产金量已知(假设人数多或少于金矿开采所需人数均无法开采出一块金子),现有一定数量的人员,设计算法,计算出最多可以开采出的金矿数目。 输入: 金矿数目n、人数m、以及每座金矿所需人数Pi以及产金量gi 输出: 最多开采出的金矿数目以及人员安排方案 3-8多段图最短路径问题 问题描述: 给定一张有向带权图,设计一动态规划的算法,计算出所有点到最后目标点的最短距离以及路径。 输入: 有向带权图的邻接表以及项点个数n 输出: 每点到最后目标点的最短距离以及路径。 3-9资源最优分配问题 问题描述: 现在有某种资源共n个单位,准备将它们分配到m个项目上,设在第i个项目上分配j个单位的资源就可以获得的收益为a[i,j],求可以获得的最大总收益。 输入: 资源数n,工程数m以及第i个项目上分配j个单位的资源可以获得的收益a[i,j] 输出: 最优分配方案以及可以获得的最大收益。 3-10轨道建造问题 问题描述: 建造滑雪场的升降轨道。 起点和终点的高度已知,x坐标分割成若干份,间隔为1,每一点都给出支架的高度。 要选择尽可能少的支架顶端建立固定点,两个固定点之间用一条直钢轨连接,当然要求中间支架的高度都不能超过钢轨在那里的高度。 而且两个相邻固定点之间的距离不能超过给定的K。 输入: 起点和终点海拔高度H1,H2,支架总个数n以及每个支架的海拔高度hi,相邻固定点间的最大限度距离K 输出: 最少用于固定的支架数目x以及用到的支架编号 3-11乘积最大问题 问题描述: 向长度为N的数字串中插入r个乘号,将其分成r+1个组成部分,找出一种分法,使得这r+1个部分乘积最大。 输入: 数字串的个数以及N个数字字符,以有乘号的个数r 输出: 乘号的位置以及最后的乘积 回溯法 4-1N后问题 问题描述: 在n×n格的棋盘上放置彼此不受攻击的n个皇后。 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子,设计一算法,求解一种皇后的摆放方案。 输入: 皇后数目n 输出: 各个皇后的摆放位置 4-2马步遍历问题 问题描述: 有一n×n格的棋盘,按照国际象棋的规划,马只能走“日”字型结构,设计一算法,按马的走法将棋盘每一格刚好遍历一次。 输入: 棋盘大小n 输出: 遍历方案 4-3迷宫问题 问题描述: 设有一个n×m格的迷宫,四面封闭,仅在左上角的格子有入口,左下角的格子有出口。 迷宫内部的格子,其东、西、南、北四面可能有出入口,也可能没有出入口。 设计一个程序通过迷宫 输入: 迷宫 输出: 行走方案 4-4图m着色问题 问题描述: 用m种颜色为无向图G=(VE)的每个顶点着色要求每个顶点着一种颜色、并使相邻两个顶点之间具有不同颜色。 输入: 地图邻接矩阵以及可用颜色种类m 输入: 着色方案以及用到的颜色数(一种即可) 4-50/1背包问题 问题描述: 给定n种物品和一个背包。 物品i的重量是Wi,其价值为Vi,背包的容量为C。 应如何选择装入背包的物品,使得装入背包中物品的总价值最大? (物体不可以分割) 输入: 物体的件数n,背包的容量C,每件物品的重量和价值。 输出: 背包内物品的总价值以及装载方案。 4-6符号三角形问题 问题描述: 有一种符号三角形由“+”“-”两种符号组成,其第一行的符号是已知,其余各行的符号的生成规则如下: 2个同号下面都是“+”,2个异号下面都是“-”。 求第一行符号个数n已知的情况下,生成的三角形中“+”“-”号个数相等的三角形数目。 输入: 第一行符号的个数n 输出: “+”“-”个数相等的三角形的数目以及三角形 4-7旅行售货员问题 问题描述: 有一售货员,要到世界各地去销售商品,各城市之间的旅行代价已知,为其制定一旅行计划,将各个城市刚好遍历一次再回到起点,并且旅行代价总和最小。 输入: 各个城市之间的旅行代价以及城市的个数n 输出: 最小代价和以及旅行方案。 4-8作业分配问题 问题描述: 现有个操作员操作n项作业,每第i个操作员操作第j项作业的时间Aij(0≤i,j≤n)已知,要求每个操作员操作一项作业,使得操作时间总和最小。 输入: 操作员个数n,第i个操作员操作第j项作业的时间Aij(0≤i,j≤n) 输出: 分配方案以及操作时间总和。 4-9陷井逃离问题 问题描述: TOM掉进了一个陷阱阵,每个陷阱两种选择,选择一: 逃离,但若想成功逃离,需要相应的时间将其排除,并需在其规定时间前逃出,否则无法逃出。 选择二: 直接通过,但直接通过生命将消耗1点。 为其制定一逃生方案,使其消耗生命最少。 输入: 陷阱个数n,生命点m,以及每个陷阱的排除所需时间以及最晚逃离时间。 输出: 逃生方案以及剩余生命值,若无法逃离,则输出-1. 4-10最大子段和问题 问题描述: 给定一个整数序列,求其连续子序列的和的最大值,如果序列中全为负数则规定最大子段和为0,长度L=0。 输入: 整数的个数n以及n个整数 输出: 最大连续子序列之和以及序列长度。 4-11整数的划分问题 问题描述: 将正整数n表示成一系列正整数之和: n=n1+n2+…+nk,其中n1≥n2≥…≥nk≥1,k≥1。 正整数n的这种表示称为正整数n的划分。 求正整数n的不同划分个数以及划分情况。 输入: 正整数n 输出: n的划分个数以及划分情况 4-12乘积最大问题 问题描述: 向长度为N的数字串中插入r个乘号,将其分成r+1个组成部分,找出一种分法,使得这r+1个部分乘积最大。 输入: 数字串的个数以及N个数字字符,以有乘号的个数r 输出: 乘号的位置以及最后的乘积 分支限界 5-10/1背包问题 问题描述: 给定n种物品和一个背包。 物品i的重量是Wi,其价值为Vi,背包的容量为C。 应如何选择装入背包的物品,使得装入背包中物品的总价值最大? (物体不可以分割) 输入: 物体的件数n,背包的容量C,每件物品的重量和价值。 输出: 背包内物品的总价值以及装载方案。 5-2旅行售货员问题 问题描述: 有一售货员,要到世界各地去销售商品,各城市之间的旅行代价已知,为其制定一旅行计划,将各个城市刚好遍历一次再回到起点,并且旅行代价总和最小。 输入: 各个城市之间的旅行代价以及城市的个数n 输出: 最小代价和以及旅行方案。 5-3作业分配问题 问题描述: 现有个操作员操作n项作业,每第i个操作员操作第j项作业的时间Aij(0≤i,j≤n)已知,要求每个操作员操作一项作业,使得操作时间总和最小。 输入: 操作员个数n,第i个操作员操作第j项作业的时间Aij(0≤i,j≤n) 输出: 分配方案以及操作时间总和。 图的遍历问题 6-1图的深度优先遍历算法(要求用邻接表存储) 问题描述: 给定一张图,要求用深度优先方式对图的结点进行遍历 输入: 图的顶点个数以及邻接表数据 输出: 遍历次序 6-2图的广度优先遍历算法(要求用邻接矩阵存储) 问题描述: 给定一张图,要求用广度优先方式对图的结点进行遍历 输入: 图的顶点个数以及邻接表数据 输出: 遍历次序 ACM专题(可置换题) 7-1猫和老鼠 问题描述: 有一只很霸道的猫,捉来好多好多老鼠,然后,这只猫就开始开大餐了。 但为了显得它与众不同,它用了一个很特别的就餐顺序: 它先定好步长k,然后它吃掉第1个位置上的,然后再每隔k只再吃一只老鼠一轮结束后,它再次从第1个位置开始继续吃,直到最后只剩下一只老鼠为止。 而这最后一只老鼠这只猫会放走,因为它不想破坏生态平衡,它希望这只老鼠,来年再制造n只。 。 。 。 。 。 (当然它怎么找它的另一半就不管了。 。 。 )但这群老鼠中,有一只特别聪明,它希望不死,它经过计算,于是一开始它就站在一个特别的位置上,而最后,它果然没死,被放走了,你知道它站在哪个位置上吗? 输入: 多组测试数据,每组一行,每行两个正整数n和k(1<=n,k<=1000000)n和k的意义如描述 输出: 输出这只老鼠站的位置 样例输入: 101 62 样例输出: 8 5 7-2猜数字游戏 问题描述: 猜数字游戏是gameboy最喜欢的游戏之一。 游戏的规则是这样的: 计算机随机产生一个四位数,然后玩家猜这个四位数是什么。 每猜一个数,计算机都会告诉玩家猜对几个数字,其中有几个数字在正确的位置上。 比如计算机随机产生的数字为1122。 如果玩家猜1234,因为1,2这两个数字同时存在于这两个数中,而且1在这两个数中的位置是相同的,所以计算机会告诉玩家猜对了2个数字,其中一个在正确的位置。 如果玩家猜1111,那么计算机会告诉他猜对2个数字,有2个在正确的位置。 现在给你一段gameboy与计算机的对话过程,你的任务是根据这段对话确定这个四位数是什么。 输入: 输入数据有多组。 每组的第一行为一个正整数N(1<=N<=100),表示在这段对话中共有N次问答。 在接下来的N行中,每行三个整数A,B,C。 gameboy猜这个四位数为A,然后计算机回答猜对了B个数字,其中C个在正确的位置上。 当N=0时,输入数据结束。 输出: 每组输入数据对应一行输出。 如果根据这段对话能确定这个四位数,则输出这个四位数,若不能,则输出"Notsure"。 样例输入: 648152157161078421049010085853385553224815002999330 样例输出: 3585Notsure 7-3采矿游戏 问题描述: 某天gameboy玩魔兽RPG。 有一个任务是在一个富含金矿的圆形小岛上建一个基地,以最快的速度采集完这个小岛上的所有金矿。 这个小岛上有n(0 而且这个小岛的地势非常平坦,所以基地可以建在小岛的任何位置,每个金矿的采矿速度只跟矿藏到基地的路程长度有关。 为了不让这个任务太无聊,游戏设计者对这个小岛施了个“魔法”,规定矿工在小岛上只能正南正北正西正东走。 也就是说矿工不能斜着在岛上走。 这个小岛在一个二维直角坐标系中描述。 你的任务就是帮gameboy找一个建造基地的位置,使矿工能以最快的速度采完所有矿。 输入: 输入数据有多组。 每组数据的第一行是一个正整数n(0 在接下来的n行中,每行有两个实数x,y,表示其中一个金矿的坐标。 n=0表示输入数据结束。 输出: 每一组输入数据对应一行输出,输出两个实数x,y(保留小数点后两位),也就是你找到的建造基地的位置坐标。 如果坐标不唯一,可以任选一个输出。 样例输入: 41.01.03.01.03.03.01.03.00 样例输出: 2.002.00 7-4母猪问题 问题描述: 话说现在猪肉价格这么贵,著名的ACBoy0068也开始了养猪生活。 说来也奇怪,他养的猪一出生第二天开始就能每天中午生一只小猪,而且生下来的竟然都是母猪。 不过光生小猪也不行,0068采用了一个很奇特的办法来管理他的养猪场: 对于每头刚出生的小猪,在他生下第二头小猪后立马被杀掉,卖到超市里。 假设在创业的第一天,0068只买了一头刚出生的小猪,请问,在第N天晚上,0068的养猪场里还存有多少头猪? 输入: 测试数据的第一行包含有一个正整数T,代表测试数据的个数。 接下来有T组测试,每组测试数据占一行,分别有一个正整数N代表0068创业的第N天。 (0 输出: 对于每组数据,请在一行里输出第N天晚上养猪场里猪的数目。 样例输入: 223 样例输出: 23 7-5杀人游戏 问题描述: 不知道你是否玩过杀人游戏,这里的杀人游戏可没有法官,警察之类的人,只有土匪,现在已知有N个土匪站在一排,每个土匪都有一个编号,从1到N,每次杀人时给定一个K值,从还活着的土匪中,编号从小到大的找到K个人,然后杀掉,继续往下,直到找遍,然后继续从剩下的土匪中,编号从小到大找到第K个活着的土匪,然后杀掉。 比如,现在有10个土匪,K为3,第一次杀掉3,6,9号的土匪,第二次杀掉4,8号土匪,第三次杀掉5号土匪,第四次杀掉7号土匪,第五次杀掉10号土匪,我们看到10号土匪是最后一个被杀掉的(从1到K-1的土匪运气好,不会被杀! )。 现在给定你一个N和一个K,问你最后一个被杀掉的土匪的编号是多少。 输入: 第一行有一个T(T<=10000),接下来有T组数据,每组中包含一个N(N<2^31)和一个K(3<=K<=100&&K 输出: 对于每组数据,输出最后被杀的土匪的编号。 样例输入: 1103 样例输出: 10
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法 分析 设计