Introduction to algorithms (3rd editon)
第四章部分解答 by zevolo
4.3-1
Show that the solution of T(n) = T(n-1) + n is O(n^2).proof:
assume T(m) <= c * m^2 ( m < n)
T(n) = T(n-1) + n <= c (n-1)^2 + n = c (n^2 - 2n + 1) + n
= cn^2 - 2cn + c + n
= cn^2 + (1 - 2c)n + c
<= cn^2 (when c > 1 && c < 2 && n > 1)
so modify the assumption to T(m) <= c m^2 (1 < m < 2)
for n = 1
T(n) = T(1) = 1
c n^2 = c (1)^2 = c
satisfy the T(1) <= c (1)^2
so the assumption is correct
4.3-2
show that the solution of T(n) = T(ceiling(n/2)) + 1 is O(lgn)
proof:
assume that T(m) <= c * lg(m) (m < n), k = ceiling(n/2)
T(n) <= c * k + 1
<= c * lg((n+1)/2) + 1
= c * lg(n+1) - c + 1
= c * lg(n) + c * lg((n+1)/n) - c + 1
<= c * lg(n) + c * lg((2+1)/2) - c + 1 (when n > 1)
= c * lg(n) + c * lg(3) - 2c + 1 (when n > 1)
<= c * lg(n) (when n > 1 && c >= (1/lg(4/3)) )
note: c * lg(3) - 2c + 1 <=0 ==> c >= (1/lg(4/3))
the boundary n = 1:
T(n) = 1
c * lg(1) = 0
not correct
change the boundary to n = 2 and n = 3:
T(2) = 2T(1) + 1 = 3
C * lg(2) = c
T(3) = 2T(2) + 1 = 7
c * lg(3) = clg3
so require c >= 3 && c >= 7 / lg(3)
so the assumption is correct
T(n) <= c * lg(n) (n >= 2 && c >= max(3, 7/lg(3), 1/lg(4/3)) = 1/lg(4/3))
4.3-3。。。。這個據說有錯誤,沒有改正
We saw that the solution of T(n) = 2T(floor(n/2)) + n is W(nlgn)
proof:
assume T(m) >= cmlgm (m < n), k = floor(n/2)
so T(n) >= 2cklgk + n
= 2cnlgn + 2cklgk - 2cnlgn + n
<= 2cnlgn + 2c(n-1)lgk - 2cnlgn + n
<= 2cnlgn + 2c(n-1)lg((n-1)/2) - 2cnlgn + n
= 2cnlgn + 2c(n-1)lg(n-1) - 2cnlgn - 2c(n-1) + n
= 2cnlgn + 2cnlg(n-1) - 2clg(n-1) - 2cnlgn - 2c(n-1) + n
= 2cnlgn + 2cnlg((n-1)/n) - 2clg(n-1) - 2c(n-1) + n
<= 2cnlgn + 0 - 2clg(n-1) - 2c(n-1) + n
<= 2cnlgn + 0 - 0 - 2c(n-1) + n
<= 2cnlgn (when c >= 1/2 * (n/(n-1) && n != 1 ==> n > 1 && c > 1)
boundary:
T(1)= 1
1lg1 = 0
so assumption is correct
4.3-4
proof:
assume T(m) <= mlgm + b (b >= 1)
boundary:
T(1) = 1
1lg1 + b = b
prove T(n)
T(n) <= 2cklgk +2b + n (k = floor(n/2))
<= 2c(n/2)lg(n/2) + 2b + n
= cnlgn - cn + 2b + n
>= cnlgn (c >= 2b/n + 1 && b >= 1)
so assumption is correct
4.3-7
assumption: T(m) <= cm^(lg_3(4)) - bn
proof:
T(n) = 4T(n/3) + n
<= 4(c(n/3)^(lg_3(4)) - bn) + n
= 4c(n^lg_3(4)) / 3^(lg_3(4)) - 4bn + n
= c(n^lg_3(4)) - 4bn + n
<= c(n^lg_3(4)) (when b > 1/4)
boundary:
T(1) = 1
c (1^lg_3(4)) = c
so
assumption: T(n) <= cn^(lg_3(4)) - bn is correct for b > 1/4 and c >= 1
4.3-8
the problem should be T(n) = 4T(n/2) + n
origin is T(n) = 4T(n/2) + n^2
4.3-9
T(n) = 3T(n^(1/2)) + lgn
==>T(2^m) = 3T(2^(m/2)) + m m = lgn
==>S(m) = 3S(m/2) + m S(m) = T(2^m)
so S(m) = theta(m^(lg3))
==>T(n) = S(2^m) = theta ( (2^m) ^ (lg3))
= theta ( 2^(mlg3))
= theta ( 2^(lg (3^m)) )
= theta ( 3^m )
= theta (3^(lgn))
4.4-4
T(n) = 2^n
4.4-5
T(n) = T(n-1) + T(n/2) + n
expand T(n):
level 1 --> n
level 2 --> 3/2 * n - 1
level 3 --> 9/4 * n - 3 - 1/2
level 4 --> 27/8 * n - 9 - 1/4
....
assume T(n) = O(n(3/2)^n)
proof:
assume T(m) <= c(m(3/2)^m) when m < n
T(n) = T(n-1) + T(n/2) + n
<= c(n-1)(3/2)^(n-1) + 1/2*cn(3/2)^(n/2) + n
= cn(3/2)^n -cn(3/2)^n + above
= cn(3/2)^n -cn(3/2)^n + cn(3/2)^(n-1) - c(3/2)^(n-1) + 1/2*cn(3/2)^(n/2) + n
= cn(3/2)^n + 1/2 *cn ( (3/2)^(n/2) - (3/2)^(n-1) ) + (n - c (3/2)^(n-1))
<= cn(3/2)^n + 0 + (n - c (3/2)^(n-1)) (when n >= 2)
<= cn(3/2)^n + 0 + 0 (when n >=2 && c >=1 (maybe c can be more little))
<= cn(3/2)^n
boundary:
T(1) = 1
c(1(3/2)^1) = 3/2 *c
so T(n) = O(n(3/2)^n)
4.4-8
T(n) = theta(n^2) (not prove)
4.4-9
if a=1/2, we know the result is theta(nlgn)
and if a = 1/3, the result is same
so we assume that result is theta(nlgn)
4.5-2
a < 49
4.5-4
guess T(n) = O(n^2 (lgn) ^ 2) (not prove)
4-3
e T(n) = 2T(n/2) + n/lgn
==> T(n) = theta(nlglgn)
because: expand recurrence tree
T(n) = n/(lgn - 1) + n/(lgn -2) + .... + n/(lgn -(lgn -1) + lgn * theta(1)
= n (1/1 + 1/2 + 1/3 + ... + 1/lgn)
= theta(nlglgn)
g T(n) = T(n-1) + 1/n
==> T(n) = theta(lgn)
h T(n) = T(n-1) + lgn
==> T(n) = theta(nlgn)