算法设计技巧与分析答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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次比较

1.5

(a) 算法MODSELECTIONSORT执行的元素赋值的最少

次数是0,元素已按非降序排列的时候达到最小值。

(b) 算法MODSELECTIONSORT执行的元素赋值的最多

次数是3n(F),元素已按非升序排列的时候达到最小值。

1.7

1次

由上图可以看到执行的比较次数为1+1+2+2+2+6+2=16次1.1

1

由上图可以得出比较次数为5+6+6+9=26次

1.13

FTF,TTT,FTF,TFF,FTF 1.16

⑻ 执行该算法,元素比较的最少次数是 n-1。元素已按非 降

序排列时候达到最小值。

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

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

降序排列时候达到最小值。

(d) 执行该算法,元素赋值的最多次数是 空严。元素已

按非升序排列时候达到最大值。

(e) n 用o 符号和「符号表示算法 BUBBLESORT 的运行时 间:t =O(n 2), t"(n)

(f) 不可以用0符号来表示算法的运行时间:

0是用来表示

算法的精确阶的,而本算法运行时间由线性到平方排列, 因此不能用这一符号表示。 1.27

不能用「关系来比较n 2和100n 2增长的阶

2 .. n lim 2

n ::

100n 2

n 2不是

o(100n 2)的,即不能用•关系来比较n 2和100n 2增长 的阶。

1.32

1 100

=0

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

^2k , j =2kJ 时,

n

n

、k _、[log n ]二 n log n

i 4

i 4

(b) 由⑻可以得到:当每一次循环j 都为2的幕时,第六步 执行的次数最大,

n n m — [log(3k -1)H nlog( n-1)

i 4

i 4

(c)用0符号表示的算法的时间复杂性是 O(nlog n) 已证明n=2k

情况,下面证明 n=2k

+1的情况:

所以n=2k

n log n 。

(d)用门符号表示的算法的时间复杂性是 门(n)。

当n 满足j =n/2取整为奇数时,算法执行的次数是 n 次,其

他情况算法执行次数均大于

n

(e) O 更适合表示算法的时间复杂性。因为本算法时间复 杂性从门(n)到O(nlog n),而心是表示精确阶的。 1.38

对n 个数进行排序。

因为有则当

3k

=2m

k

(其中占取整)时,

第5章归纳法5.3 (本题不仅有以下一个答案)

1. max( n)

过程:max(i)

if n=1 retur n a[1]

t=max(i-1)

if a[i-1]>t return a[i-1]

else retur n t

end if

5.6

最多次数:

C(n) = 0,n

[c(n —1) + (n— 1),n

n

C(n)八j

j

1

最少次数:

C( n)二n-1 5.7n(n 1) 2

C(n)

0,n =1

C(n _ 1)+1,n M2

参考例5.1

5.14

(a)不稳定,例如:

可见SELECTIONSORT中相等元素的序在排序后改变。

(b)(c)(d)(f)稳定

5.17

(a)利用R(x)二xP n」(x) a o

取x =3,

P5(3) > 巳(3) > 巳(3) > 巳(3) > R(3) > P°(3)

P2(3) =3* R(3) 4 P(3) =3* P°(3) 2 =11 P°(3) =3

:

P3(3) =3* F2(3) 1 =112 > F4(3) =3* P3(3) - 2 =338 > F5(3) =3* F4(3) 5=1019

5.18

(a) p(2,5)p (2,2p (2p1)

2 2 2 y=4 *2 :—y=2 =4:—y=1 *2 :—y=1

第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]

7. end for

8. for i=mid+1 to high

9. 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.

相关文档
最新文档