算法设计与分析复习题.docx
《算法设计与分析复习题.docx》由会员分享,可在线阅读,更多相关《算法设计与分析复习题.docx(44页珍藏版)》请在冰豆网上搜索。
算法设计与分析复习题
题型
一、填空题(共20分,10小题)
二、选择题(共10分,10小题)
三、判断题(共10分,10小题)
四、算法填空(共30分,5小题,每题2空)
五、程序设计(共30分,3题)
一。
选择题
1、递推实施步骤一般为确定递推变量、(C)、确定初始(边界)条件和对递推过程进行控制。
A.确定出口B.给出迭代部分C.建立递推关系D.设置递推条件
2、下列不是动态规划算法基本步骤的是( A )。
A、找出最优解的性质 B、构造最优解 C、算出最优解 D、定义最优解
3、控制结构包括顺序结构、选择结构、循环结构和(A)。
A.模块调用B.逆序结构C.调用函数D.判断结构
4、在下列算法中有时找不到问题解的是( B )。
A、蒙特卡罗算法 B、拉斯维加斯算法 C、舍伍德算法 D、数值概率算法
5. 有一猴子第1天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了1个。
第2天早上又将剩下的桃子吃掉一半,又多吃了1个。
以后每天早上都吃了前一天剩下的一半后又多吃1个。
到第10天早上想再吃时,见只剩下1个桃子了。
求第1天共摘了多少个桃子。
设第k天的桃子数是t(k),则有递推关系式为(A)。
A.t(k)=2*(t(k+1)+1)(k=1,2,…,9),初始条件:
t(10)=1
B.t(k+1)=2*(t(k)+1)(k=1,2,…,9),初始条件:
t(10)=1
C.t(k)=1/2*(t(k+1)+1)(k=1,2,…,9),初始条件:
t(10)=1
D.t(k)=2*(t(k+1)-1)(k=1,2,…,9),初始条件:
t(10)=1
6.下列算法中通常以自底向上的方式求解最优解的是( B )。
A、备忘录法 B、动态规划法 C、贪心法 D、回溯法
7、衡量一个算法好坏的标准是(C )。
A 运行速度快 B 占用空间少 C 时间复杂度低 D 代码短
8、回溯法搜索状态空间树是按照(C)的顺序。
A.中序遍历 B.广度优先遍历 C.深度优先遍历 D.层次优先遍历
9. 实现循环赛日程表利用的算法是( A )。
A、分治策略 B、动态规划法 C、贪心法 D、回溯法
10、下列随机算法中运行时有时候成功有时候失败的是(C )
A 数值概率算法 B 舍伍德算法 C 拉斯维加斯算法 D 蒙特卡罗算法
11.关于时间复杂度的运算规则,
(D)。
A.
B.
C.
D.
12.下列算法中通常以深度优先方式系统搜索问题解的是( D )。
A、备忘录法 B、动态规划法 C、贪心法 D、回溯法
13.备忘录方法是那种算法的变形。
( B )
A、分治法 B、动态规划法 C、贪心法 D、回溯法
14.哈弗曼编码的贪心算法所需的计算时间为( B )。
A、O(n2n) B、O(nlogn) C、O(2n) D、O(n)
15.有n个集装箱要装上两艘载重量分别为
,
的轮船,其中集装箱i的重量为
,那么只要
,
且(且不考虑集装箱的体积)。
设装载量为
的船最多可装载max
,如果满足不等式(A),则装载问题有解。
A.
B.
C.
D.
16.最长公共子序列算法利用的算法是( B )。
A、分支界限法 B、动态规划法 C、贪心法 D、回溯法
17.实现棋盘覆盖算法利用的算法是( A )。
A、分治法 B、动态规划法 C、贪心法 D、回溯法
18.下面是贪心算法的基本要素的是( C )。
A、重叠子问题 B、构造最优解 C、贪心选择性质 D、定义最优解
19.回溯法的效率不依赖于下列哪些因素( D )
A.满足显约束的值的个数 B. 计算约束函数的时间 C. 计算限界函数的时间 D. 确定解空间的时间
20.对n个数进行快速排序法的时间复杂度为(D)。
A.
B.
C.
D.
21、用蒙特卡罗法计算定积分
,其中
,如右图。
产生n(n足够大)个随机分布在长方形ABCD
上的随机点(x,y),其中x是随机分布在[a,b]上的随
机数,y是随机分布在[0,h]上的随机数。
设其中落在曲
边梯形abEF上的随机数为m,则定积分
的计算公
式为(B)。
A.
B.
C.
D.
22、蒙特卡罗算法是( B )的一种。
A、分支界限算法 B、概率算法 C、贪心算法 D、回溯算法
23.下列哪一种算法不是随机化算法( C )
A. 蒙特卡罗算法B. 拉斯维加斯算法C.动态规划算法D.舍伍德算法
24. ( D )是贪心算法与动态规划算法的共同点。
A、重叠子问题 B、构造最优解 C、贪心选择性质 D、最优子结构性质
25. 矩阵连乘问题的算法可由( B)设计实现。
A、分支界限算法 B、动态规划算法 C、贪心算法 D、回溯算法
26. 算法是满足确定性、可行性、有穷性、零个或多个输入和(D)特性的指令序列。
A.迭代性B.循环性C.唯一输出D.一个或多个输出
27、借助容量分别为bv与cv(单位为整数)的两个空杯,用最少的分倒次数把总容量为偶数a的酒评分。
则该泊松汾酒问题有解的条件是(D)。
A.
B.
能被
与
的最大公约数整除
C.
与
互质D.
且
能被
与
的最大公约数整除
29、使用分治法求解不需要满足的条件是(A )。
A 子问题必须是一样的 B 子问题不能够重复 C 子问题的解可以合并 D 原问题和子问题使用相同的方法解
30、下面问题(B )不能使用贪心法解决。
A 单源最短路径问题 B N皇后问题 C 最小花费生成树问题 D 背包问题
31、下列算法中不能解决0/1背包问题的是(A )
A 贪心法 B 动态规划 C 回溯法 D 分支限界法
32、回溯法搜索状态空间树是按照(C )的顺序。
A 中序遍历 B 广度优先遍历 C 深度优先遍历 D 层次优先遍历
33、下列随机算法中运行时有时候成功有时候失败的是(C ) A 数值概率算法 B 舍伍德算法 C 拉斯维加斯算法 D 蒙特卡罗算法
34.实现合并排序利用的算法是( A )。
A、分治策略 B、动态规划法 C、贪心法 D、回溯法
35.下列是动态规划算法基本要素的是( D )。
A、定义最优解 B、构造最优解 C、算出最优解 D、子问题重叠性质
36.下列算法复杂度排序正确的是(C)。
A.
B.
C.
D.
37.采用广度优先策略搜索的算法是( A )。
A、分支界限法 B、动态规划法 C、贪心法 D、回溯法
38、合并排序算法是利用( A )实现的算法。
A、分治策略 B、动态规划法 C、贪心法 D、回溯法
39、一个递归算法,必须包括(A)。
A.终止条件和递归部分B.递归部分C.迭代部分D.入口
40、背包问题的贪心算法所需的计算时间为( B )
A、O(n2n) B、O(nlogn) C、O(2n) D、O(n)
41.一个递归算法,必须包括(B)。
A.递归部分B.终止条件和递归部分C.迭代部分D.入口
42.0-1背包问题的回溯算法所需的计算时间为( A )
A、O(n2n) B、O(nlogn) C、O(2n) D、O(n)
43.采用最大效益优先搜索方式的算法是( A )。
A、分支界限法 B、动态规划法 C、贪心法 D、回溯法
44.衡量一个算法好坏的标准是(C)。
A.运行速度快 B.占用空间少 C.时间复杂度低 D.代码短
45. 实现最大子段和利用的算法是( B )。
A、分治策略 B、动态规划法 C、贪心法 D、回溯法
46.优先队列式分支限界法选取扩展结点的原则是( C )。
A、先进先出 B、后进先出 C、结点的优先级 D、随机
47.下列算法中通常以深度优先方式系统搜索问题解的是(D )。
A.枚举法 B.动态规划法 C.贪心法 D.回溯法
48、广度优先是( A )的一搜索方式。
A、分支界限法 B、动态规划法 C、贪心法 D、回溯法
49、舍伍德算法是( B )的一种。
A、分支界限算法 B、概率算法 C、贪心算法 D、回溯算法
50、在下列算法中有时找不到问题解的是( B )。
A、蒙特卡罗算法 B、拉斯维加斯算法 C、舍伍德算法 D、数值概率算法
51下列哪一种算法是随机化算法( D )
A. 贪心算法B. 回溯法C.动态规划算法D.舍伍德算法
52. 一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。
A、重叠子问题 B、最优子结构性质 C、贪心选择性质 D、定义最优解
53.采用贪心算法的最优装载问题的主要计算量在于将集装箱依其重量从小到大排序,故算法的时间复杂度为 ( B ) 。
A、O(n2n) B、O(nlogn) C、O(2n) D、O(n)
54. 以深度优先方式系统搜索问题解的算法称为 ( D ) 。
A、分支界限算法 B、概率算法 C、贪心算法 D、回溯算法
55. 实现最长公共子序列利用的算法是( B )。
A、分治策略 B、动态规划法 C、贪心法 D、回溯法
56.下面问题(B)不能使用贪心法解决。
A.单源最短路径问题 B.N皇后问题 C.最小花费生成树问题 D.背包问题
4.背包问题的贪心算法所需的计算时间为( B )。
A.O(n2n) B.O(nlogn) C.O(2n) D.O(n)
57.递推实施步骤一般为确定递推变量、(C)、确定初始(边界)条件和对递推过程进行控制。
A.确定出口B.给出迭代部分C.建立递推关系D.设置递推条件
58. 矩阵连乘问题的算法可由( B )设计实现。
A.分支界限算法 B.动态规划算法 C.贪心算法 D.回溯算法
二、 填空题
1.算法的复杂性有 时间 复杂性和 空间 复杂性之分。
2、程序是 算法 用某种程序设计语言的具体实现。
3、算法的“确定性”指的是组成算法的每条 指令 是清晰的,无歧义的。
4.矩阵连乘问题的算法可由 动态规划 设计实现。
5、拉斯维加斯算法找到的解一定是 正确解。
6、算法是指解决问题的 一种方法 或 一个过程 。
7、算法分析是指对算法的执行时间与所需空间的估算,定量给出运行算法所需的时间数量级与空间数量级。
8、问题的 最优子结构性质 是该问题可用动态规划算法或贪心算法求解的关键特征。
9、以深度优先方式系统搜索问题解的算法称为 回溯法 。
10、冒泡法排序的时间复杂度为
。
11、计算一个算法时间复杂度通常可以计算 循环次数 、 基本 或计算步。
12、Huffman树又称为最优二叉树,是一类带权路径长度最短的二叉树。
14、解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是 动态规划 ,需要排序的是 回溯法 ,分支限界法 。
15、使用回溯法进行状态空间树裁剪分支时一般有两个标准:
约束条件和目标函数的界,N皇后问题和0/1背包问题正好是两种不同的类型,其中同时使用约束条件和目标函数的界进行裁剪的是 0/1背包问题 ,只使用约束条件进行裁剪的是 N皇后问题 。
16、 贪心选择性质 是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。
17、矩阵连乘问题的算法可由 动态规划 设计实现。
18、组合数的计算公式为
,设计一个算法复杂度低的一重循环实施乘即可求解该组合数计算。
for(c=1,k=1;k<=n;k++)c=C*(m-k+1)/k。
19.贪心算法的基本要素是 贪心选择质和最优子结构 性质。
20.当一个问题的最优解中包含了子问题的最优解时,则称该问题具有最优子结构特性特性。
21. 一场球赛开始前,售票工作正在紧张进行中。
有m+n个人排队等待购票,其中有m个人手持50元的钞票,另外n个人手持100元的钞票。
求出这m+n个人排队购票,使售票处不至出现找不开钱的局面的不同排队种数。
则递推方程f(m,n)==f(m,n-1)+f(m-1,n)。
22.Hanoi问题有n个圆盘从A桩全部移动到C桩,假设共需移动m(n)次,则其递归关系为g(n)=2g(n-1)+1。
1.2.
23,给定一个由n个整数组成的数列,对数列进行一次操作:
去除其中两项a,b,然后添加一项a*b+1,经n-1次操作后最后得数获得最大值。
则贪心算法的策略是对数列进行排序,每次删掉最小的两个。
24、杨辉三角组合公式中,c(n,0)=1,则c(n,k)=(n-k+1)/k*c(n,k-1)。
25、舍伍德算法总能求得问题的 一个解 。
26、 贪心选择性质 是贪心算法可行的第一个基本要素,也是贪心算法与动态规划算法的主要区别。
27.一个程序应包括对数据的描述与对运算操作的描述两个方面内容。
著名计算机科学家(NikiklausWirth)提出关于程序描述的一个公式,即:
数据结构+算法=程序。
28.动态规划算法的两个基本要素是最优子结构 性质和 重叠子问题 性质。
30.回溯法是一种既带有 系统性 又带有 跳跃性 的搜索算法。
31.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X和Y的一个最长公共子序列______{BABCD}或{CABCD}或{CADCD}_____________________。
32.二分搜索算法是利用____动态规划___________实现的算法。
33.在给定的n个数字的数字串中,删除其中k(k请确定删除方案,使得剩下的数字组成的新自然数最大。
解决该问题的贪心算法的策略是从左到右每相邻的两个数字比较,若出现增或大,则删除左边的数字。
若不出现增,即所有数字全部降序或相等,则删除最右边的小数字。
34.任何可用计算机求解的问题所需的时间都与其 规模 有关。
35.算法由操作、控制结构与数据结构三要素构成。
36.当一个问题的最优解中包含了子问题的最优解时,则称该问题具有最优子结构特性特性。
37.结构化程序设计的基本要点为:
自定向下,逐步求精;模块化设计和结构化编程。
38.快速排序法的时间复杂度为O(nlogn)。
39.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含___一个(最优)解________。
40.0-1背包问题的回溯算法所需的计算时间为______O(n*2n)___________________。
三、算法填空
1.背包问题的贪心算法
void Knapsack(int n,float M,float v[],float w[],float x[])
{
Sort(n,v,w);
int i;
for (i=1;i<=n;i++) x[i]=0;
float c=M;
for (i=1;i<=n;i++) {
if (w[i]>c) break;
x[i]=1;
c - =w[i];
}
if (i<=n) x[i]=c/w[i];
}
2.//含数字m且不能被m整除的n位整数的个数统计与求和
#include
voidmain()
{intc,j,m,n,f[10];
longd,k,g1,g2,s1,s2,t;
scanf("%d,%d",&m,&n);
t=1;
for(k=1;k<=n-1;k++)
t=t*10;
g1=0;s1=0;
g2=0;s2=0;
for(k=t;k<=10*t-1;k++)
{d=k;
for(j=0;j<=9;j++)f[j]=0;
for(j=1;j<=n;j++)
{c=d%10;f[c]+=1;d=d/10;}
if(f[m]>0&&k%m>0)
{g1++;s1+=k;}
if(f[m]==2&&k%m>0)
{g2++;s2+=k;}
}
}
3.已知的n个西瓜的重量分别为整数,请把这堆西瓜分成两堆,每堆的个数不一定相等,使两堆西瓜重量之差为最小。
#include
#defineN40
voidmain()
{intn,c1,i,j,s,t,cb,sb,b[N],m[N][10*N];
printf("inputn:
");scanf("%d",&n);
s=0;
for(i=1;i<=n;i++)
{printf("请输入第%d个整数:
",i);
scanf("%d",&b[i]);s+=b[i];
}
c1=s/2;
printf("各个西瓜重量:
");
for(i=1;i<=n;i++)
printf("%d",b[i]);
printf("\n总重量s=%d\n",s);
for(j=0;j
m[n][j]=0;
for(j=b[n];j<=c1;j++)
m[n][j]=b[n];
for(i=n-1;i>=1;i--)
for(j=0;j<=c1;j++)
if(j>=b[i]&&m[i+1][j]m[i][j]=m[i+1][j-b[i]]+b[i];
else
m[i][j]=m[i+1][j];
printf("两堆之差最小值为:
%d\n",s-2*m[1][c1]);
printf("第1堆:
");
cb=m[1][c1];
for(sb=0,i=1;i<=n-1;i++)
if(m[i][cb]>m[i+1][cb]){cb-=b[i];sb+=b[i];printf("%3d",b[i]);b[i]=0;}
if(m[1][c1]-sb==b[n])
{printf("%3d",b[n]);
sb+=b[n];b[n]=0;
}
printf("(%d)\n",sb);
printf("第2堆:
");
for(sb=0,i=1;i<=n;i++)
if(b[i]>0)
{sb+=b[i];
printf("%3d",b[i]);
}
printf("(%d)\n",sb);
}
4.最大子段和:
动态规划算法
int MaxSum(int n, int a[])
{
int sum=0, b=0;
//sum存储当前最大的b[j], b存储b[j]
for(int j=1;
j<=n;
j++) {
if (b>0) b+= a[j] ;
else b=a[i]; ;
//一旦某个区段和为负,则从下一个位置累和
if(b>sum) sum=b;
}
return sum;
}
5.自然对数的底数e是一个无限不循环小数,是“自然律”的一种量的表达,在科学技术中用得非常多。
学习了高数后我们知道,以e为底数的对数是最简的,用它是最“自然”的,所以叫“自然对数”。
试设计程序计算自然对数的底e,精确到小数点后指定的x位。
#include
#include
voidmain()
{doubles;intx,n,c,i,j,d,l,a[5000];
printf("请输入精确位数:
");
scanf("%d",&x);
for(s=0,n=2;n<=5000;n++)
{s=s+log10(n);if(s>x)break}
for(i=0;i<=x+2;i++)
a[i]=0;
for(c=1,j=n;j>=2;j--)
{d=j;
for(i=0;i<=x+1;i++){a[i]=c/d;c=(c%d)*10+a[i+1];}
a[x+2]=c/d;
a[0]=a[0]+1;c=a[0];
}
printf("\ne=%d.",a[0]+1);
for(l=10,i=1;i<=x;i++)
{printf("%d",a[i]);
l++;
if(l%10==0)printf("");
if(l%50==0)printf("\n");
}
printf("\n");
}
6.核反应堆中有α和β两种粒子,每秒钟内一个α粒子可以裂变为3个β粒子,而一个β粒子可以裂变为1个α粒子和2个β粒子。
若在t=0时刻的反应堆中只有一个α粒子,求在t秒时反应堆裂变产生的α粒子和β粒子数。
#include
voidmain()
{in