算法设计技巧与分析答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
算法设计技巧与分析参考答案第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