算法导论 — 思考题4-1 递归式例子

递归式例子)对下列每个递归式,给出 T ( n ) T(n) T(n)的渐近上界和下界。假定 n ≤ 2 n ≤ 2 n2 T ( n ) T(n) T(n)是常数。给出尽量紧确的界,并验证其正确性。
  a. T ( n ) = 2 T ( n / 2 ) + n 4 T(n)=2T(n/2)+n^4 T(n)=2T(n/2)+n4
  b. T ( n ) = T ( 7 n / 10 ) + n T(n)=T(7n/10)+n T(n)=T(7n/10)+n
  c. T ( n ) = 16 T ( n / 4 ) + n 2 T(n)=16T(n/4)+n^2 T(n)=16T(n/4)+n2
  d. T ( n ) = 7 T ( n / 3 ) + n 2 T(n)=7T(n/3)+n^2 T(n)=7T(n/3)+n2
  e. T ( n ) = 7 T ( n / 2 ) + n 2 T(n)=7T(n/2)+n^2 T(n)=7T(n/2)+n2
  f. T ( n ) = 2 T ( n / 4 ) + n T(n)=2T(n/4)+\sqrt{n} T(n)=2T(n/4)+n
  g. T ( n ) = T ( n − 2 ) + n 2 T(n)=T(n-2)+n^2 T(n)=T(n2)+n2
  
  
  a.
  应用主定理,根据递归式有 a = 2 , b = 2 , f ( n ) = n 4 a = 2, b = 2,f(n) = n^4 a=2,b=2f(n)=n4,所以有 n l o g b a = n l o g 2 2 = n n^{{\rm log}_b a}=n^{{\rm log}_22}=n nlogba=nlog22=n。于是有 f ( n ) = n 4 = Ω ( n 1 + ε ) = Ω ( n l o g b a + ε ) f(n)=n^4=Ω(n^{1+ε})=Ω(n^{{\rm log}_ba+ε}) f(n)=n4=Ω(n1+ε)=Ω(nlogba+ε),其中 ε = 3 ε = 3 ε=3。并且当 1 / 8 ≤ c < 1 1/8 ≤ c < 1 1/8c<1时,有 a f ( n / b ) = 2 f ( n / 2 ) = 2 • ( n / 2 ) 4 = n 4 / 8 ≤ c f ( n ) = c n 4 af(n/b) = 2f(n/2) = 2•(n/2)^4 = n^4/8 ≤ cf(n) = cn^4 af(n/b)=2f(n/2)=2(n/2)4=n4/8cf(n)=cn4。因此,可以应用主定理情况3,于是 T ( n ) = Θ ( f ( n ) ) = Θ ( n 4 ) T(n) = Θ(f(n)) = Θ(n^4) T(n)=Θ(f(n))=Θ(n4)
  
  b.
  应用主定理,根据递归式有 a = 1 , b = 10 / 7 , f ( n ) = n a = 1, b = 10/7,f(n) = n a=1,b=10/7f(n)=n,所以有 n l o g b a = n l o g 10 / 7 1 = n 0 = 1 n^{{\rm log}_ba}=n^{{\rm log}_{10/7}1}=n^0=1 nlogba=nlog10/71=n0=1。于是有 f ( n ) = n = Ω ( n 0 + ε ) = Ω ( n l o g b a + ε ) f(n)=n=Ω(n^{0+ε})=Ω(n^{{\rm log}_ba+ε}) f(n)=n=Ω(n0+ε)=Ω(nlogba+ε),其中 ε = 1 ε = 1 ε=1。并且当 7 / 10 ≤ c < 1 7/10 ≤ c < 1 7/10c<1时,有 a f ( n / b ) = f ( 7 n / 10 ) = 7 n / 10 ≤ c f ( n ) = c n af(n/b) = f(7n/10) = 7n/10 ≤ cf(n) = cn af(n/b)=f(7n/10)=7n/10cf(n)=cn。因此,可以应用主定理情况3,于是 T ( n ) = Θ ( f ( n ) ) = Θ ( n ) T(n) = Θ(f(n)) = Θ(n) T(n)=Θ(f(n))=Θ(n)
  
  c.
  应用主定理,根据递归式有 a = 16 , b = 4 , f ( n ) = n 2 a = 16, b = 4,f(n) = n^2 a=16,b=4f(n)=n2,所以有 n l o g b a = n l o g 4 16 = n 2 n^{{\rm log}_ba}=n^{{\rm log}_416}=n^2 nlogba=nlog416=n2。于是有 f ( n ) = n 2 = Θ ( n 2 ) = Θ ( n l o g b a ) f(n)=n^2=Θ(n^2 )=Θ(n^{{\rm log}_ba} ) f(n)=n2=Θ(n2)=Θ(nlogba)。因此,可以应用主定理情况2,于是 T ( n ) = Θ ( n l o g b a • l g n ) = Θ ( n 2 l g n ) T(n)=Θ(n^{{\rm log}_ba}•{\rm lg}n)=Θ(n^2{\rm lg}n) T(n)=Θ(nlogbalgn)=Θ(n2lgn)
  
  d.
  应用主定理,根据递归式有 a = 7 , b = 3 , f ( n ) = n 2 a = 7, b = 3,f(n) = n^2 a=7,b=3f(n)=n2,所以有 n l o g b a = n l o g 3 7 n^{{\rm log}_ba}=n^{{\rm log}_37} nlogba=nlog37。于是有 f ( n ) = n 2 = Ω ( n l o g 3 7 + ε ) f(n)=n^2=Ω(n^{{\rm log}_37+ε}) f(n)=n2=Ω(nlog37+ε),其中 ε = 0.228 ε = 0.228 ε=0.228。并且当 7 / 9 ≤ c < 1 7/9 ≤ c < 1 7/9c<1时,有 a f ( n / b ) = 7 f ( n / 3 ) = 7 • ( n / 3 ) 2 = 7 n 2 / 9 ≤ c f ( n ) = c n 2 af(n/b) = 7f(n/3) = 7•(n/3)^2 = 7n^2/9 ≤ cf(n) = cn^2 af(n/b)=7f(n/3)=7(n/3)2=7n2/9cf(n)=cn2。因此,可以应用主定理情况3,于是 T ( n ) = Θ ( f ( n ) ) = Θ ( n 2 ) T(n) = Θ(f(n)) = Θ(n^2) T(n)=Θ(f(n))=Θ(n2)
  
  e.
  应用主定理,根据递归式有 a = 7 , b = 2 , f ( n ) = n 2 a = 7, b = 2,f(n) = n^2 a=7,b=2f(n)=n2,所以有 n l o g b a = n l g 7 n^{{\rm log}_ba}=n^{{\rm lg}7} nlogba=nlg7。于是有 f ( n ) = n 2 = Θ ( n 2 ) = O ( n l g 7 − ε ) f(n)=n^2=Θ(n^2)=O(n^{{\rm lg}7-ε}) f(n)=n2=Θ(n2)=O(nlg7ε),其中 ε = 0.807 ε = 0.807 ε=0.807。因此,可以应用主定理情况1,于是 T ( n ) = Θ ( n l o g b a ) = Θ ( n l g 7 ) T(n)=Θ(n^{{\rm log}_ba})=Θ(n^{{\rm lg}7}) T(n)=Θ(nlogba)=Θ(nlg7)
  
  f.
  应用主定理,根据递归式有 a = 2 , b = 4 , f ( n ) = n = n 1 / 2 a = 2, b = 4,f(n)=\sqrt{n}=n^{1/2} a=2,b=4f(n)=n =n1/2,所以有 n l o g b a = n l o g 4 2 = n 1 / 2 n^{{\rm log}_ba}=n^{{\rm log}_42}=n^{1/2} nlogba=nlog42=n1/2。于是有 f ( n ) = n 1 / 2 = Θ ( n 1 / 2 ) = Θ ( n l o g b a ) f(n)=n^{1/2}=Θ(n^{1/2})=Θ(n^{{\rm log}_ba}) f(n)=n1/2=Θ(n1/2)=Θ(nlogba)。因此,可以应用主定理情况2,于是 T ( n ) = Θ ( n l o g b a • l g n ) = Θ ( n 1 / 2 l g n ) = Θ ( n l g n ) T(n)=Θ(n^{{\rm log}_ba}•{\rm lg}n)=Θ(n^{1/2}{\rm lg}n)=Θ(\sqrt{n}{\rm lg}n) T(n)=Θ(nlogbalgn)=Θ(n1/2lgn)=Θ(n lgn)
  
  g.
  本题不能应用主定理,而需要采用递归树方法。考虑 n n n为偶数的情况,画出递归树如下。
  算法导论 — 思考题4-1 递归式例子_第1张图片
  递归树一共有 n / 2 n/2 n/2层,每层均只有一个结点。假设叶结点深度为 i i i,那么有 n − 2 i = 2 n − 2i = 2 n2i=2,于是得到 i = ( n − 2 ) / 2 i = (n−2)/2 i=(n2)/2,即叶结点深度为 ( n − 2 ) / 2 (n−2)/2 (n2)/2。除叶结点外,深度为 i i i的结点产生的代价为 ( n − 2 i ) 2 (n−2i)^2 (n2i)2。将各层代价加起来,得到
     T ( n ) = ∑ i = 0 ( n − 4 ) / 2 ( n − 2 i ) 2 + Θ ( 1 ) = Θ ( n 3 ) T(n)=\sum\limits_{i=0}^{(n-4)/2}{(n-2i)^2} +Θ(1)=Θ(n^3) T(n)=i=0(n4)/2(n2i)2+Θ(1)=Θ(n3)
   n n n为奇数的情况是类似的,这里不再做分析。

你可能感兴趣的:(算法导论)