计算机算法设计与分析期末考试复习题
《算法分析与设计》期末复习题[1]
一、选择题1.一个.java文件中可以有()个public类。
A.一个B.两个C.多个D.零个2.一个算法应该是()A.程序B.问题求解步骤的描述C.要满足五个基本特性D.A和C3.用计算机无法解决“打印所有素数”的问题,其原因是解决该问题的算法违背了算法特征中的()A.唯一性B.有穷性C.有0个或多个输入D.有输出4.某校有6位学生参加学生会主席竞选,得票数依次为130,20,98,15,67,3。
若采用冒泡排序算法对其进行排序,则完成第二遍时的结果是()A.3,15,130,20,98,67B.3,15,20,130,98,67C.3,15,20,67,130,98 D.3,15,20,67,98,1305.下列关于算法的描述,正确的是()A.一个算法的执行步骤可以是无限的B.一个完整的算法必须有输出C.算法只能用流程图表示D.一个完整的算法至少有一个输入6.Java Application源程序的主类是指包含有()方法的类。
A、main方法B、toString方法C、init方法D、actionPerfromed方法7.找出满足各位数字之和等于5的所有三位数可采用的算法思路是()A.分治法B.减治法C.蛮力法D.变治法8.在编写Java Application程序时,若需要使用到标准输入输出语句,必须在程序的开头写上( )语句。
A、import java.awt.* ;B、import java.applet.Applet ;C、import java.io.* ;D、import java.awt.Graphics ;9.计算某球队平均年龄的部分算法流程图如图所示,其中:c用来记录已输入球员的人数,sum用来计算有效数据之和,d用来存储从键盘输入的球员年龄值,输入0时表示输入结束。
图中空白处理框①和②处应填入的是()A.①sum ←sum + d B.①sum ←sum + c②c ←c + 1②c ←c + 1C.①sum ←sum + d D.①sum ←sum + c②d ←d + 1 ②d ←d + 110.报名参加冬季越野赛跑的某班5位学生的学号是:5,8,11,33,45。
(完整word版)计算机算法设计与分析期末试题4套(含答案)
(1)用计算机求解问题的步骤:1、问题分析2、数学模型建立3、算法设计与选择4、算法指标5、算法分析6、算法实现7、程序调试8、结果整理文档编制(2)算法定义:算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程(3)算法的三要素1、操作2、控制结构3、数据结构算法具有以下5个属性:有穷性:一个算法必须总是在执行有穷步之后结束,且每一步都在有穷时间内完成。
确定性:算法中每一条指令必须有确切的含义。
不存在二义性。
只有一个入口和一个出口可行性:一个算法是可行的就是算法描述的操作是可以通过已经实现的基本运算执行有限次来实现的。
输入:一个算法有零个或多个输入,这些输入取自于某个特定对象的集合。
输出:一个算法有一个或多个输出,这些输出同输入有着某些特定关系的量。
算法设计的质量指标:正确性:算法应满足具体问题的需求;可读性:算法应该好读,以有利于读者对程序的理解;健壮性:算法应具有容错处理,当输入为非法数据时,算法应对其作出反应,而不是产生莫名其妙的输出结果。
效率与存储量需求:效率指的是算法执行的时间;存储量需求指算法执行过程中所需要的最大存储空间。
一般这两者与问题的规模有关。
经常采用的算法主要有迭代法、分而治之法、贪婪法、动态规划法、回溯法、分支限界法迭代法也称“辗转法”,是一种不断用变量的旧值递推出新值的解决问题的方法。
利用迭代算法解决问题,需要做好以下三个方面的工作:一、确定迭代模型。
在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式。
所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。
迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制。
在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。
不能让迭代过程无休止地重复执行下去。
迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。
计算机算法设计与分析期末考试复习资料
计算机算法设计与分析期末考试复习资料一、算法设计实例1、快速排序(分治法)int partition(float a[], int p, int r) {int i= p, j=r+1;float x = a[p];while(1){while(a[++i] < x);while(a[--j] < x);if(i >= j)break;swap (a[i], a[j]);}a[p] = a[j];a[j] = x;return j;}void Quicksort(float a[], int p, int r){//快速排序if(p < r){int q = partition(a, p, r);Quicksort(a, p, q-1);Quicksort(a, p+1, r);}}2、归并排序(分治法)void mergesort (Type a[], int left, int right) {if (left < rigth){int mid = (left + right)/2; //取中点mergesort (a, left, mid);mergesort (a, mid+1, right);mergesort (a, b, left, right);//合并到数组bmergesort (a, b, left, right);//复制到数组a}}3、背包问题(贪心算法)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] ;}4、活动安排问题(贪心算法)void Greadyselector (int n, Type s[], Type f[], bool A[]) { //s[i] 为活动结束时间,f[j]为j活动开始时间A[i] = true;int j= 1;for (i=2; i<=n; i++){if (s[i] >= f[j]){A[i] = true; j=i;}elseA[i] = false;}}5、喷水装置问题(贪心算法)void knansack (int w, int d, float r[], int n){//w为草坪长度d为草坪宽度r[]为喷水装置的喷水半径,//n为n 种喷水装置,喷水装置的喷水半径>= d/2sort (r[], n); //降序排序count = 0; //记录装置数for (i=1; i<=n; i++)x[i] = 0;//初始时,所有喷水装置没有安装x[i]=0for (i=1; w >= 0; i++){x[i] = 1;count ++;w = w - 2*sqart(r[i]*r[i] - 1);}count << 装置数: << count << end1;for (i=1; i<= n; i++)count << 喷水装置半径:<< r[i] << end1;}6、最优服务问题(贪心算法)double greedy (rector x, int s){rector st(s+1, 0);rector su(s+1 ,0);int n=x.size();//st[] 是服务数组,st[j]为第j个队列上的某一个顾客的等待时间//su[] 是求和数组,su[j]为第j个队列上所有顾客的等待时间sort(x.begin(), x.end());//每个顾客所需要的服务时间升序排列int i=0, j=0;while( i<="" p="">{st[j] += x[i]; //x[i]= x.begin-x.endsu[j] += st[j];i++;j++;if ( j==s)j=0;}double t=0;for (i=0; i<="" p="">t += su[i];t /=n;return t;}7、石子合并问题(贪心算法)float bebig (int A[], int n) {m = n;sort(A, m); //升序while (m>1){for (i=3; i<=m; i++)if ( p<="" p="">break;elseA[i-2]=A[i];for (A[i-2] = p;i<= m; i++){A[i-1] = A[i];m--;}}count << A[1] << end1}8、石子合并问题(动态规划算法)best [i][j] 表示i-j 合并化最优值sum [i][j] 表示第i个石子到第j个石子的总数量| 0f(i,j) = || min{f(i,k) + f(k+1,j)}+ sum(i,j)int sum [maxm]int best [maxm][maxn];int n, stme[maxn];int getbest();{//初始化,没有合并for (int i=0; i< n; i++)best[i][j] =0;//还需要进行合并for (int r=1; r<="">{for(i=0; i<="" p="">{int j = i+v;best[i][j]= INT- MAX;int add = sum[j] -(i>0 ! sum[i-1]: 0);//中间断开位置,取最优值for (int k=i; k<="" p="">{best[i][j]= min(best[i][j], best[i][k]+best[k+1][j])+add; }}}return best[0][n-1];}9、最小重量机器设计问题(回溯法)typedef struct Qnode{float wei;//重量float val;//价格int ceng;//层次int no; //供应商struct Qnode * Parent;//双亲指针}Qnode;float wei[n+1][m+1] = ;float val[n+1][m+1] = ;void backstack (Qnode *p){if (p->ceng == n+1){if (bestw > p->wei){testw = p->wei;best =p;}}else{for (i=1; i<=m; i++)k=p->ceng;vt = p->val + val[k][i];wt = p->wei + wei[k][i];if (vt <=d && wt <= bestw){s = new Qnode;s->val = vt;s->wei = wt;s->ceng = k+1;s->no = 1;s->parent = p;backstrack(S);}}}10、最小重量机器设计问题(分支限界法)typedef struct Qnode{float wei;//重量float val;//价格int ceng;//层次int no; //供应商struct Qnode * Parent;//双亲指针}Qnode;float wei[n+1][m+1] = ;float val[n+1][m+1] = ;void minloading(){float wt=0;float vt=0;float bestw= Max;//最小重量Qnode *best; s = new Qnode;s->wei = 0;s->val = 0;s->ceng = 1;s->no =0;s->parent=null;Iinit_Queue(Q);EnQueue(Q,S);do{p=OutQueue(Q);//出队if (p->ceng==n+1) {if(bestw > p->wei){bestw = p->wei;best =p;}}else{for (i=1; i<=m;i++){k= p->ceng;vt =p->val + val[k][i];wt =p->wei + wei[k][i];if (vt <=d && wt <=bestw){s= new Qnode;s->ceng=k+1;s->wt=wt;s->val=val;s->no=i;s->parent=p;EnQueue (Q, S);}}}}while(!empty(Q));p=best;while(p->parent){count << 部件:<< p->ceng-1 << end1; count << 供应商:<< p->no << end1; p=p->parent;}}11、快速排序(随机化算法—舍伍德算法)int partion (int a[], int l, int r){key = a[l];int i=l, j=r;while(1){while(a[++i]< key && i<=r);while(a[--j]> key && j>=l);if(i >= j)break;if (a[i] != a[j])swap(a[i] , a[j]);}if ((j !=l) && a[l] != a[j])swap(a[l], a[j]);return j;}int Ranpartion (int a[], int l, int r) {k=rand()%(r-1 + l)+1;swap(a[k], a[l]);int ans = partion(a, l, r);return ans;}int Quick_sort(int a[], int l, int r, int k) {int p= Randpartion(a, l, r);if (p == k)return a[k];else if (k< p)return Quick_sort(a, l, p-1, k);else{int j= 0;for (int i= p+1; i<=r; i++)b[j++] = a[i]return Quick_sort(b, 1, j, k-p);}}12、线性选择(随机化算法—舍伍德算法)二、简答题1.分治法的基本思想分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。
计算机算法设计与分析复习题与答案1
《算法分析与设计》期末复习题(一)一、选择题1.应用Johnson 法则的流水作业调度采用的算法是(D )A. 贪心算法B. 分支限界法C.分治法D. 动态规划算法2.Hanoi 塔问题如下图所示。
现要求将塔座A 上的的所有圆盘移到塔座B 上,并仍按同样顺序叠置。
移动圆盘时遵守Hanoi 塔问题的移动规则。
由此设计出解Hanoi 塔问题的递归算法正确的为:(B )Hanoi 塔3. 动态规划算法的基本要素为(C)A. 最优子结构性质与贪心选择性质B.重叠子问题性质与贪心选择性质C.最优子结构性质与重叠子问题性质D. 预排序与递归调用4. 算法分析中,记号O表示(B),记号Ω表示(A),记号Θ表示(D)。
A.渐进下界B.渐进上界C.非紧上界D.紧渐进界E.非紧下界5. 以下关于渐进记号的性质是正确的有:(A)A.f(n)(g(n)),g(n)(h(n))f(n)(h(n))=Θ=Θ⇒=ΘB. f(n)O(g(n)),g(n)O(h(n))h(n)O(f(n))==⇒=C. O(f(n))+O(g(n)) = O(min{f(n),g(n)})D. f(n)O(g(n))g(n)O(f(n))=⇔=6.能采用贪心算法求最优解的问题,一般具有的重要性质为:(A)A. 最优子结构性质与贪心选择性质B.重叠子问题性质与贪心选择性质C.最优子结构性质与重叠子问题性质D. 预排序与递归调用7. 回溯法在问题的解空间树中,按(D)策略,从根结点出发搜索解空间树。
A.广度优先B. 活结点优先 C.扩展结点优先 D. 深度优先8. 分支限界法在问题的解空间树中,按(A)策略,从根结点出发搜索解空间树。
A.广度优先B. 活结点优先 C.扩展结点优先 D. 深度优先9. 程序块(A)是回溯法中遍历排列树的算法框架程序。
A.B.C.D.10. 回溯法的效率不依赖于以下哪一个因素?(C )A.产生x[k]的时间;B.满足显约束的x[k]值的个数;C.问题的解空间的形式;D.计算上界函数bound的时间;E.满足约束函数和上界函数约束的所有x[k]的个数。
计算机算法设计与分析期末复习资料
计算机算法设计与分析期末复习资料一填空题(20x1=20分)1.当有多个算法来解决集合问题时,选择算法的主要原则是选择复杂度最低的算法。
2.函数本身定义的函数是递归函数。
该算法适用于求解动态规划问题。
4.贪心算法的两个基本要素是最优子结构性质、贪心选择性质。
5.在搜索解空间树时,回溯方法通常使用深度优先的方法来提高搜索效率,以避免无效搜索。
6.根据不同的求解目标,分枝定界法和回溯法分别通过广度优先遍历或最小代价优先和深度优先搜索解空间树。
7.分支界限法和回溯法主要区别在于求解目标和搜索方式不同。
8.在执行分支定界法时,通常使用该方法来实现最大优先级队列。
9.依据求解所花费的时间和所得到的结果不同,随机化算法大致分为数值随机化算法、蒙特卡罗算法、拉斯维加斯算法和舍伍德算法四类。
10.产生伪随机数最常用的方法是线性同余法。
11.线性规划算法中旋转轴变化的目的是调整基准内变量和基准外变量的位置。
12.在最大网络流问题中,增广路径是剩余网络中容量大于0的路径。
13.应用于动态规划的待解决问题的两个基本要素是:。
14.算法必须满足的四个特征是输入、输出、确定性和有限性。
15.算法复杂性依赖于、、三个方面的复杂因素。
16.实现递归调用的关键是17.动态规划算法解决问题的重要线索是问题的性质。
18.最优子结构性质是贪婪算法的关键特征。
19.分支界限法的求解目标是找出满足约束条件的一个解,或是在满足约束条件的解中找出在某种意义下的最优解。
20.有两种常见的解空间树:子集树和置换树。
21.分支界限算法依据其从和节点表中选择获得下一扩展节点的不同方式被分为22.对于任何约束标准线性规划问题,只要基本变量设置为0,就可以得到一个解。
三概念题(6x2=12分)1.算法复杂度:指算法运行所需的计算机资源量。
需要时间资源的量称为时间复杂度,需要空间资源源的量称为空间复杂性。
2.递归算法:直接或间接调用自身的算法称为递归算法。
算法设计与分析期末复习题【试题.知识点】
算法设计与分析期末复习题【试题.知识点】算法设计与分析期末考试复习题1.算法有哪些特点?为什么说⼀个具备了所有特征的算法,不⼀定就是使⽤的算法?2.证明下⾯的关系成⽴:(参考例题1.5--1.6)(1)logn!=Θ(nlogn) (2)2n=Θ(2n+1)(3)n!=Θ(n n) (4)5n2-6n=Θ(n2)13.考虑下⾯的算法:输⼊:n个元素的数组A输出:按递增顺序排序的数组A1. void sort(int A[],int n)2. {3. int i,j,temp;4. for(i=0;i5. for(j=i+1;j6. if(A[j]7. temp=A[i];8. A[i]=A[j];9. A[j]=temp;10. }11. }(1)什么时候算法所执⾏的元素赋值的次数最少?最少多少次?(2)什么时候算法所执⾏的元素赋值的次数最多?最多多少次?4.考虑下⾯的算法:输⼊:n个元素的数组A输出:按递增顺序排序的数组A1. void bubblesort(int A[],int n)2. {3. int j,i,sorted;4. i=sorted=0;5. while(i6. sorted=1;7. for(j=n-1;j>i;j--) {8. if(A[j]9. temp=A[j];210. A[j]=A[j-1];11. A[j-1]=temp;12. sorted=0;13. }14. }15. i=i+1;16. }17. }(1)算法所执⾏的元素⽐较次数最少是多少次?什么时候达到最少?(2)算法所执⾏的元素⽐较次数最多是多少次?什么时候达到最多?(3)算法所执⾏的元素赋值次数最少是多少次?什么时候达到最少?(4)算法所执⾏的元素赋值次数最多是多少次?什么时候达到最多?(5)⽤О、和Ω记号表⽰算法的运⾏时间。
(6)可以⽤Θ记号来表⽰算法的运⾏时间吗?请说明。
35.解下⾯的递归⽅程:(1)f(n)=5f(n-1)-6f(n-2) f(0)=1 f(1)=0(2)f(n)=4f(n-1)-4f(n-2) f(0)=6 f(1)=86.初始链表的内容为:3562,6381,0356,2850,9136,3715,8329,7481,写出⽤基数排序算法对它们进⾏排序的过程。
算法设计与分析期末试题_考试版
逐个将结果进行合并。
合并排序最大的优点是它的时间复杂度为O(nlgn),这个是我们之前的选择排序和插入排序所达不到
的。他还是一种稳定性排序,也就是相等的元素在序列中的相对位置在排序前后不会发生变化。他的
唯一缺点是,需要利用额外的N的空间来进行排序。
合并排序依赖于合并操作,即将两个已经排序的序列合并成一个序列,具体的过程如下:
确定性:
可行性:
输入:
输出:
算法设计的质量指标:
正确性:算法应满足具体问题的需求;
可读性:算法应该好读,以有利于读者对程序的理解;
健壮性:算法应具有容错处理,当输入为非法数据时,算法应对
其作出反应,而不是产生莫名其妙的输出结果。
效率与存储量需求:效率指的是算法执行的时间;存储量需求指
算法执行过程中所需要的最大存储空间。一般这两者与问题的规模有
第三步:合并(Merge)
由于对分解出的两个子序列的排序是就地进行的,所以在L[p..q-1]和L[q+1..r]都排好序
后不需要执行任何计算L[p..r]就已排好序,即自然合并。
这个解决流程是符合分治法的基本步骤的。
贪心算法
贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是
合于用动态规划求解的问题,经分解得到子问题往往不是互相独立的。若用分治
法来解这类问题,则分解得到的子问题数目太多,有些子问题被重复计算了很多
次。如果我们能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,
这样就可以避免大量的重复计算,节省时间。我们可以用一个表来记录所有已解
的子问题的答案。不管该子问题以后是否被用到,只要它被计算过,就将其结果
速排序算法对该数组进行排序。
《算法分析与设计》期末试题及参考答案
《算法分析与设计》期末试题及参考答案《算法分析与设计》期末试题及参考答案一、简要回答下列问题:1.算法重要特性是什么?1.确定性、可行性、输入、输出、有穷性2.2.算法分析的目的是什么?2.分析算法占用计算机资源的情况,对算法做出比较和评价,设计出额更好的算法。
3.3.算法的时间复杂性与问题的什么因素相关?3. 算法的时间复杂性与问题的规模相关,是问题大小n的函数。
4.算法的渐进时间复杂性的含义?4.当问题的规模n趋向无穷大时,影响算法效率的重要因素是T(n)的数量级,而其他因素仅是使时间复杂度相差常数倍,因此可以用T(n)的数量级(阶)评价算法。
时间复杂度T(n)的数量级(阶)称为渐进时间复杂性。
5.最坏情况下的时间复杂性和平均时间复杂性有什么不同?5. 最坏情况下的时间复杂性和平均时间复杂性考察的是n固定时,不同输入实例下的算法所耗时间。
最坏情况下的时间复杂性取的输入实例中最大的时间复杂度:W(n) = max{ T(n,I) } , I∈Dn平均时间复杂性是所有输入实例的处理时间与各自概率的乘积和:A(n) =∑P(I)T(n,I) I∈Dn6.简述二分检索(折半查找)算法的基本过程。
6. 设输入是一个按非降次序排列的元素表A[i:j] 和x,选取A[(i+j)/2]与x比较,如果A[(i+j)/2]=x,则返回(i+j)/2,如果A[(i+j)/2]<="">7.背包问题的目标函数和贪心算法最优化量度相同吗?7. 不相同。
目标函数:获得最大利润。
最优量度:最大利润/重量比。
8.采用回溯法求解的问题,其解如何表示?有什么规定?8. 问题的解可以表示为n元组:(x1,x2,……x n),x i∈S i, S i为有穷集合,x i∈S i, (x1,x2,……x n)具备完备性,即(x1,x2,……x n)是合理的,则(x1,x2,……x i)(i<n)一定合理。
(完整版)算法设计与分析期末考试卷及答案a
flag=false
_
_
end if
_
__
end for
A[i] A[1]
w =i
return w, A end SPLIT
二.计算题和简答题(每小题
1.用O、、 表示函数f与g之间阶的关系,并分别指出下列函数中阶最低和最高 的函数:
(1)f (n)=100g(n)=100n
(2)f(n)=6n+nlog ng(n)=3n
算法EX1
输入:正整数n,n=2k。输出:⋯
ex1(n)
end EX1过程ex1(n) if n=1 then pro1(n)
else
栏
名姓
级年
_
_系
_院学
pro2(n)
ex1(n/2) end if
return
end ex1
3.用Floyd算法求下图每一对顶点之间的最短路径长度, 计算矩阵D0,D1,D2和D3,其中Dk[i, j]表示从顶点i到顶点j的不经过编号大于
i=find ( (1) )
if i>0 then output i
else output“no solution”
end SEARCH
过程find (low, high)
//求A[low..high]中使得A[i]=i的一个下标并返回,若不存在,
//则返回0。
if (2) then return 0
生专
_
订
马的周游问题:给出一个nxn棋盘,已知一个中国象棋马在
_
_
棋盘上的某个起点位置(x0, y0),求一条访问每个棋盘格点恰好
_
_
一次,最后回到起点的周游路线。 (设马走日字。)
《算法设计与分析》期末必考复习及答案题整理
《算法设计与分析》期末必考复习及答案题整理1、分治法的基本思想:是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题互相独立且与原问题相同。
递归地解这些子问题,然后将各子问题的解合并得到原问题的解。
2、贪心选择性质:指所求问题的整体最优解可以通过一系列局部最优的选择,3、 Prim算法:设G=(V,E)是连通带权图,V={1,2,…,n}。
构造G的最小生成树的Prim算法的基本思想是:首先置S={1},然后,只要S是V的真子集,就作如下的贪心选择:选取满足条件i?S,j?V-S,且c[j]最小的边,将顶点j添加到S 中。
这个过程一直进行到S=V时为止。
4、什么是剪枝函数:回溯法搜索解空间树时,通常采用两种策略避免无效搜索,提高回溯法的搜索效率。
其一是用约束函数在扩展结点处剪去不满足约束的子树;其二是用限界函数剪去得不到最优解的子树。
这两类函数统称为剪枝函数。
6、分支限界法的基本思想:(1)分支限界法常以广度优先或以最小耗费(最大效益)优先的方式搜索问题的解空间树。
(2)在分支限界法中,每一个活结点只有一次机会成为扩展结点。
活结点一旦成为扩展结点,就一次性产生其所有儿子结点。
在这些儿子结点中,导致不可行解或导致非最优解的儿子结点被舍弃,其余儿子结点被加入活结点表中。
(3)此后,从活结点表中取下一结点成为当前扩展结点,并重复上述结点扩展过程,这个过程一直持续到找到所需的解或活结点表这空时为止。
5、什么是算法的复杂性:是该算法所需要的计算机资源的多少,它包括时间和空间资源。
6、最优子结构性质:该问题的最优解包含着其子问题的最优解。
7、回溯法:是一个既带有系统性又带有跳跃性的搜索算法。
这在问题的解空间树中,按深度优先策略,从根结点出发搜索解空间树。
算法搜索至解空间树的任一结点时,先判断该结点是否包含问题的解。
如果肯定不包含,则跳过对以该结点为根的子树的搜索,逐层向其祖先结点回溯;否则,进入该子树,继续按深度优先策略搜索。
计算机算法设计与分析-期末考试复习资料
一、算法设计实例1、快速排序(分治法)int partition(float a[],int p,int r) {int i=p,j=r+1;float x=a[p];while(1){while(a[++i]<x);while(a[--j]<x);if(i>=j)break;swap(a[i],a[j]);}a[p]=a[j];a[j]=x;return j;}void Quicksort(float a[],int p,int r){//快速排序if(p<r){int q=partition(a,p,r);Quicksort(a,p,q-1);Quicksort(a,p+1,r);}}2、归并排序(分治法)void mergesort(Type a[],int left,int right) {if(left<rigth){int mid=(left+right)/2;//取中点mergesort(a,left,mid);mergesort(a,mid+1,right);mergesort(a,b,left,right);//合并到数组bmergesort(a,b,left,right);//复制到数组a}}3、背包问题(贪心算法)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];}4、活动安排问题(贪心算法)void Greadyselector(int n,Type s[],Type f[],bool A[]) {//s[i]为活动结束时间,f[j]为j活动开始时间A[i]=true;int j=1;for(i=2;i<=n;i++){if(s[i]>=f[j]){A[i]=true;j=i;}elseA[i]=false;}}5、喷水装置问题(贪心算法)void knansack(int w,int d,float r[],int n){//w为草坪长度d为草坪宽度r[]为喷水装置的喷水半径,//n为n种喷水装置,喷水装置的喷水半径>=d/2sort(r[],n);//降序排序count=0;//记录装置数for(i=1;i<=n;i++)x[i]=0;//初始时,所有喷水装置没有安装x[i]=0for(i=1;w>=0;i++){x[i]=1;count++;w=w-2*sqart(r[i]*r[i]-1);}count<<装置数:<<count<<end1;for(i=1;i<=n;i++)count<<喷水装置半径:<<r[i]<<end1;}6、最优服务问题(贪心算法)double greedy(rector<int>x,int s){rector<int>st(s+1,0);rector<int>su(s+1,0);int n=x.size();//st[]是服务数组,st[j]为第j个队列上的某一个顾客的等待时间//su[]是求和数组,su[j]为第j个队列上所有顾客的等待时间sort(x.begin(),x.end());//每个顾客所需要的服务时间升序排列int i=0,j=0;while(i<n){st[j]+=x[i];//x[i]=x.begin-x.endsu[j]+=st[j];i++;j++;if(j==s)j=0;}double t=0;for(i=0;i<s;i++)t+=su[i];t/=n;return t;}7、石子合并问题(贪心算法)float bebig(int A[],int n) {m=n;sort(A,m);//升序while(m>1){for(i=3;i<=m;i++)if(p<A[i])break;elseA[i-2]=A[i];for(A[i-2]=p;i<=m;i++){A[i-1]=A[i];m--;}}count<<A[1]<<end1}8、石子合并问题(动态规划算法)best[i][j]表示i-j合并化最优值sum[i][j]表示第i个石子到第j个石子的总数量|0f(i,j)=||min{f(i,k)+f(k+1,j)}+sum(i,j)int sum[maxm]int best[maxm][maxn];int n,stme[maxn];int getbest();{//初始化,没有合并for(int i=0;i<n;i++)best[i][j]=0;//还需要进行合并for(int r=1;r<n;r++){for(i=0;i<n-r;i++){int j=i+v;best[i][j]=INT-MAX;int add=sum[j]-(i>0!sum[i-1]:0);//中间断开位置,取最优值for(int k=i;k<j;++k){best[i][j]=min(best[i][j],best[i][k]+best[k+1][j])+add;}}}return best[0][n-1];}9、最小重量机器设计问题(回溯法)typedef struct Qnode{float wei;//重量float val;//价格int ceng;//层次int no;//供应商struct Qnode*Parent;//双亲指针}Qnode;float wei[n+1][m+1]=;float val[n+1][m+1]=;void backstack(Qnode*p){if(p->ceng==n+1){if(bestw>p->wei){testw=p->wei;best=p;}}else{for(i=1;i<=m;i++)k=p->ceng;vt=p->val+val[k][i];wt=p->wei+wei[k][i];if(vt<=d&&wt<=bestw){s=new Qnode;s->val=vt;s->wei=wt;s->ceng=k+1;s->no=1;s->parent=p;backstrack(S);}}}10、最小重量机器设计问题(分支限界法)typedef struct Qnode{float wei;//重量float val;//价格int ceng;//层次int no;//供应商struct Qnode*Parent;//双亲指针}Qnode;float wei[n+1][m+1]=;float val[n+1][m+1]=;void minloading(){float wt=0;float vt=0;float bestw=Max;//最小重量Qnode*best;s=new Qnode;s->wei=0;s->val=0;s->ceng=1;s->no=0;s->parent=null;Iinit_Queue(Q); EnQueue(Q,S);do{p=OutQueue(Q);//出队if(p->ceng==n+1){if(bestw>p->wei){bestw=p->wei;best=p;}}else{for(i=1;i<=m;i++){k=p->ceng;vt=p->val+val[k][i];wt=p->wei+wei[k][i];if(vt<=d&&wt<=bestw){s=new Qnode;s->ceng=k+1;s->wt=wt;s->val=val;s->no=i;s->parent=p;EnQueue(Q,S);}}}}while(!empty(Q));p=best;while(p->parent){count<<部件:<<p->ceng-1<<end1;count<<供应商:<<p->no<<end1;p=p->parent;}}11、快速排序(随机化算法—舍伍德算法)int partion(int a[],int l,int r){key=a[l];int i=l,j=r;while(1){while(a[++i]<key&&i<=r);while(a[--j]>key&&j>=l);if(i>=j)break;if(a[i]!=a[j])swap(a[i],a[j]);}if((j!=l)&&a[l]!=a[j])swap(a[l],a[j]);return j;}int Ranpartion(int a[],int l,int r) {k=rand()%(r-1+l)+1;swap(a[k],a[l]);int ans=partion(a,l,r);return ans;}int Quick_sort(int a[],int l,int r,int k){int p=Randpartion(a,l,r);if(p==k)return a[k];else if(k<p)return Quick_sort(a,l,p-1,k);else{int j=0;for(int i=p+1;i<=r;i++)b[j++]=a[i]return Quick_sort(b,1,j,k-p);}}12、线性选择(随机化算法—舍伍德算法)二、简答题1.分治法的基本思想分治法的基本思想是将一个规模为n的问题分解为k个规模较小的子问题,这些子问题互相独立且与原问题相同。
《算法分析与设计》期末试题及参考答案
《算法分析与设计》期末试题及参考答案一、简要回答下列问题:1.算法重要特性是什么?1. 确定性、可行性、输入、输出、有穷性2.2.算法分析的目的是什么?2. 分析算法占用计算机资源的情况,对算法做出比较和评价,设计出额更好的算法。
3.3.算法的时间复杂性与问题的什么因素相关?3. 算法的时间复杂性与问题的规模相关,是问题大小n的函数。
4.算法的渐进时间复杂性的含义?4.当问题的规模n趋向无穷大时,影响算法效率的重要因素是T(n)的数量级,而其他因素仅是使时间复杂度相差常数倍,因此可以用T(n)的数量级(阶)评价算法。
时间复杂度T(n)的数量级(阶)称为渐进时间复杂性。
5.最坏情况下的时间复杂性和平均时间复杂性有什么不同?5. 最坏情况下的时间复杂性和平均时间复杂性考察的是n固定时,不同输入实例下的算法所耗时间。
最坏情况下的时间复杂性取的输入实例中最大的时间复杂度:W(n) = max{ T(n,I) } , I∈Dn平均时间复杂性是所有输入实例的处理时间与各自概率的乘积和:A(n) =∑P(I)T(n,I) I∈Dn6.简述二分检索(折半查找)算法的基本过程。
6. 设输入是一个按非降次序排列的元素表A[i:j] 和x,选取A[(i+j)/2]与x比较,如果A[(i+j)/2]=x,则返回(i+j)/2,如果A[(i+j)/2]<x,则A[i:(i+j)/2-1]找x,否则在A[ (i+j)/2+1:j] 找x。
上述过程被反复递归调用。
7.背包问题的目标函数和贪心算法最优化量度相同吗?7. 不相同。
目标函数:获得最大利润。
最优量度:最大利润/重量比。
8.采用回溯法求解的问题,其解如何表示?有什么规定?8. 问题的解可以表示为n元组:(x1,x2,……x n),x i∈S i, S i为有穷集合,x i∈S i, (x1,x2,……x n)具备完备性,即(x1,x2,……x n)是合理的,则(x1,x2,……x i)(i<n)一定合理。
《算法设计与分析》期末复习题
填空1.直接或间接地调用自身的算法称为 递归算法 。
2.算法的复杂性是 算法效率 的度量,是评价算法优劣的重要依据。
3.以广度优先或以最小耗费方式搜索问题解的算法称为 分支限界法 。
4.回溯法解题的显著特点是在搜索过程中动态产生问题的解空间。
在任何时刻,算法只保存从根结点到当前扩展结点的路径。
如果解空间树中从根结点到叶结点的最长路径的长度为h(n),则回溯法所需的计算空间通常为 O (h(n)) 。
5.人们通常将问题的解决方案分为两大类:一类是可以通过执行若干个步骤就能得出问题结论的,叫做 算法 方案;另一类是不能通过若干个步骤直截了当地得出结论,而是需要反复验证才能解决的,叫做 启发式 方案。
6.算法就是一组有穷的 规则 ,它们规定了解决某一特定类型问题的 一系列运算 。
7.在进行问题的计算复杂性分析之前,首先必须建立求解问题所用的计算模型。
3个基本计算模型是 随机存取机RAM 、 随机存取存储程序机RASP 、 图灵机 。
8.快速排序算法的性能取决于 划分的对称性 。
9.计算机的资源最重要的是 时间资源 和 空间 资源。
因而, 算法的复杂性有 时间复杂度 和 空间复杂度 之分。
10.贪心算法总是做出在当前看来 最优 的选择。
也就是说贪心算法并不从整体最优考虑,它所做出的选择只是在某种意义上的 局部最优 。
11.许多可以用贪心算法求解的问题一般具有2个重要的性质: 贪心选择 性质和 最优子结构 性质。
12.常见的两种分支限界法为 队列式(FIFO )分支限界 和 优先队列式分支限界 。
13.解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中需要排序的是 回溯法、分支限界法 ,不需要排序的是 动态规划 。
14.f ( n ) = 6 × 2n + n 2,f(n)的渐进性态f ( n ) = O ( 2n )。
15.对于含有n 个元素的排列树问题,最好情况下计算时间复杂性为 ,最坏情况下计算时间复杂性为 n! 。
(完整版)算法设计与分析期末考试卷及答案a
e i rb ei n一.填空题: 1. 元运算2. O 3.∑∈nD I I t I p )()(4. 将规模为n 的问题分解为子问题以及组合相应的子问题的解所需的时间5. 分解,递归,组合6. 在问题的状态空间树上作带剪枝的DFS 搜索(或:DFS+剪枝)7. 前者分解出的子问题有重叠的,而后者分解出的子问题是相互独立(不重叠)的8. 局部9. 高10. 归并排序算法11. 不同12. v=random (low, high); 交换A[low]和A[v]的值 随机选主元13. 比较n二.计算题和简答题:1. 阶的关系:(1) f(n)= O(g(n))(2) f(n)=(g(n))Ω (3) f(n)=(g(n))Ω (4) f(n)= O(g(n))3. (1) i>=1 (2)k[i]+1 (3) 1(4) i+1 (5) k[i]=0 (6) tag[x, y]=0(7) x=x-dx[k[i]]; y=y-dy[k[i]]四.算法设计题:1. 贪心选择策略:从起点的加油站起每次加满油后不加油行驶尽可能远,直至油箱中的油耗尽前所能到达的最远的油站为止,在该油站再加满油。
算法MINSTOPS输入:A、B两地间的距离s,A、B两地间的加油站数n,车加满油后可行驶的公里数m,存储各加油站离起点A的距离的数组d[1..n]。
输出:从A地到B地的最少加油次数k以及最优解x[1..k](x[i]表示第i次加油的加油站序号),若问题无解,则输出no solution。
d[n+1]=s; //设置虚拟加油站第n+1站。
for i=1 to nif d[i+1]-d[i]>m thenoutput “no solution”; return //无解,返回end ifend fork=1; x[k]=1 //在第1站加满油。
s1=m //s1为用汽车的当前油量可行驶至的地点与A点的距离i=2while s1<sif d[i+1]>s1 then //以汽车的当前油量无法到达第i+1站。
计算机算法设计与分析期终考试复习题
计算机算法设计与分析复习题一、填空题1、一个算法复杂性的高低体现在计算机运行该算法所需的时间和存储器资源上,因此算法的复杂性有时间复杂性和空间复杂性之分。
2、出自于“平衡子问题”的思想,通常分治法在分割原问题,形成若干子问题时,这些子问题的规模都大致相同。
3、使用二分搜索算法在n个有序元素表中搜索一个特定元素,在最佳情况下,搜索的时间复杂性为O(1),在最坏情况下,搜索的时间复杂性为O (logn)。
4、已知一个分治算法耗费的计算时间T(n),T(n)满足如下递归方程: n?2O(1)? T(n)??2T(n/2)?O(n)n?2?解得此递归方可得T(n)= O()。
nlogn 5、动态规划算法有一个变形方法备忘录方法。
这种方法不同于动态规划算法“自底向上”的填充方向,而是“自顶向下”的递归方向,为每个解过的子问题建立了备忘录以备需要时查看,同样也可避免相同子问题的重复求解。
递归的二分查找算法在divide阶段所花的时间是 O(1) ,conquer阶段6.所花的时间是 T(n/2) ,算法的时间复杂度是 O( log n) 。
7.Prim算法利用贪心策略求解最小生成树问题,其时间复杂度是2O(n) 。
8.背包问题可用贪心法,回溯法等策略求解。
39.用动态规划算法计算矩阵连乘问题的最优值所花的时间是 O(n) ,子2问题空间大小是 O(n) 。
10.图的m着色问题可用回溯法求解,其解空间树中叶子结点个数是nm ,解空间树中每个内结点的孩子数是 m 。
11.单源最短路径问题可用贪心法、分支限界等策略求解。
12、一个算法的优劣可以用(时间复杂度)与(空间复杂度)与来衡量。
13、回溯法在问题的解空间中,按(深度优先方式)从根结点出发搜索解空间树。
14、直接或间接地调用自身的算法称为(递归算法)。
15、?记号在算法复杂性的表示法中表示(渐进确界或紧致界)。
16、在分治法中,使子问题规模大致相等的做法是出自一种(平衡(banlancing)子问题)的思想。
《算法分析与设计》期末考试复习题纲(完整版)
《算法分析与设计》期末复习题一、选择题1.算法必须具备输入、输出和( D )等4个特性。
A.可行性和安全性 B.确定性和易读性C.有穷性和安全性 D.有穷性和确定性2.算法分析中,记号O表示( B ),记号Ω表示( A )A.渐进下界B.渐进上界C.非紧上界D.紧渐进界3.假设某算法在输入规模为n时的计算时间为T(n)=3*2^n。
在某台计算机上实现并完成概算法的时间为t秒。
现有另一台计算机,其运行速度为第一台的64倍,那么在这台新机器上用同一算法在t秒内能解输入规模为多大的问题?( B )解题方法:3*2^n*64=3*2^xA.n+8 B.n+6C.n+7 D.n+54.设问题规模为N时,某递归算法的时间复杂度记为T(N),已知T(1)=1,T(N)=2T(N/2)+N/2,用O表示的时间复杂度为( C )。
A.O(logN) B.O(N)C.O(NlogN) D.O(N²logN)5.直接或间接调用自身的算法称为( B )。
A.贪心算法 B.递归算法C.迭代算法 D.回溯法6.Fibonacci数列中,第4个和第11个数分别是( D )。
A.5,89 B.3,89C.5,144 D.3,1447.在有8个顶点的凸多边形的三角剖分中,恰有( B )。
A.6条弦和7个三角形 B.5条弦和6个三角形C.6条弦和6个三角形 D.5条弦和5个三角形8.一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。
A.重叠子问题 B.最优子结构性质C.贪心选择性质 D.定义最优解9.下列哪个问题不用贪心法求解( C )。
A.哈夫曼编码问题 B.单源最短路径问题C.最大团问题 D.最小生成树问题10.下列算法中通常以自底向上的方式求解最优解的是( B )。
A.备忘录法 B.动态规划法C.贪心法 D.回溯法11.下列算法中不能解决0/1背包问题的是( A )。
A.贪心法 B.动态规划C.回溯法 D.分支限界法12.下列哪个问题可以用贪心算法求解( D )。
算法分析与设计期末复习题
一、选择题1.一个.java文件中可以有〔〕个public类。
A.一个B.两个C.多个D.零个2.一个算法应该是〔〕A.程序B.问题求解步骤的描绘C.要满足五个根本特性D.A和C3.用计算机无法解决“打印所有素数〞的问题,其原因是解决该问题的算法违犯了算法特征中的〔〕A.唯一性B.有穷性C.有0个或多个输入D.有输出4.某校有6位学生参加学生会主席竞选,得票数依次为130,20,98,15,67,3。
假设采用冒泡排序算法对其进展排序,那么完成第二遍时的结果是〔〕A.3,15,130,20,98,67B.3,15,20,130,98,67C.3,15,20,67,130,98 D.3,15,20,67,98,1305.以下关于算法的描绘,正确的选项是〔〕A.一个算法的执行步骤可以是无限的B.一个完好的算法必须有输出C.算法只能用流程图表示D.一个完好的算法至少有一个输入6.Java Application源程序的主类是指包含有〔〕方法的类。
A、main方法B、toString方法C、init方法D、actionPerfromed方法7.找出满足各位数字之和等于5的所有三位数可采用的算法思路是〔〕A.分治法B.减治法C.蛮力法D.变治法8.在编写Java Application程序时,假设需要使用到标准输入输出语句,必须在程序的开头写上( )语句。
9.计算某球队平均年龄的部分算法流程图如下列图,其中:c用来记录已输入球员的人数,sum用来计算有效数据之和,d用来存储从键盘输入的球员年龄值,输入0时表示输入完毕。
图中空白处理框①和②处应填入的是〔〕A.①sum ←sum + d B.①sum ←sum + c②c ←c + 1②c ←c + 1C.①sum ←sum + d D.①sum ←sum + c②d ←d + 1 ②d ←d + 110.报名参加冬季越野赛跑的某班5位学生的学号是:5,8,11,33,45。
(完整)算法设计与分析期末试题_考试版
1、用计算机求解问题的步骤:1、问题分析2、数学模型建立3、算法设计与选择4、算法指标5、算法分析6、算法实现7、程序调试8、结果整理文档编制2、算法定义:算法是指在解决问题时,按照某种机械步骤一定可以得到问题结果的处理过程3、算法的三要素1、操作2、控制结构3、数据结构算法具有以下5个属性:有穷性:确定性:可行性:输入:输出:算法设计的质量指标:正确性:算法应满足具体问题的需求;可读性:算法应该好读,以有利于读者对程序的理解;健壮性:算法应具有容错处理,当输入为非法数据时,算法应对其作出反应,而不是产生莫名其妙的输出结果。
效率与存储量需求:效率指的是算法执行的时间;存储量需求指算法执行过程中所需要的最大存储空间。
一般这两者与问题的规模有关。
复杂性的渐近性态设T(N)是算法A的复杂性函数,使得当N→∞时有:(T(N)-T’(N))/T(N)→ 0那么,我们就说T’(N)是T(N)当N→∞时的渐近性态,或叫T’(N)为算法A 当N→∞的渐近复杂性而与T(N)相区别.P = NP经常采用的算法主要有迭代法、分而治之法、贪婪法、动态规划法、回溯法、分支限界法分而治之法1、基本思想将一个难以直接解决的大问题,分割成一些规模较小的相同问题,以便各个击破,分而治之.分治法所能解决的问题一般具有以下几个特征:(1)该问题的规模缩小到一定的程度就可以容易地解决;(2)该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质;(3)利用该问题分解出的子问题的解可以合并为该问题的解;(4)该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。
3、分治法的基本步骤(1)分解:将原问题分解为若干个规模较小,相互独立,与原问题形式相同的子问题;(2)解决:若子问题规模较小而容易被解决则直接解,否则递归地解各个子问题;(3)合并:将各个子问题的解合并为原问题的解。
递归:直接或间接的调用自身的算法,叫做递归算法.1·期盘覆盖用分治策略,可以设计解棋盘问题的一个简捷的算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、二分搜索算法是利用( A )实现的算法。
A、分治策略
B、动态规划法
C、贪心法
D、回溯法
2、下列不是动态规划算法基本步骤的是( A )。
A、找出最优解的性质
B、构造最优解
C、算出最优解
D、定义最优解
3、最大效益优先是( A )的一搜索方式。
A、分支界限法
B、动态规划法
C、贪心法
D、回溯法
4、最长公共子序列算法利用的算法是( B )。
A、分支界限法
B、动态规划法
C、贪心法
D、回溯法
5. 回溯法解TSP问题时的解空间树是( A )。
A、子集树
B、排列树
C、深度优先生成树
D、广度优先生成树6.下列算法中通常以自底向上的方式求解最优解的是( B )。
A、备忘录法
B、动态规划法
C、贪心法
D、回溯法
7、衡量一个算法好坏的标准是(C )。
A 运行速度快
B 占用空间少
C 时间复杂度低
D 代码短
8、以下不可以使用分治法求解的是(D )。
A 棋盘覆盖问题
B 选择问题
C 归并排序
D 0/1背包问题
9. 实现循环赛日程表利用的算法是( A )。
A、分治策略
B、动态规划法
C、贪心法
D、回溯法
10、实现最长公共子序列利用的算法是( B )。
A、分治策略
B、动态规划法
C、贪心法
D、回溯法11.下面不是分支界限法搜索方式的是( D )。
A、广度优先
B、最小耗费优先
C、最大效益优先
D、深度优先
12.下列算法中通常以深度优先方式系统搜索问题解的是( D )。
A、备忘录法
B、动态规划法
C、贪心法
D、回溯法
13. 一个问题可用动态规划算法或贪心算法求解的关键特征是问题的( B )。
A、重叠子问题
B、最优子结构性质
C、贪心选择性质
D、定义最优解14.广度优先是( A )的一搜索方式。
A、分支界限法
B、动态规划法
C、贪心法
D、回溯法
15.背包问题的贪心算法所需的计算时间为( B )。
A、O(n2n)
B、O(nlogn)
C、O(2n)
D、O(n)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.下面哪种函数是回溯法中为避免无效搜索采取的策略( B )
A.递归函数 B.剪枝函数C。
随机数函数 D.搜索函数
21、以深度优先方式系统搜索问题解的算法称为 ( D ) 。
A、分支界限算法
B、概率算法
C、贪心算法
D、回溯算法
22、贪心算法与动态规划算法的主要区别是( B )。
A、最优子结构
B、贪心选择性质
C、构造最优解
D、定义最优解
23. 采用最大效益优先搜索方式的算法是( A )。
A、分支界限法
B、动态规划法
C、贪心法
D、回溯法
24. ( D )是贪心算法与动态规划算法的共同点。
A、重叠子问题
B、构造最优解
C、贪心选择性质
D、最优子结构性质
25. 矩阵连乘问题的算法可由(B)设计实现。
A、分支界限算法
B、动态规划算法
C、贪心算法
D、回溯算法
26. 0-1背包问题的回溯算法所需的计算时间为( A )
A、O(n2n)
B、O(nlogn)
C、O(2n)
D、O(n)
27、背包问题的贪心算法所需的计算时间为( B )
A、O(n2n)
B、O(nlogn)
C、O(2n)
D、O(n)
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、采用广度优先策略搜索的算法是( A )。
A、分支界限法
B、动态规划法
C、贪心法
D、回溯法34.实现合并排序利用的算法是( A )。
A、分治策略
B、动态规划法
C、贪心法
D、回溯法
35.下列是动态规划算法基本要素的是( D )。
A、定义最优解
B、构造最优解
C、算出最优解
D、子问题重叠性质
36.下列算法中通常以自底向下的方式求解最优解的是( B )。
A、分治法
B、动态规划法
C、贪心法
D、回溯法
二、填空题
1.算法的复杂性有时间复杂性和空间复杂性之分。
2、程序是算法用某种程序设计语言的具体实现。
3、算法的“确定性”指的是组成算法的每条指令是清晰的,无歧义的。
4.矩阵连乘问题的算法可由动态规划设计实现。
5、算法是指解决问题的一种方法或一个过程。
6、快速排序算法的性能取决于划分的对称性。
7、从分治法的一般设计模式可以看出,用它设计出的程序一般是递归算法。
8、问题的最优子结构性质是该问题可用动态规划算法或贪心算法求解的关键特征。
9、以深度优先方式系统搜索问题解的算法称为回溯法。
10、任何可用计算机求解的问题所需的时间都与其规模有关。
11、计算一个算法时间复杂度通常可以计算循环次数、基本操作的频率或计算步。
12、回溯法搜索解空间树时,常用的两种剪枝函数为约束函数和限界函数
14、解决0/1背包问题可以使用动态规划、回溯法和分支限界法,其中不需要排序的是动态规划,需要排序的是回溯法,分支限界法。
15、使用回溯法进行状态空间树裁剪分支时一般有两个标准:约束条件和目标函数的界,N 皇后问题和0/1背包问题正好是两种不同的类型,其中同时使用约束条件和目标函数的界进
行裁剪的是 0/1背包问题,只使用约束条件进行裁剪的是 N皇后问题。
17、回溯法是一种既带有系统性又带有跳跃性的搜索算法。
18. 动态规划算法的两个基本要素是. 最优子结构性质和重叠子问题性质
19.贪心算法的基本要素是贪心选择质和最优子结构性质。
21. 动态规划算法的基本思想是将待求解问题分解成若干子问题,先求解子问题,然后从这些子问题的解得到原问题的解。
算法是由若干条指令组成的有穷序列,且要满足输入,输出、确定性和有限性四条性质。
23、快速排序算法是基于分治策略的一种排序算法。
24、以广度优先或以最小耗费方式搜索问题解的算法称为分支限界法。
三、算法设计题
1.背包问题的贪心算法,分支限界算法
2.最大子段和: 动态规划算法
3.贪心算法求活动安排问题
5.快速排序
6.多机调度问题-贪心算法
四、简答题
1分治法的基本思想
2. 分治法与动态规划法的相同点
3. 分治法与动态规划法的不同点
4. 分支限界法与回溯法的相同点
5.分治法所能解决的问题一般具有的几个特征是:
6.用分支限界法设计算法的步骤
7. 回溯法中常见的两类典型的解空间树是子集
8. 请简述符号t(n)∈θ(g(n)), t(n)∈Ω(g(n)),t(n)∈Ο(g(n))的含义。
9. 分支限界法的搜索策略是:。