算法设计技巧与分析答案

算法设计技巧与分析答案
算法设计技巧与分析答案

算法设计技巧与分析参考答案第1章算法分析基本概念 1.1 (a)6 (b)5 (c)6 (d)6 1.4 算法执行了7+6+5+4+3+2+1=28次比较 45 33 24 45 12 12 24 12 12 33 24 45 45 12 24 12 12 12 24 45 45 33 24 12 12 12 12 45 45 33 24 24 12 24 12 12 45 33 45 24 12 12 12 24 24 33 45 45 12 12 12 24 24 33 45 45 12 12 12 24 24 33 45 45 1.5 (a)算法MODSELECTIONSORT执行的元素赋值的最少次数是0,元素已按

非降序排列的时候达到最小值。 (b) 算法MODSELECTIONSORT

执行的元素赋值的最多

次数是,元素已按非升序排列的时候达到最小值。 2 1.7 4 3 12 5 6 7 2 9 1次 3 4 1次 3 4 12 2次 3 4 5 12

3 4 5 6 12 2次 7 12 3 4 5 6 2次 2 3 4 5 6 7 12 6次 7 9 2

3 4 5 6 12 2次由上图可以看到执行的比较次数为

1+1+2+2+2+6+2=16次。 1.11 比较9次 2 4 5 7 8 11 12 13 15 17 19 比较为6次 2 4 5 8 11 13 17 19 7 12 15 比较为3次,

2 5 17 19 4 8 11 1

3 7 12 15 2次,1次 2 17 5 19 11 13

4 8 12 1

5 7

比较均为1次,共5次 2 17 19 5 13 11 4 8 15 12 7 由上图可以

得出比较次数为5+6+6+9=26次。

1.13 FTF,TTT,FTF,TFF,FTF 1.16 (a)执行该算法,元素比较的最少次数是n-1。元素已按非降序排列时候达到最小值。

(b) 执行该算法,元素比较的最多次数是。

元素已2按非升序排列时候达到最大值。(c) 执行该算法,元素赋值的最少次数是0。元素已按非降序排列时候达到最小值。

(d) 执行该算法,元素赋值的最多次数是。元素已2按非升序排列时候达到最大值。(e)用O符号和符号表示算法BUBBLESORT的运行时间:,

2(f)不可以用符号来表示算法的运行时间:是用来表示算法的精确阶的,而本算法运行时间由线性到平方排列,因此不能用这一符号表示。 1.27 不能用关系来比较和增长的阶。

∵22不是22100nn2n1

的,即不能用关系来比较和增长

的阶。 1.32

222o(100n)100nn

(a)当n为2的幂时,第六步执行的最大次数是:时,

(b)由(a)可以得到:当每一次循环j都为2的幂时,第六步执行的次数最大,k k33则当(其中取整)时,

22nn

(c)用符号

表示的算法的时间复杂性是O(nlogn)kk已

证明n=2的情况,下面证明n=2+1的情

况:因为有

所以n=2+1时,第六步执行的

最大次数仍是n log n。 (d) 用符号表示

的算法的时间复杂性是。当满足取

整为奇数时,算法执行的次数是次,其

他情况算法执行次数均大于。n(e)

O更适合表示算法的时间复杂性。因为本

算法时间复杂性从到,而是表示精确阶的。

1.38 对个数进行排序。n

第5章归纳法 5.3(本题不仅有以下一个答案) 1.max(n) 过程:max(i) if n=1 return a[1] t=max(i-1) if a[i-1]>t return a[i-1] else return t end if 5.6 最

多次数:最少次数:

-1 5.7

参考例5.1 5.14 (a)不稳定,例如: 12 45 45

24 12 45 45 24 12 24 45 45 12 24 45 45 可见SELECTIONSORT中相等元素的序在排序后改

变。(b)(c)(d)(f)稳定 5.17 (a)利用

10取,

P

00

5.18 (a)

第6章分治6.3 输入:A[1,2,…n]

输出:max,min 1.for i=1 to mid 2. j=high-i 3. if a[i]>a[j], then exchange a[i],a[j] 4.end for 5.for i=low to mid 6. if a[i+1]a[high], then exchange

a[high],a[i+1] 10.end for 6.5 输入:一个整数

数组A[1,2,…,n] 输出:sum 1.if high-low=1 then 2. sum=a[low]+a[high] 3.else 4. mid=(low+high)/2 5 sum1=sum(low,mid) 6 sum2=sum(mid+1,high) 7. sum=sum1+sum2

8.end if

9.return sum 算法需要的工作空间为3 6.10.

32 15 14 15 11 17 25 51 11 14 15 15 17 25 32 51 32 15 14 15

11 17 25 51 14 15 15 32 11 17 25 51 32 15 14 15 11 17 25 51 15 32 14 15 11 17 25 51 32 15 14 15 11 17 25 51 32 15 14 15 11

17 25 51 12 25 17 19 51 32 45 18 22 37 15 12 15 17 18 19 22 25

32 37 45 51 12 25 17 19 51 32 45 18 22 37 15 12 17 19 25 32 51

15 18 22 37 45 12 25 17 19 51 32 45 18 22 37 15 12 17 25 19 32 51 18 22 45 15 37 12 25 17 19 51 32 45 18 22 37 15 12 25 17 19 51 32 18 45 22 37 15 12 25 19 51 45 18 12 25 19 51 45 18

6.31 27 13 31 18 45 16 17 53 27 13 31 18 45 16 17 53 27 13 31 18 45 16 17 53 13 18 27 31 45 16 17 53 27 13 18 31 45 16 17 53 27 13 18 16 45 31 17 53 27 13 18 16 17 31 45 53 17 13 18 16 27 31 45 53 彩色代表i,j所指的数字j总在i前6.36

