算法导论第八章习题答案(第三版) Introduction to Algorithm

Exercises

8.1-1

最小深度为n,下一次需比较的元素比当前最大元素大即可。

8.1-2

将其拆为两项的和即可。

\[\lg n! = \sum\limits_{k = 1}^n {\lg k} = \sum\limits_{k = 1}^{n/2} {\lg k} + \sum\limits_{k = n/2 + 1}^n {\lg k} \le \sum\limits_{k = 1}^{n/2} {\lg \frac{n}{2}} + \sum\limits_{k = n/2 + 1}^n {{\mathop{\rm lgn}\nolimits} } = \frac{n}{2}\lg \frac{n}{2} + n\lg n = O(n\lg n)\]

\[\lg n! = \sum\limits_{k = 1}^n {\lg k} = \sum\limits_{k = 1}^{n/2} {\lg k} + \sum\limits_{k = n/2 + 1}^n {\lg k} \ge \frac{n}{2}\lg 2 + \frac{n}{2}\lg \frac{n}{2} = \Omega (n\lg n)\]

所以上式可证。

 8.1-3

只需要计算的是是否有这么多的叶结点使得树高为Θ(n)即可。

经计算可知1/2和1/n均不可以(至于1/2n,不会算,还望大家告之)。

8.1-4

书上提示简单的将每个子序列的下界进行合并是不合理的,那是因为独立解决每个子序列不一定是最优的。

高为h的决策树至少有2h个叶结点,所以\({2^h} \ge k{!^{\frac{n}{k}}}\)。

所以可以求解。

8.2-1.略。

8.2-2

前面的循环中,当有重复元素的时候,存入数组是从前往后存入的,最后是从后向前循环,元素插入的顺序就变为从后向前插入的,后插入的位置自然放后,所以正好是稳定的。

8.2-3

不稳定

8.2-4

C数组中最终存放的是小于等于c的元素个数,所以只要求出C[b]-C[a-1]的值即可。

8.3-1.略。

8.3-2

插入排序和归并排序是稳定的,快速排序和堆排序是不稳定的。为每个元素从[大到小增加一个编号,当两个元素相等的时候就比较编号。带来的额外空间花费是O(n)。

8.3-3

在证明排序第d位有两个相等元素并不改变d-1位已经排好元素的顺序的时候。

8.3-4

把这n个数看成n进制的数,那么只需要3位即可对0到n3-1的数进行排序。很显然基数排序,时间复杂度是O(n)。

8.3-5

排序第i位十进制数需要10i-1遍,所以等比数列求和可得最坏情况学(10d-1)/9遍,在最坏情况下工序10d个堆。

8.4-1.略。

8.4-2

如果所有元素都不幸的被放在同一个桶中,那么对n个元素进行插入排序,就是最坏运行时间Θ(n2)。对每一桶内的排序选用最坏运行时间为Θ(nlgn)的排序算法。

8.4-3

根据概率论相关知识,可以很简单的算出:E[X2]=3/2,E2[X]=1。

8.4-4

明显类似桶排序,数据服从均匀分布,分成n个桶,每个桶半径的差值为1/n。

8.4-5

Thinking Problems

8-1

a.n个互异的输入元素共有n!中输入,所以到达每个叶子节点的概率为1/n!,没有其他的情况,所以概率为0。

b.画出决策树就很显然可以看出了。

c.

 

 

8-2

a.计数排序。

b.快速排序。

c.插入排序。

d.a可以,b不可以,因为是不稳定的,c不可以,因为最坏运行情况是Θ(n2)。

e.将书中计数排序最后一步的改为i从1到A.length的循环,这样,每次都把等于i的元素依次放入A中,直到c[i]=0,再继续外层循环。

但是这个算法却不是稳定的。

8-3

a.先用计数排序对数字的位数进行排序需O(n),再用计数排序分别对每个位数的桶进行排序也是O(n)。

b.递归调用计数排序。

8-4

a.最简单的穷举算法,一个一个一一比较即可。

b.

c.从红色水壶中随机选择一个,以这个红色水壶为主元,对蓝色水壶进行划分,此时可以找到一个与其相等水量的蓝色水壶,再用这个蓝色水壶对红色水壶进行划分,之后递归调用这些步骤,有点类似于快速排序。

8-5

a.就代表这个数组是排序的。

b.略。

c.因为数组A是k排序的,那么将原式展开化简即可得到A[i]≤A[i+k]。

d.分别对1,1+k,1+2k,1+3k......;2,2+k,2+2k,k,k+k,k+2k...排序,每段有n/k个元素,共有k段,所以利用归并排序可以在O(nlg(n/k))时间内对其排序。

e.共有k段,每一段有n/k个元素,对其进行堆排序。如6.5-9中,所以可在O(nlgk)时间内完成。

f.比较排序的下界是nlgn,所以共有k段元素,每段n/k个元素,所以需Ω(nlgn/k)的时间复杂度。

8-6

a.(2n)!/(n!)2

后面不会证明,希望网友们告知正确答案

8-7

列排序,0-1引理甚是高明,但真心不会证明。

 (若有错误和不足,欢迎大家积极指正!)

 

 

 

 

 

 

posted @ 2013-11-03 21:42  小牛啊  阅读(2038)  评论(1编辑  收藏  举报