算法导论 4.1 Exercises 答案

4.1-1

n=2lgn。那么不难发现,有 12<nn1 成立。

为矩阵 A,B 0 n 的大小,那么可以得到新矩阵 A,B。也就是说,对于矩阵 A 中的新元素 aij,有:

ai,j={ai,jifinjn0ifi>nj>n

矩阵 B 同理。

递推式仍然为 T(n)=8T(n/2)+Θ(1)

由于传统算法 MATRIX-MULTIPLY-RECURSIVE 的时间复杂度是 T(n)=Θ(n3),因此 c1,c2,n0R+,nn0,0c1n3f(n)c2n3。回代 n,得到 0c18n3f(n)c2n3。因此 T(n)=Θ(n3)

4.1-2

使用这个程序作为子程序计算 kn×n n×kn 大小的矩阵相乘需要花费 Θ(k2n3) 的时间。如果是 n×kn kn×n 大小的矩阵相乘,则需要花费 Θ(kn3) 的时间。

4.1-3

由于涉及到矩阵的复制操作,因此每次调用都会有 Θ(n2) 的操作时间。

因此运行时间的递推式就写成 T(n)=8T(n/2)+Θ(n2)

根据主定理,a=8,b=2,logba=3.

因此根据第一个条件,T(n)=Θ(n3)

4.1-4

1
2
3
4
5
6
7
8
9
10
11
12
MATRIX-ADD-RECURSIVE(A, B, C, n)
if n == 1
// Base case.
c11 = c11 + a11 + b11
return
// Divide.
partition A, B, and C into n/2 × n/2 submatrices A11, A12, A21, A22; B11, B12, B21, B22; and C11, C12, C21, C22; respectively
// Conquer.
MATRIX-ADD-RECURSIVE(A11, B11, C11, n/2)
MATRIX-ADD-RECURSIVE(A12, B12, C12, n/2)
MATRIX-ADD-RECURSIVE(A21, B21, C21, n/2)
MATRIX-ADD-RECURSIVE(A22, B22, C22, n/2)

如果使用的方法是直接基于索引的计算,那么运行时间的递推式就写成 T(n)=4T(n/2)+Θ(1)

根据主定理,a=4,b=2,logba=2.

因此根据第一个条件,T(n)=Θ(n2)

如果使用的方法是直接基于索引的计算,那么运行时间的递推式就写成 T(n)=4T(n/2)+Θ(n2)

因此根据第二个条件,得到 k=0,最终 T(n)=Θ(n2lg1n)=Θ(n2lgn)