23 32 27 18 45 11 63 12 19 16 25 52 14 14 11 12 18 19 16 23 32 45 27 25 52 63 14 18 11 12 19 16 12 11 14 18 19 16 12 11 11 12 11 11 18 19 16 16 18 19 16 16 19 19 32 45 27 25 52 63 25 27 32 45 52 63 25 27 25 27 27 27 45 52 63 45 52 63 52 63 52 63 63 63 11 12 14 16 18 19 23 25 27 32 45 52 63

6.42 Quicksort不是稳定的。 6.43 bcefg均为适应的,a、h不是适应的。第7章动态规划

7.1 (c),算法BOTTOMUPSORT 7.5 字符串A=”xzyzzyx”和B=”zxyyzxz”的最长公共子序列长度为4,共有6个最长公共子序列,分别是:①zyyx ②zyzz ③zyzx ④xyyx ⑤xyzz ⑥xyzx 7.9

C[1,5]=C[1,1]+C[2,5]+r[1]*r[2]*r[6]=307 C[1,5]=C[1,2]+C[3,5]+r[1]*r[3]*r[6]=252 C[1,5]=C[1,3]+C[4,5]+r[1]*r[4]*r[6]=372 C[1,5]=C[1,4]+C[5,5]+r[1]*r[5]*r[6]=260 所以最优括号表达

式为(M1M2)((M3M4)M5) 7.15

3

43334

7.21

0 1 2 3 4 5 6 7 8 9 10 11 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 3 3 3 3 3 3 3 3 3 3 2 0 0 3 4 4 7 7 7 7 7 7 7 3 0 0 3 4 4 7 7 8 9 9 12 12 4 0 0 3 4 4 7 7 8 10 11 12 14 7.23 当物品体

积为负值时,运行算法会发生溢出错误。

第八章贪心算法 8.12 1 s a 2 3 t 由算法从s 到t 要选择先到a 然后到t,其结果为4,而从s 到t 距离为2,所以探索不总是产生从s 到t 的距离

8.13 12 9 12 2 4 5 4 3

12 9 12 9 12 2 4 2 4

9 20 8 16 12 9 12 2 4 9 12

2 4 5 5 28 4

3 1 6

4 3

1 6 4 4 15 15 3 5 13 3 5

4 13 13 4 13 8 12 16 9 12

2 4 5 4

3 28 1 6

4 1

5 3

5 13 4 13 8.23(共有4棵最

小生成树,此处仅举一例)

1 3 5 1 3 5

2 4 6 2 4 6 1

3 5 1 3 5 2

4 6 2 4 6 1 3

5 2 4

6 8.24(共有4棵最小生成树,此处仅举一例) 1

3 5 1 3 5 2

4 6 2 4 6 1 3

5 1 3 5 2 4

6 2 4 6 1 3 5 1 3 5 2

4 6 2 4 6

8.31 38 22 10 16 5 12 2 3 5 7 9 f c

b e a d 每一个二叉树都取左边为0,右边

为1 则最优编码为a:10 b:001 c:0001 d:0000 e:01 f:11 注意:编码不唯一回溯法

《计算机算法设计与分析》习题及答案

《计算机算法设计与分析》习题及答案 一.选择题 1、二分搜索算法是利用( A )实现的算法。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 2、下列不是动态规划算法基本步骤的是( A )。 A、找出最优解的性质 B、构造最优解 C、算出最优解 D、定义最优解 3、最大效益优先是(A )的一搜索方式。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 4. 回溯法解旅行售货员问题时的解空间树是( A )。 A、子集树 B、排列树 C、深度优先生成树 D、广度优先生成树 5.下列算法中通常以自底向上的方式求解最优解的是(B )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法 6、衡量一个算法好坏的标准是( C )。 A 运行速度快 B 占用空间少 C 时间复杂度低 D 代码短 7、以下不可以使用分治法求解的是( D )。 A 棋盘覆盖问题 B 选择问题 C 归并排序 D 0/1背包问题 8. 实现循环赛日程表利用的算法是(A )。 A、分治策略 B、动态规划法 C、贪心法 D、回溯法 9.下面不是分支界限法搜索方式的是(D )。 A、广度优先 B、最小耗费优先 C、最大效益优先 D、深度优先 10.下列算法中通常以深度优先方式系统搜索问题解的是(D )。 A、备忘录法 B、动态规划法 C、贪心法 D、回溯法

11.备忘录方法是那种算法的变形。( B ) A、分治法 B、动态规划法 C、贪心法 D、回溯法 12.哈夫曼编码的贪心算法所需的计算时间为(B )。 A、O(n2n) B、O(nlogn) C、O(2n) D、O(n) 13.分支限界法解最大团问题时,活结点表的组织形式是(B )。 A、最小堆 B、最大堆 C、栈 D、数组 14.最长公共子序列算法利用的算法是(B)。 A、分支界限法 B、动态规划法 C、贪心法 D、回溯法 15.实现棋盘覆盖算法利用的算法是(A )。 A、分治法 B、动态规划法 C、贪心法 D、回溯法 16.下面是贪心算法的基本要素的是(C )。 A、重叠子问题 B、构造最优解 C、贪心选择性质 D、定义最优解 17.回溯法的效率不依赖于下列哪些因素( D ) A.满足显约束的值的个数 B. 计算约束函数的时间 C.计算限界函数的时间 D. 确定解空间的时间 18.下面哪种函数是回溯法中为避免无效搜索采取的策略(B ) A.递归函数 B.剪枝函数 C。随机数函数 D.搜索函数 19. (D)是贪心算法与动态规划算法的共同点。 A、重叠子问题 B、构造最优解 C、贪心选择性质 D、最优子结构性质 20. 矩阵连乘问题的算法可由( B )设计实现。 A、分支界限算法 B、动态规划算法 C、贪心算法 D、回溯算法 21. 分支限界法解旅行售货员问题时,活结点表的组织形式是( A )。

算法设计与分析考试题及答案

算法设计与分析考试题 及答案 Company number:【WTUT-WT88Y-W8BBGB-BWYTT-19998】

一、填空题(20分) 1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:确定性 有穷性 可行性 0个或多个输入 一个或多个输出 2.算法的复杂性有时间复杂性 空间复杂性之分,衡量一个算法好坏的标准是 时间复杂度高低 3.某一问题可用动态规划算法求解的显着特征是 该问题具有最优子结构性质 4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X 和Y 的一个最长公共子序列{BABCD}或{CABCD}或{CADCD } 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含一个(最优)解 6.动态规划算法的基本思想是将待求解问题分解成若干_子问题 ,先求解_子问题 ,然后从这些子问题 的解得到原问题的解。 7.以深度优先方式系统搜索问题解的算法称为回溯法 背包问题的回溯算法所需的计算时间为o(n*2n ) ,用动态规划算法所需的计算时间为o(min{nc,2n }) 9.动态规划算法的两个基本要素是最优子结构 _和重叠子问题 10.二分搜索算法是利用动态规划法实现的算法。 二、综合题(50分) 1.写出设计动态规划算法的主要步骤。 ①问题具有最优子结构性质;②构造最优值的递归关系表达式; ③最优值的算法描述;④构造最优解; 2. 流水作业调度问题的johnson 算法的思想。 ①令N 1={i|a i =b i };②将N 1中作业按a i 的非减序排序得到N 1’,将N 2中作业按b i 的非增序排序得到N 2’;③N 1’中作业接N 2’中作业就构成了满足Johnson 法则的最优调度。 3. 若n=4,在机器M1和M2上加工作业i 所需的时间分别为a i 和b i ,且 (a 1,a 2,a 3,a 4)=(4,5,12,10),(b 1,b 2,b 3,b 4)=(8,2,15,9)求4个作业的最优调度方案,并计算最优值。 步骤为:N1={1,3},N2={2,4}; N 1’={1,3}, N 2’={4,2}; 最优值为:38 4. 使用回溯法解0/1背包问题:n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3的0-1向量组成,要求用一棵完全二叉树表示其解空间(从根出发,左1右0),并画出其解空间树,计算其最优值及最优解。 解空间为{(0,0,0),(0,1,0),(0,0,1),(1,0,0),(0,1,1),(1,0,1), (1,1,0),(1,1,1)}。 解空间树为: 该问题的最优值为:16 最优解为:(1,1,0) 5. 设S={X 1,X 2,···,X n }是严格递增的有序集,利用二叉树的结点来存储S 中的元素,在表示S 的二叉搜索树中搜索一个元素X ,返回的结果有两种情形,(1)在二叉搜索树的内结点中找到X=X i ,其概率为b i 。(2)在二叉搜索树的叶结点中确定X ∈(X i ,X i+1),其概率为a i 。在表示S 的二叉搜索树T 中,设存储元素X i 的结点深度为C i ;叶结点(X i ,X i+1)的结点深度为d i ,则二叉搜索树T 的平均路长p 为多少假设二叉搜索树T[i][j]={X i ,X i+1,···,X j }最优值为m[i][j],W[i][j]= a i-1+b i +···+b j +a j ,则m[i][j](1<=i<=j<=n)递归关系表达式为什么 .二叉树T 的平均路长P=∑=+n i 1 Ci)(1*bi +∑=n j 0 dj *aj

2005.6算法设计与分析课程期末试卷

华南农业大学期末考试试卷(A卷) 2004学年第二学期(2005.6)考试科目:算法设计与分析考试类型:(开卷)考试时间:120分钟 学号姓名年级专业 一、选择题(30分,每题2分) 1、一个算法应该包含如下几条性质,除了 A 。 (A)二义性(B)有限性(C)正确性(D)可终止性 2、解决一个问题通常有多种方法。若说一个算法“有效”是指 D 。 (A)这个算法能在一定的时间和空间资源限制内将问题解决 (B)这个算法能在人的反应时间内将问题解决 (C)这个算法比其他已知算法都更快地将问题解决 (D)A和C 3、当输入规模为n时,算法增长率最小的是 B 。 (A)5n (B)20log2n(C)2n2(D)3nlog3n 4、渐进算法分析是指 B 。 (A)算法在最佳情况、最差情况和平均情况下的代价 (B)当规模逐步往极限方向增大时,对算法资源开销“增长率”上的简化分析(C)数据结构所占用的空间 (D)在最小输入规模下算法的资源代价 5、当上下限表达式相等时,我们使用下列哪种表示法来描述算法代价?C (A)大O表示法(B)大Ω表示法 (C)Θ表示法(D)小o表示法 6、采用“顺序搜索法”从一个长度为N的随机分布数组中搜寻值为K的元素。以下对顺序搜索法分析正确的是 B 。

(A)最佳情况、最差情况和平均情况下,顺序搜索法的渐进代价都相同 (B)最佳情况的渐进代价要好于最差情况和平均情况的渐进代价 (C)最佳情况和平均情况的渐进代价要好于最差情况的渐进代价 (D)最佳情况的渐进代价要好于平均情况的渐进代价,而平均情况的渐进代价要好于最差情况的渐进代价 7、递归通常用 C 来实现。 (A)有序的线性表(B)队列(C)栈(D)数组 8、分治法的设计思想是将一个难以直接解决的大问题分割成规模较小的子问题,分别解决子问题,最后将子问题的解组合起来形成原问题的解。这要求原问题和子问题。C (A)问题规模相同,问题性质相同 (B)问题规模相同,问题性质不同 (C)问题规模不同,问题性质相同 (D)问题规模不同,问题性质不同 9、在寻找n个元素中第k小元素问题中,如快速排序算法思想,运用分治算法对n 个元素进行划分,如何选择划分基准?下面 D 答案解释最合理。 (A)随机选择一个元素作为划分基准 (B)取子序列的第一个元素作为划分基准 (C)用中位数的中位数方法寻找划分基准 (D)以上皆可行。但不同方法,算法复杂度上界可能不同 10、对于0-1背包问题和背包问题的解法,下面 C 答案解释正确。 (A)0-1背包问题和背包问题都可用贪心算法求解 (B)0-1背包问题可用贪心算法求解,但背包问题则不能用贪心算法求解 (C)0-1背包问题不能用贪心算法求解,但可以使用动态规划或搜索算法求解,而背包问题则可以用贪心算法求解 (D)因为0-1背包问题不具有最优子结构性质,所以不能用贪心算法求解 11、关于回溯搜索法的介绍,下面D是不正确描述。 (A)回溯法有“通用解题法”之称,它可以系统地搜索一个问题的所有解或任意解(B)回溯法是一种既带系统性又带有跳跃性的搜索算法 (C)回溯算法在生成解空间的任一结点时,先判断该结点是否可能包含问题的解,如果肯定不包含,则跳过对该结点为根的子树的搜索,逐层向祖先结点回溯 (D)回溯算法需要借助队列这种结构来保存从根结点到当前扩展结点的路径 改:树结构 回溯法,又被称为通用解题法,用它可以系统地搜索问题的所有解。回溯法是一个既带有系统性又带有跳跃性的搜索算法。它在问题的解空间中按深度优先策略,从根结

算法设计与分析课后部分习题答案

算法实现题3-7 数字三角形问题 问题描述: 给定一个由n行数字组成的数字三角形,如图所示。试设计一个算法,计算出从三角形的顶至底的一条路径,使该路径经过的数字总和最大。编程任务: 对于给定的由n行数字组成的数字三角形,编程计算从三角形的顶至底的路径经过的数字和的最大值。数据输入: 有文件input.txt提供输入数据。文件的第1行是数字三角形的行数n,1<=n<=100。接下来的n行是数字三角形各行的数字。所有数字在0-99之间。结果输出: 程序运行结束时,将计算结果输出到文件output.txt中。文件第1行中的数是计算出的最大值。 输入文件示例输出文件示 例 input.txt output.txt 5 30 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 源程序: #include "stdio.h" voidmain() { intn,triangle[100][100],i,j;//triangle数组用来存储金字塔数值,n表示行数 FILE *in,*out;//定义in,out两个文件指针变量 in=fopen("input.txt","r"); fscanf(in,"%d",&n);//将行数n读入到变量n中

for(i=0;i=0;row--)//从上往下递归计算 for(int col=0;col<=row;col++) if(triangle[row+1][col]>triangle[row+1][col+1]) triangle[row][col]+=triangle[row+1][col]; else triangle[row][col]+=triangle[row+1][col+1]; out=fopen("output.txt","w"); fprintf(out,"%d",triangle[0][0]);//将最终结果输出到output.txt中 } 算法实现题4-9 汽车加油问题 问题描述: 一辆汽车加满油后可行驶nkm。旅途中有若干加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。并证明算法能产出一个最优解。编程任务: 对于给定的n和k个加油站位置,编程计算最少加油次数。数据输入: 由文件input.txt给出输入数据。第1行有2个正整数n和k ,表示汽车加满油后可行驶nkm,且旅途中有k个加油站。接下来的1行中,有k+1个整数,表示第k个加油站与第k-1个加油站之间的距离。第

算法设计与分析考试题及答案

1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性:_________,________,________,__________,__________。 2.算法的复杂性有_____________和___________之分,衡量一个算法 好坏的标准是______________________。 3.某一问题可用动态规划算法求解的显著特征是 ____________________________________。 4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X 和Y的一个最长公共子序列_____________________________。 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含___________。 6.动态规划算法的基本思想是将待求解问题分解成若干____________,先求解___________,然后从这些____________的解得到原问题的解。 7.以深度优先方式系统搜索问题解的算法称为_____________。 8.0-1背包问题的回溯算法所需的计算时间为_____________,用动态规划算法所需的计算时间为____________。 9.动态规划算法的两个基本要素是___________和___________。 10.二分搜索算法是利用_______________实现的算法。 二、综合题(50分) 1.写出设计动态规划算法的主要步骤。 2.流水作业调度问题的johnson算法的思想。

《算法设计与分析》教学大纲

《算法分析与设计》课程教学大纲 【课程编号】:14314025 【英文译名】:Analysis and Design of Computer Algorithms 【适用专业】:软件工程、计算机科学与技术、信息安全 【学分数】:3 【总学时】:48学时 【实践学时】:0 一、本课程教学目的和课程性质 本课程是软件工程、计算机科学与技术、信息安全等专业的选修课程,也可作为其它计算机相关专业的选修课程。课程属于专业教育课。 课程主要介绍计算机算法分析、算法设计及复杂性理论的基本概念、基本的算法分析方法和常用的算法设计方法。通过本课程的教学,强化学生算法分析与设计的基础理论知识,使学生掌握计算机算法分析的基本方法及常见的算法设计方法(如:分治法、回溯法、贪心法、动态规划法、分枝限界法等)。通过学习,学生能够用利用常见的算法设计方法来解决软件开发中的实际问题。培养扎实的专业知识和基本技能和从事应用软件开发和测试的能力。 二、本课程的基本要求 本课程的基本要求是让学生理解计算机算法效率分析与设计所涉及的基本概念和基础知识,掌握基本的算法分析方法和常见的算法设计方法,能熟练应用课程介绍的算法设计方法来解决软件开发中的实际问题。通过对算法实例的分析,进一步加深学生对算法设计方法的认识和理解。 1、理解算法的基本概念和算法的效率分析方法。 2、理解分治策略的原理、效率分析,掌握分支策略在常见问题(如:二分检索、归并分类、快速排序、选择问题等)问题中的应用。了解分治策略的变形(减治策略、变治策略)的思想和简单应用。 3、理解动态规划的原理、适用条件,了解算法的效率,掌握该算法在常见问题(如:多段图、最优二分检索树、0/1背包问题、货郎担问题、可靠性设计等)问题中的应用。 4、理解贪心方法的原理、效率分析方法,掌握在常见问题(如:背包问题、带有期限的作业排序、最小生成树、单源点最短路径等)问题中的应用。 5、理解回溯法的原理,掌握在常见问题(如:8-皇后、子集和数、图的着色、哈密顿环等)问题中的简单应用。 6、了解分支-限界方法的基本思想和简单应用。 7、了解基本的检索和周游方法的基本思想。 8、了解NP-难度和NP-完全问题基本思想和简单应用。 9、了解概率算法的基本思想及简单应用。 三、本课程与其他课程的关系

算法设计与分析试卷(2010)

内部资料,转载请注明出处,谢谢合作。 算法设计与分析试卷(A 卷) 一、 选择题 ( 选择1-4个正确的答案, 每题2分,共20分) (1)计算机算法的正确描述是: A .一个算法是求特定问题的运算序列。 B .算法是一个有穷规则的集合,其中之规则规定了一个解决某一特定类型的问题的运算序列。 C .算法是一个对任一有效输入能够停机的图灵机。 D .一个算法,它是满足5 个特性的程序,这5个特性是:有限性、确定性、能 行性、有0个或多个输入且有1个或多个输出。 (2)影响程序执行时间的因素有哪些? A .算法设计的策略 B .问题的规模 C .编译程序产生的机器代码质量 D .计算机执行指令的速度 (3)用数量级形式表示的算法执行时间称为算法的 A .时间复杂度 B .空间复杂度 C .处理器复杂度 D .通信复杂度 (4)时间复杂性为多项式界的算法有: A .快速排序算法 B .n-后问题 C .计算π值 D .prim 算法 (5)对于并行算法与串行算法的关系,正确的理解是: A .高效的串行算法不一定是能导出高效的并行算法 B .高效的串行算法不一定隐含并行性 C .串行算法经适当的改造有些可以变化成并行算法 D. 用串行方法设计和实现的并行算法未必有效 (6)衡量近似算法性能的重要标准有: A .算法复杂度 B .问题复杂度 C .解的最优近似度 D .算法的策略 (7)分治法的适用条件是,所解决的问题一般具有这些特征: A .该问题的规模缩小到一定的程度就可以容易地解决; B .该问题可以分解为若干个规模较小的相同问题; C .利用该问题分解出的子问题的解可以合并为该问题的解 D .该问题所分解出的各个子问题是相互独立的。 (8)具有最优子结构的算法有: A .概率算法 B .回溯法 C .分支限界法 D .动态规划法 (9)下列哪些问题是典型的NP 完全问题: A .排序问题 B .n-后问题 C .m-着色问题 D .旅行商问题 (10)适于递归实现的算法有: A .并行算法 B .近似算法 C .分治法 D .回溯法 二、算法分析题(每小题5分,共10分) (11)用展开法求解递推关系: (12)分析当输入数据已经有序时快速排序算法的不足,提出算法的改进方案。 ???>+-==1 1)1(211)(n n T n n T

算法设计与分析第2版 王红梅 胡明 习题答案

精品文档习题胡明-版)-王红梅-算法设计与分析(第2答案 1 习题)—1783Leonhard Euler,17071.图论诞生于七桥问题。出生于瑞士的伟大数学家欧拉(提 出并解决了该问题。七桥问题是这样描述的:北区一个人是否能在一次步行中穿越哥尼斯堡(现东区在叫加里宁格勒,在波罗的海南岸)城中全部岛区的七座桥后回到起点,且每座桥只经过一次,南区是这条河以及河上的两个岛和七座桥的图1.7 1.7 七桥问题图草图。请将该问题的数据模型抽象出来,并判断此问题是否有解。 七桥问题属于一笔画问题。 输入:一个起点 输出:相同的点一次步行1,经过七座桥,且每次只经历过一次2,回到起点3,该问题无解:能一笔画的图形只有两类:一类是所有的点都是偶点。另一类是只有二个奇点的图形。)用的不是除法而是减最初的欧几里德算法2.在欧几里德提出的欧几里德算法中(即法。请用伪代码描述这个版本的欧几里德算法 1.r=m-n r=0 循环直到2.m=n 2.1 n=r 2.2 r=m-n 2.3 m 输出3 .设计算法求数组中相差最小的两个元素(称为最接近数)的差。要求分别给出伪代3++描述。C码和 采用分治法// //对数组先进行快速排序在依次比较相邻的差//精品文档. 精品文档 #include using namespace std; int partions(int b[],int low,int high) { int prvotkey=b[low]; b[0]=b[low]; while (low=prvotkey)

算法设计与分析试卷及答案

湖南科技学院二○年学期期末考试 信息与计算科学专业年级《算法设计与分析》试题 考试类型:开卷试卷类型:C卷考试时量:120分钟 题号一二三四五总分统分人 得分 阅卷人 复查人 一、填空题(每小题3 分,共计30 分) 1、用O、Ω与θ表示函数f与g之间得关系______________________________。 2、算法得时间复杂性为,则算法得时间复杂性得阶为__________________________。 3、快速排序算法得性能取决于______________________________。 4、算法就是_______________________________________________________。 5、在对问题得解空间树进行搜索得方法中,一个活结点最多有一次机会成为活结点得就是_________________________。 6、在算法得三种情况下得复杂性中,可操作性最好且最有实际价值得就是_____情况下得时间复杂性。 7、大Ω符号用来描述增长率得下限,这个下限得阶越___________,结果就越有价值。。 8、____________________________就是问题能用动态规划算法求解得前提。 9、贪心选择性质就是指____________________________________________________________________________________________________________________。 10、回溯法在问题得解空间树中,按______________策略,从根结点出发搜索解空间树。 二、简答题(每小题10分,共计30分) 1、试述回溯法得基本思想及用回溯法解题得步骤。 2、有8个作业{1,2,…,8}要在由2台机器M1与M2组成得流水线上完成加工。每个作业加工得顺序都就是先在M1上加工,然后在M2上加工。M1与M2加工作业i所需得时间分别为: M110 2 8 12 6 9414

算法设计与分析课程设计(完整版)

HUNAN CITY UNIVERSITY 算法设计与分析课程设计 题目:求最大值与最小值问题 专业: 学号: 姓名: 指导教师: 成绩: 二0年月日

一、问题描述 输入一列整数,求出该列整数中的最大值与最小值。 二、课程设计目的 通过课程设计,提高用计算机解决实际问题的能力,提高独立实践的能力,将课本上的理论知识和实际有机的结合起来,锻炼分析解决实际问题的能力。提高适应实际,实践编程的能力。在实际的编程和调试综合试题的基础上,把高级语言程序设计的思想、编程巧和解题思路进行总结与概括,通过比较系统地练习达到真正比较熟练地掌握计算机编程的基本功,为后续的学习打下基础。了解一般程序设计的基本思路与方法。 三、问题分析 看到这个题目我们最容易想到的算法是直接比较算法:将数组的第 1 个元素分别赋给两个临时变量:fmax:=A[1]; fmin:=A[1]; 然后从数组的第 2 个元素 A[2]开始直到第 n个元素逐个与 fmax 和 fmin 比较,在每次比较中,如果A[i] > fmax,则用 A[i]的值替换 fmax 的值;如果 A[i] < fmin,则用 A[i]的值替换 fmin 的值;否则保持 fmax(fmin)的值不变。这样在程序结束时的fmax、fmin 的值就分别是数组的最大值和最小值。这个算法在最好、最坏情况下,元素的比较次数都是 2(n-1),而平均比较次数也为 2(n-1)。 如果将上面的比较过程修改为:从数组的第 2 个元素 A[2]开始直到第 n 个元素,每个 A[i]都是首先与 fmax 比较,如果 A[i]>fmax,则用 A[i]的值替换 fmax 的值;否则才将 A[i]与 fmin 比较,如果 A[i] < fmin,则用 A[i]的值替换 fmin 的值。 这样的算法在最好、最坏情况下使用的比较次数分别是 n-1 和 2(n-1),而平均比较次数是 3(n-1)/2,因为在比较过程中,将有一半的几率出现 A[i]>fmax 情况。

算法设计技巧与分析习题答案

算法设计技巧与分析习题答案 【篇一:算法设计与分析考试题及答案】 一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要 特性:_________,________,________,__________,__________。2.算法的复杂性有_____________和___________之分,衡量一个 算法好坏的标准是______________________。 3.某一问题可用动态规划算法求解的显著特征是 ____________________________________。 4.若序列x={b,c,a,d,b,c,d},y={a,c,b,a,b,d,c,d},请给出序列x和 y的一个最长公共子序列_____________________________。 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应 包含___________。 6.动态规划算法的基本思想是将待求解问题分解成若干 ____________,先求解___________,然后从这些____________ 的解得到原问题的解。 7.以深度优先方式系统搜索问题解的算法称为_____________。 8.0-1背包问题的回溯算法所需的计算时间为_____________,用动 态规划算法所需的计算时间为____________。 9.动态规划算法的两个基本要素是___________和___________。 10.二分搜索算法是利用_______________实现的算法。二、综合 题(50分) 1.写出设计动态规划算法的主要步骤。 2.流水作业调度问题的johnson算法的思想。 3.若n=4,在机器m1和m2上加工作业i所需的时间分别为ai和bi,且(a1,a2,a3,a4)=(4,5,12,10),(b1,b2,b3,b4)=(8,2,15,9)求4个作业 的最优调度方案,并计算最优值。 4.使用回溯法解0/1背包问题:n=3,c=9,v={6,10,3},w={3,4,4}, 其解空间有长度为3的0-1向量组成,要求用一棵完全二叉树表示 其解空间(从根出发,左1右0),并画出其解空间树,计算其最优 值及最优解。 6.描述0-1背包问题。三、简答题(30分) 1.流水作业调度中,已知有n个作业,机器m1和m2上加工作业i 所需的时间分别为ai和bi,请写出流水作业调度问题的johnson法 则中对ai和bi的排序算法。(函数名可写为sort(s,n))

计算机算法设计与分析期末考试复习题

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 )。

算法设计与分析课程设计报告

压缩软件课程设计书 一、问题描述: 建立一个文本文件,统计该文件中各字符频率,对各字符进行Huffman编码,将该文件至翻译成Huffman编码文件,再将Huffman编码文件翻译成原文件。 二、算法分析及思路: 对于该问题,我们做如下分析: (1)首先得构造出哈弗曼树,我们用函数HuffmanTree(int w[],int s[],int n)设计;(2)在构建哈弗曼树的基础上,进一步实现哈弗曼编码问题,我们用函数Huffmancode(char wen[])设计; (3)实现哈弗曼编码后再进一步实现哈弗曼译码问题,我们用函数Huffmandecode()设计; (4)其中编码问题中,得进一步统计出各个字符在文件中的频率,并进行一些必要的标记,我们用函数runhuffman(char wen[])设计; (5)在译码过程中,还有必要的一步是比较原文件与译码后的文件是否相同,我们用函数compare(char wen[])设计; (6)其中的文件输入我们用到类”fstream.h”中的输入输出流,并在运行的文件夹中建立一个文件名为逍遥游的文本文件,且在逍遥游文件中输入需要编码的数据。 三、主要解决的设计问题: 1.写一个对txt文件压缩和解压的程序,使用动态编码。 2.使用Huffman编码压缩和解压时,Huffman树的存储可以直接存储树结构,也可以存储所有字符的频度或权值,然后读取时建立Huffman树; 3.使用Huffman编码压缩和解压时,注意定义压缩码的结束标记,可以使用一个特殊的字符作为结束标记,也可以在压缩码之前存储其比特长度;如果使用一个特殊字符作为结束标记,则其频度为1,需要在建立Huffman树时把它看作一个独立的字符进行建树。 4.使用Huffman编码压缩和解压时,在一个缓冲区里面收集压缩码比特流,每当收集的比特数满8时,可以把这8比特通过位操作合并成一个字节写入文件(当然也可以收集满一定数目的字节后再写入文件)。写入文件的最小信息单位为字节。 四、程序设计的流程图:

算法设计技巧与分析答案

算法设计技巧与分析 参考答案 第1章算法分析基本概念 1.1 (a)6 (b)5 (c)6 (d)6 1.4 算法执行了7+6+5+4+3+2+1=28次比较 1.5 (a)算法MODSELECTIONSORT执行的元素赋值的最少次数是0,元素已按非降序排列的时候达到最小值。 (b) 算法MODSELECTIONSORT执行的元素赋值的最多

次数是3(1)2 n n ,元素已按非升序排列的时候达到最小值。 1.7 由上图可以看到执行的比较次数为1+1+2+2+2+6+2=16次。 1.11 由上图可以得出比较次数为5+6+6+9=26次。

1.13 FTF,TTT,FTF,TFF,FTF 1.16 (a) 执行该算法,元素比较的最少次数是n-1。元素已按非降序排列时候达到最小值。 (b) 执行该算法,元素比较的最多次数是(1)2 n n -。元素已 按非升序排列时候达到最大值。 (c) 执行该算法,元素赋值的最少次数是0。元素已按非降序排列时候达到最小值。 (d) 执行该算法,元素赋值的最多次数是3(1)2 n n -。元素已 按非升序排列时候达到最大值。 (e)n 用O 符号和Ω符号表示算法BUBBLESORT 的运行时间:2()t O n =,()t n =Ω (f)不可以用Θ符号来表示算法的运行时间:Θ是用来表示算法的精确阶的,而本算法运行时间由线性到平方排列,因此不能用这一符号表示。 1.27 不能用 关系来比较2n 和2100n 增长的阶。 ∵221 lim 0100100 n n n →∞=≠ 2n ∴不是2(100)o n 的,即不能用 关系来比较2n 和2100n 增长 的阶。 1.32

