1、算法设计技巧与分析参考答案第1章 算法分析基本概念1.1(a)6 (b)5 (c)6 (d)6 1.4算法执行了7+6+5+4+3+2+1=28次比较453324451212241245454545454545333333333333332424242424244545454545451212121212121212121212242424241212121212121224242445241212121.5(a)算法MODSELECTIONSORT执行的元素赋值的最少次数是0,元素已按非降序排列的时候达到最小值。(b) 算法MODSELECTIONSORT执行的元素赋值的最多次数是,元素已按
2、非升序排列的时候达到最小值。1.7431256729344444333334121212121212555556667724321次9761次2次2次6次2次2次由上图可以看到执行的比较次数为1+1+2+2+2+6+2=16次。1.111924751917131211815458111317219134811151271571217521119517248137151221719513114815127比较均为1次,共5次比较为3次,2次,1次比较为6次比较9次由上图可以得出比较次数为5+6+6+9=26次。1.13FTF,TTT,FTF,TFF,FTF1.16(a) 执行该算法,元素比较的最
3、少次数是n-1。元素已按非降序排列时候达到最小值。(b) 执行该算法,元素比较的最多次数是。元素已按非升序排列时候达到最大值。(c) 执行该算法,元素赋值的最少次数是0。元素已按非降序排列时候达到最小值。(d) 执行该算法,元素赋值的最多次数是。元素已按非升序排列时候达到最大值。(e)用O符号和符号表示算法BUBBLESORT的运行时间:,(f)不可以用符号来表示算法的运行时间:是用来表示算法的精确阶的,而本算法运行时间由线性到平方排列,因此不能用这一符号表示。1.27不能用关系来比较和增长的阶。不是的,即不能用关系来比较和增长的阶。1.32(a)当n为2的幂时,第六步执行的最大次数是:时,(
4、b)由(a)可以得到:当每一次循环j都为2的幂时,第六步执行的次数最大,则当(其中取整)时,(c)用符号表示的算法的时间复杂性是已证明n=2k的情况,下面证明n=2k+1的情况:因为有所以n=2k+1时,第六步执行的最大次数仍是n log n。(d) 用符号表示的算法的时间复杂性是。当满足取整为奇数时,算法执行的次数是次,其他情况算法执行次数均大于。(e) O更适合表示算法的时间复杂性。因为本算法时间复杂性从到,而是表示精确阶的。1.38对个数进行排序。第5章 归纳法5.3(本题不仅有以下一个答案)1.max(n) 过程:max(i)if n=1 return a1t=max(i-1)if a
5、i-1t return ai-1else return t end if 5.6最多次数:最少次数:C(n)=n-15.7参考例5.15.14(a)不稳定,例如:12454524124545244545241245452412可见SELECTIONSORT中相等元素的序在排序后改变。(b)(c)(d)(f)稳定5.17(a)利用取,5.18(a) 第6章 分 治6.3输入:A1,2,n输出:max,min1.for i=1 to mid2. j=high-i 3. if aiaj, then exchange ai,aj4.end for5.for i=low to mid6. if ai+1
6、ahigh, then exchange ahigh,ai+110.end for6.5输入:一个整数数组A1,2,n输出:sum1.if high-low=1 then2. sum=alow+ahigh3.else4. mid=(low+high)/25 sum1=sum(low,mid)6 sum2=sum(mid+1,high)7. sum=sum1+sum28.end if9.return sum算法需要的工作空间为36.10.32151415111725513214151525111415151725325114151532111751112517513215153214151415
7、111711172551255132321515141415151111171725255151122519171537184532512212151817514532252219371225191732511537184522122517193251184522153712251719513218452237151212252517191951513245451818223715121725195132453718152212172519513222184537151225195145186.31271331184516175327531331184516172753133118451617
8、53272713183145161753131831451617532731131816453117534527131718161753131816274531彩色代表i,j所指的数字j总在i前6.36233227184511631219162552141418111219162332452725526314181112191612111418191612111112181618191619111116161919324527255263632527324552252725272727455263455263526352636363111214161819232527325263456.42Q
9、uicksort不是稳定的。6.43bcefg均为适应的,a、h不是适应的。第7章 动态规划7.1(c),算法BOTTOMUPSORT7.5字符串A=”xzyzzyx”和B=”zxyyzxz”的最长公共子序列长度为4,共有6个最长公共子序列,分别是:zyyx zyzz zyzx xyyx xyzz xyzx7.9C1,5=C1,1+C2,5+r1*r2*r6=307C1,5=C1,2+C3,5+r1*r3*r6=252C1,5=C1,3+C4,5+r1*r4*r6=372C1,5=C1,4+C5,5+r1*r5*r6=260所以最优括号表达式为(M1M2)(M3M4)M5)7.157.2101
10、234567891011000000000000010033333333332003447777777300344778991212400344778101112147.23当物品体积为负值时,运行算法会发生溢出错误。第八章贪心算法18.12ats23由算法从s到t要选择先到a然后到t,其结果为4,而从s到t距离为2,所以探索不总是产生从s到t的距离8.13132654912121513454313265491215134543132654912151345431326549121513454313265491215134543132654912151345434999204884161328816131212121212281348.23(共有4棵最小生成树,此处仅举一例)1234561234561234561234561234568.24(共有4棵最小生成树,此处仅举一例)6543216543216543211234561234561234561234568.31538d35212cbafe22101697每一个二叉树都取左边为0,右边为1则最优编码为a:10 b:001 c:0001 d:0000 e:01 f:11注意:编码不唯一回溯法