当前位置:文档之家› 算法设计课程习题答案

算法设计课程习题答案

算法设计课程习题答案第一章1-1什么是算法?它与计算过程和程序有什么区别?算法是指求解一个问题所需要的具体步骤和方法。

它是指令的有限序列。

算法有一系列明确定义的基本指令序列所描述的,求解特定问题的过程,它能够对合法的输入,在有限时间内产生所要求的输出,取消有穷性限制则是计算过程;而程序是算法的描述。

1-11使用归纳法证明汉诺塔函数的正确性。

用数学归纳法证明汉诺塔函数对任何n (即n 可以是任何正整数)有解。

(1)当盘子数n =1时,只需直接将此盘从A 柱搬到C 柱即可。

(2)现假设n =k 时有解,即可以将k 个盘子(在不违反规则的情况下)从一个源柱,通过一个中间柱移到目的柱上。

(3)现在证明n =k +1时也有解。

开始时A 柱上的k +1个盘子可以看成由k 个盘和最底下的一个最大盘组成。

根据归纳假设这k 个盘可以(在不违反规则的情况下)通过C 柱移到B 柱上(在这k 个盘的移动过程中,最大盘可以看成不存在)。

完成这一大步后,只要将A 柱上的最大盘直接搬到C 柱上。

再根据归纳假设B 柱上的这k 个盘可以(在不违反规则的情况下)通过A 柱移到C 柱上。

至此证明结束。

第二章2-8确定下列各程序段的程序步,确定划线语句的执行次数,计算它们的渐近时间复杂度。

(1)程序步为n log 1+画线语句的执行次数为log n ⎡⎤⎢⎥。

(log )n O 。

划线语句的执行次数应该理解为一个整体。

(2)画线语句的执行次数为111(1)(2)16jn i i j k n n n ===++=∑∑∑。

3()n O 。

(3)画线语句的执行次数为。

O 。

(4)当n 为奇数时画线语句的执行次数为(1)(3)4n n ++, 当n 为偶数时画线语句的执行次数为 2(2)4n +。

2()n O 。

2-11设有)(f n 和)(n g 如下所示,分析)(f n 为))((n g O 、))((n g Ω还是))((n g Θ。

(1) 当3n ≥时,3log log n n n <<,所以()20log 21f n n n n =+<,3()log 2g n n n n =+>。

可选 212c =,03n =。

对于0n n ≥,()()f n cg n ≤,即()(())f n g n =O 。

注意:是f (n )和g (n )的关系。

(2) 当4n ≥ 时,2log log n n n <<,所以22()/log f n n n n =<,22()log g n n n n =≥。

可选 1c =,04n =。

对于 0n n ≥,2()()f n n cg n <≤,即 ()(())f n g n =O 。

(3)因为 log log(log )()(log )nn f n n n ==,()/log log 2n g n n n n ==。

当 4n ≥ 时,log(log )()n f n n n =≥,()log 2n g n n n =<。

所以,可选 1c =,04n =,对于0n n ≥,()()f n cg n ≥,即 ()(())f n g n =Ω。

(4)因为n n f =)(,n n g 5log )(=。

当0n >时,n )(<=n n f ,55n log )(<=n n g ,所以,可选1c =,1n 0=,对于0n n ≥,()()f n cg n ≤,即()(())f n g n =O 。

(5)因为n n n 2)(f =,n 3(=)n g 。

当n>0时,)(32)(f 31-n n g n n n n =<⋅=≤,所以取1,3/1c 21==c , 1n 0=,对于0n n ≥,)()()(21n g c n f n g c ≤≤,即))(()(n g n f Θ=。

第四章4-10识别图4-15的图的关节点,画出它们的双连通分图。

图G1的关节点3、7、1,图G2关节点没有关节点。

它们的双连通图如下。

0-1-3 2-3-4 3-7 7-6-5 第五章5-11对两组数据(1,1,1,1,1)和(5,5,8,3,4,3,2)执行程序5-12的快速排序,按照 表图G1图G2图G1图G2第六章 11.由题可得:012345601234561051576183,,,,,,,,,,,,2357141p p p p p p p w w w w w w w ⎛⎫⎛⎫=⎪ ⎪⎝⎭⎝⎭, 所以,最优解为()01234562,,,,,,,1,,1,0,1,1,13x x x x x x x ⎛⎫= ⎪⎝⎭,最大收益为211051561835533+⨯++++=。

3.设有带时限的作业排序n=7,(p0,p1,…p6)=(3,5,20,18,1,6,30);(d0,d1,…d6)=(1,3,4,3,2,1,2)以此实例为输入的最优解和最大收益。

按收益大小递减排序:p6,p2,p3,p5,p1,p0,p4=(30,20,18,6,5,3,1) 最优解: (0,0,1,1,0,1,1) 由作业2,3,5,6产生 最大收益:74 8.第七章7-1. Bcost(1,0)=0;Bcost(2,1)=c(1,1)+Bcost(1.0)=5 Bcost(2,2)=c(1,2)+Bcost(1,0)=2Bcost(3,3)=min{c(2,3)+Bcost(2,2),c(1,3)+Bcost(2,1)}=min{6+2,3+5}=8 Bcost(3,4)=c(2,4)+Bcost(2,2)=5+2=7Bcost(3,5)=min{c(1,5)+Bcost(2,1),c(2,5)+Bcost(2,2)}=min{3+5,8+2}=8Bcost(4,6)=min{c(3,6)+Bcost(3,3),c(4,6)+Bcost(3,4),c(5,6)+Bcost(3,5)}=min{1+8,6+7,6+8}=9 Bcost(4,7)=min{c(3,7)+Bcost(3,3),c(4,7)+Bcost(3,4),c(5,7)+Bcost(3,5)}=min{4+8,2+7,6+8}=9 Bcost(5,8)=min{c(6,8)+Bcost(4,6),c(7,8)+Bcost(4,7)}=min{7+9,3+9}=127-9. char A[8]={‘0’,’x ’,’z ’,’y ’,’z ’,’z ’,’y ’,’x ’ } B[8]={‘0’,’z ’,’x ’,’y ’,’y ’,’z ’,’x ’,’z ’}⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡4433221043332110433221103332211022222110222111101111110000000000⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡2122212022211220121222101312221022211220131222103133312000000000(a) c[i][j] (b )s[i][j]所以,最长公共字串为 (x,y,z,z)。

7-15)}0,0{(1=-S , )}2,10{(01=S ,)}2,10(),0,0{(0=S , )}7,25(),5,15{(11=S ,)}7,25(),5,15(),2,10(),0,0{(1=S , )}15,31(),13,21(),10,16(),8,6{(21=S , )}15,31(),13,21(),10,16(),8,6(),0,0{(2=S)}16,40(),14,30(),11,25(),9,15(),1,9{(31=S , )}15,31(),14,30(),13,21(),10,16(),9,15(),8,6(),0,0{(3=S8-1.状态空间:描述问题的各种可能的情况,一种情况对呀状态空间的一个状态。

显示约束:用于规定每个xi 取值的约束条件称为显示约束隐式约束:用于判定一个候选解是否为可行解的条件问题状态:在状态空间树中的每个节点称为一个问题状态解状态:如果从根到树中某个状态的路径代表一个作为候选解的元组,则该状态为解状态答案状态:如果从根到树中某个状态的路径代表一个作为可行解的元组,则该状态为解状态。

活结点:回溯法从开始结点出发,以深度优先的方式搜索整个解空间,这个开始结点就成为一个活结点。

未检测的结点称为活结点扩展结点:算法从x出发,访问x的摸个后继结点y,则x被称为扩展结点约束函数:一个约束函数是关于部分向量的函数Bk(x0,x1.....xk),它被定义为:如果可以判定Y的子树上不含任何答案状态,则Bk(x0,x1.....xk)为false,否则为true.剪枝函数:约束函数和限界函数的目的相同,都是为了剪去不必要搜索的子树,减少问题求解所需实际生成的状态节点数,他们统称为剪枝函数8-7尽管输入差异很大,但当n很大时对于某些输入而言,回溯法仍然可以在短时间内求解。

(1)为最好情况,计算时间为n;(2)为无序情形;(3)为最坏情形,计算时间为n∙2n。

相关主题