您的位置:首页 > 其它

算法导论第三版习题8.2

2016-03-02 14:55 197 查看

8.2-1

(a)首先通过第4到第5行,数组C={2,2,2,2,1,0,2}C=\{2,2,2,2,1,0,2\},然后经过第7行到第8行,数组C={2,4,6,8,9,9,11}C=\{2,4,6,8,9,9,11\}。

(b) 然后根据第10行到第12行,我们有首先B[C[A[11]]]=B[6]=2B[C[A[11]]]=B[6]=2,此时C={2,2,2,2,8,9,9,10}C=\{2,2,2,2,8,9,9,10\}。然后经过循环可以分别得到B[8]=3B[8]=3,B[3]=1B[3]=1,B[4]=1B[4]=1,B[11]=6B[11]=6,B[2]=0B[2]=0,B[9]=4B[9]=4,B[7]=3B[7]=3,B[5]=2B[5]=2,B[1]=0B[1]=0,B[10]=6B[10]=6。所以B={0,0,1,1,2,2,3,3,4,6,6}B=\{0,0,1,1,2,2,3,3,4,6,6\}。

8.2-2

因为再给数组BB填充数据时,我们是从数组AA的最后一位开始往前循环的,而且每次给数组BB中填充一个数据都会将该数在数组CC中的计数减一,所以数组AA中,该数之前如果还有与他相等的数,将被填充在数组BB中该数的前一位,从而保证了具有相同值的元素在输出数组中的相对次序与他们在输入数组中的相对次序相同,即是稳定的。

8.2-3

该算法仍然是正确的,但此时它将不再是稳定的了。因为此时将从数组AA的开始往后遍历,具有相同值得元素靠前的将被首先放在数组BB的相对靠后的位置,从而破坏了稳定性。

8.2-4

ALGORITHM(A,k)
1 let C[0..b-a] be a new array
2 for i = 0 to k
3   C[i] = 0
4 for j = 1 to A.length
5   if x = A[j] - a <= b - a and x >= 0
6     C[x] = C[x] + 1
7 for i = 1 to k
8   C[i] = C[i] + C[i - 1]
9 return C[b-a]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: