小池有话说

算法导论答案

2015-10-22

2.3-1

|     3  9  26  38  41  49  52  57    |
|    3 26 41 52    |    9  38 49 57   |
|  3 41  |  26 52  |  38 57  |  9  49 |
| 3 | 41 | 52 | 26 | 38 | 57 | 9 | 49 |

2.3-2

MERGE(A, p, q, r)
1  n_1 = q - p + 1
2  n_2 = r - q
3  let L[1.. $n_1$ ] and R[1..$n_2$] be new arrays
4  for i = 1 to n_1
5      L[i] = A[p + i - 1]
6  for j = 1 to n_2
7      R[j] = A[q + j]
8  i = 1
9  j = 1
10 for k = p to r
11     if i > n_1
12         A[k] = R[j]
13         j = j + 1
14     elseif j > n_2
15         A[k] = L[i]
16         i = i + 1
17     elseif L[i] <= R[j]
18         A[k] = L[i]
19         i = i + 1
20     else
21         A[k] = R[j]
22         j = j + 1

2.3-3

T(n)可被写成

      n
    /   \
   /     \
T(n/2) T(n/2)

同理,T(n/2) 可被写成

     n/2
   /     \
  /       \
T(n/4)  T(n/4)

写成树的形式,最后一层都是2。那么最后一行有多少个2呢?

第一层有1个n,第二层有2个n/2,设最后一层有x个2,则2=n/x,因此x=n/2

每层的数字之和都是n。

一共有多少层呢?

我们看看每层数字的分母,第一层是$1=2^0$,第二层是$2=2^1$,第三层是$4=2^2$,……而最后一层是的分母是n/2。由于 $n=2^{\lg n}$ 所以 $n/2=2^{\lg n-1}$ ,从 0到 $\lg n-1$ ,一共 $\lg n$ 层,因此 $T(n)=n \lg n$