算法设计与分析试卷及答案

湖南科技学院二○ 年 学期期末考试 信息与计算科学专业 年级《算法设计与分析》 试题 考试类型:开卷 试卷类型:C 卷 考试时量:120 分钟 1. 用O 、Ω和θ表示函数f 与g 之间的关系______________________________。 ()()log log f n n n g n n == 2. 算法的时间复杂性为1, 1()8(3/7), 2 n f n f n n n =?=? +≥?,则算法的时间复杂性的阶 为__________________________。 3. 快速排序算法的性能取决于______________________________。 4. 算法是_______________________________________________________。 5. 在对问题的解空间树进行搜索的方法中,一个活结点最多有一次机会成为活结点的是_________________________。 6. 在算法的三种情况下的复杂性中,可操作性最好且最有实际价值的是_____情况下的时间复杂性。 7. 大Ω符号用来描述增长率的下限,这个下限的阶越___________,结果就越有价值。。 8. ____________________________是问题能用动态规划算法求解的前提。 9. 贪心选择性质是指________________________________________________________ ____________________________________________________________。 题 号 一 二 三 四 五 总分 统分人 得 分 阅卷人

算法设计与分析课程设计-实验指导书

算法设计与分析课程设计 实验指导书 上海第二工业大学 计算机与信息学院软件工程系

一、运动员比赛日程表 设有n=2k个运动员要进行网球比赛。设计一个满足以下要求的比赛日程表: ●每个选手必须与其它n-1个选手各赛一次 ●每个选手一天只能赛一次 ●循环赛一共进行n-1天 1、运用分治策略,该问题的递归算法描述如下,根据算法编制程序并上机 通过。 输入:运动员人数n(假定n恰好为2的i次方) 输出:比赛日程表A[1..n,1..n] 1. for i←1 to n //设置运动员编号 2. A[i,1]←i 3. end for 4. Calendar(0,n) //位移为0,运动员人数为n。 过程Calendar(v, k) //v表示位移(v=起始行-1),k表示运动员人数。 1. if k=2 then //运动员人数为2个 2. A[v+2,2]←A[v+1,1] //处理右下角 3. A[v+1,2]←A[v+2,1]//处理右上角 4. else 5. Calendar(v,k/2) //假设已制定了v+1至v+k/2运动员循环赛日程表 6. Calendar(v+k/2,k/2) //假设已制定了v+k/2+1至v+k运动员循环赛日程表 7. comment:将2个k/2人组的解,组合成1个k人组的解。 8. for i←1 to k/2 9. for j←1 to k/2 10. A[v+i+k/2,j+k/2]←A[v+i,j] //沿对角线处理右下角 11. end for 12. end for 13. for i←k/2+1 to k 14. for j←1 to k/2 15. A[v+i-k/2,j+k/2]←A[v+i,j] //沿对角线处理右上角 16. end for 17. end for 18. end if 2、编制该问题的非递归算法,上机通过。 将如上文件保存在命名为“学号+姓名+实验一”的文件夹中并上传到指定的服务器。

算法设计与分析习题解答

第一章作业 1.证明下列Ο、Ω和Θ的性质 1)f=Ο(g)当且仅当g=Ω(f) 证明:充分性。若f=Ο(g),则必然存在常数c1>0和n0,使得?n≥n0,有f≤c1*g(n)。由于c1≠0,故g(n) ≥ 1/ c1 *f(n),故g=Ω(f)。 必要性。同理,若g=Ω(f),则必然存在c2>0和n0,使得?n≥n0,有g(n) ≥ c2 *f(n).由于c2≠0,故f(n) ≤ 1/ c2*f(n),故f=Ο(g)。 2)若f=Θ(g)则g=Θ(f) 证明:若f=Θ(g),则必然存在常数c1>0,c2>0和n0,使得?n≥n0,有c1*g(n) ≤f(n) ≤ c2*g(n)。由于c1≠0,c2≠0,f(n) ≥c1*g(n)可得g(n) ≤ 1/c1*f(n),同时,f(n) ≤c2*g(n),有g(n) ≥ 1/c2*f(n),即1/c2*f(n) ≤g(n) ≤ 1/c1*f(n),故g=Θ(f)。 3)Ο(f+g)= Ο(max(f,g)),对于Ω和Θ同样成立。 证明:设F(n)= Ο(f+g),则存在c1>0,和n1,使得?n≥n1,有 F(n) ≤ c1 (f(n)+g(n)) = c1 f(n) + c1g(n) ≤ c1*max{f,g}+ c1*max{f,g} =2 c1*max{f,g} 所以,F(n)=Ο(max(f,g)),即Ο(f+g)= Ο(max(f,g)) 对于Ω和Θ同理证明可以成立。 4)log(n!)= Θ(nlogn)

证明: ?由于log(n!)=∑=n i i 1 log ≤∑=n i n 1 log =nlogn ,所以可得log(n!)= Ο(nlogn)。 ?由于对所有的偶数n 有, log(n!)= ∑=n i i 1 log ≥∑=n n i i 2 /log ≥∑=n n i n 2 /2/log ≥(n/2)log(n/2)=(nlogn)/2-n/2。 当n ≥4,(nlogn)/2-n/2≥(nlogn)/4,故可得?n ≥4,log(n!) ≥(nlogn)/4,即log(n!)= Ω(nlogn)。 综合以上两点可得log(n!)= Θ(nlogn) 2. 设计一个算法,求给定n 个元素的第二大元素,并给出算法在最坏情况下使用的比较次数。(复杂度至多为2n-3) 算法: V oid findsecond(ElemType A[]) { for (i=2; i<=n;i++) if (A[1]

算法设计与分析试题与答案

一、填空题(20分) 1.一个算法就是一个有穷规则的集合,其中之规则规定了解决某一特殊类型问题的一系列运算,此外,算法还应具有以下五个重要特性: 确定性,有穷性,可行性,0个或多个输入,一个或多个输出。 2.算法的复杂性有时间复杂性和空间复杂性之分,衡量一个算法好坏的标准是时间复杂度高低。 3.某一问题可用动态规划算法求解的显著特征是该问题具有最优子结构性质。 4.若序列X={B,C,A,D,B,C,D},Y={A,C,B,A,B,D,C,D},请给出序列X和Y的一个最长公共子序列{BABCD}或{CABCD}或{CADCD}。 5.用回溯法解问题时,应明确定义问题的解空间,问题的解空间至少应包含一个(最优)解。 6.动态规划算法的基本思想是将待求解问题分解成若干子问题,先求解子问题,然后从这些子问题的解得到原问题的解。 7.以深度优先方式系统搜索问题解的算法称为回溯法。 8.0-1背包问题的回溯算法所需的计算时间为o(n*2n) ,用动态规划算法所需的计算时间为o(min{nc,2n})。 9.动态规划算法的两个基本要素是最优子结构和重叠子问题。 10.二分搜索算法是利用动态规划法实现的算法。 二、综合题(50分) 1.写出设计动态规划算法的主要步骤。 ①问题具有最优子结构性质;

②构造最优值的递归关系表达式; ③最优值的算法描述; ④构造最优解; 2.流水作业调度问题的johnson算法的思想。 ②N1={i|ai=bi}; ②将N1中作业按ai的非减序排序得到N1’,将N2中作业按bi的非增序排序得到N2’; ③N1’中作业接N2’中作业就构成了满足Johnson法则的最优调度。 3.若n=4,在机器M1和M2上加工作业i所需的时间分别为ai和bi,且 (a1,a2,a3,a4)=(4,5,12,10),(b1,b2,b3,b4)=(8,2,15,9)求4个作业的最优调度方案,并计算最优值。 步骤为:N1={1,3},N2={2,4}; N1’={1,3}, N2’={4,2}; 最优值为:38 4.使用回溯法解0/1背包问题:n=3,C=9,V={6,10,3},W={3,4,4},其解空间有长度为3 的0-1向量组成,要求用一棵完全二叉树表示其解空间(从根出发,左1右0),并画出其解空间树,计算其最优值及最优解。 解空间为{(0,0,0),(0,1,0),(0,0,1),(1,0,0),(0,1,1),(1,0,1), (1,1,0),(1,1,1)}。 解空间树为:

算法设计技巧与分析 沙特 递归分治部分答案

算法:EX5_33 输入:已排序的数组A[1,…,n],整数x 输出:如果A中存在两个数,它们的和是x,则输出这两个数,若不存在,则输出none find(1,n) end EX5_33 过程:find(s,t) // 确定A[s,…,t]中是否存在两个数,它们的和是x,如果存在则输出这两个数,若不存在,则输出none if s=t then output none; else if sx then find(s,t-1); else A[s]+A[t] find(s+1,t); end if end if end find 6.6 EX6_6 输入: 输出: num=count(1,n,x); end EX6_6 过程count(low,high,x) // if high=low then if A[low]=x then return 1 else return 0 else mid=(low+high)/2 return count(low,mid)+count(mid+1,high) end if end count 递归出口high

EX6_51 输入: 输出: h=high(R) return h end EX6_51 过程high(T) // if T为空then return -1 else left=high(T->left); right=high(T->right); return 1+max{left,right} end if end high 递归出口T->left == null and T->right==null then return 0 ? 全局变量? 6.52 算法SECONDV ALUE 输入:正整数n和存储n个元素的数组a[1..n] 输出:数组a的第二大元素 (x1,x2)=secondvalue(1,n,a); return x2; end SECONDV ALUE 过程secondvalue(low,high,a) //返回数对(x1,x2)其中x1>=x2 if high-low=0 then return (a[low],-∞); //这个地方有修改else if high-low=1 then if a[high]>=a[low] then return (a[high],a[low]); else return (a[low],a[high]); end if end if end if mid=(low+high)/2; (x1,x2)=secondvalue(low,mid,a); (y1,y2)=secondvalue(mid+1,high,a);

相关文档
最新文档