算法导论:用主定理求解递归式 计算算法复杂度

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jal517486222/article/details/82805401

主定理公式: T ( n ) = a T ( n / b ) + f ( n ) T(n) = aT(n/b) + f(n)

算法导论书上将算法复杂度的求解方法讲的很清楚,就分三种情况:

  1. O ( n l o g b a ) > O ( f ( n ) ) O(n^{log_{b}^{a}}) > O(f(n)) 的时候, T ( O ) = O ( n l o g b a ) T(O)=O(n^{log_{b}^{a}})
  2. O ( n l o g b a ) = O ( f ( n ) ) O(n^{log_{b}^{a}}) = O(f(n)) 的时候, T ( O ) = O ( n l o g b a l g n ) T(O)=O(n^{log_{b}^{a}} lg n)
  3. O ( n l o g b a ) < O ( f ( n ) ) O(n^{log_{b}^{a}}) < O(f(n)) 的时候, T ( O ) = O ( f ( n ) ) T(O)=O(f(n))

显然, T ( n ) T(n) 将复杂度分为了 a T ( n / b ) aT(n/b) 的复杂度 O ( n l o g b a ) O(n^{log_{b}^{a}}) ,和 f ( n ) f(n) 的复杂度 O ( f ( n ) ) O(f(n)) 两部分,两者谁大则取谁的值,如果相同,则为 O ( n l o g b a l g n ) O(n^{log_{b}^{a}} lg n)


练习:

(1). 求: T ( n ) = 2 T ( n / 4 ) + 1 T(n) = 2 T(n/4) + 1

解: a = 2 , b = 4 , a = 2, b = 4, 所以 O ( n l o g b a ) O(n^{log_{b}^{a}}) 的值为 O ( n ) O(\sqrt{n}) f ( n ) f(n) 的值为 O ( 1 ) O(1) , 所以 O ( n l o g b a ) > O ( f ( n ) ) O(n^{log_{b}^{a}}) > O(f(n)) ,则 T ( O ) = O ( n ) T(O)=O(\sqrt{n})


(2). 求: T ( n ) = 2 T ( n / 4 ) + n T(n) = 2 T(n/4) + \sqrt{n}

解: a = 2 , b = 4 , a = 2, b = 4, 所以 O ( n l o g b a ) O(n^{log_{b}^{a}}) 的值为 O ( n ) O(\sqrt{n}) f ( n ) f(n) 的值为 O ( n ) O(\sqrt{n}) , 所以 O ( n l o g b a ) = O ( f ( n ) ) O(n^{log_{b}^{a}}) = O(f(n)) ,则 T ( O ) = O ( n l g n ) T(O)=O(\sqrt{n} lgn)


(3). 求: T ( n ) = 2 T ( n / 4 ) + n T(n) = 2 T(n/4) + n

解: a = 2 , b = 4 , a = 2, b = 4, 所以 O ( n l o g b a ) O(n^{log_{b}^{a}}) 的值为 O ( n ) O(\sqrt{n}) f ( n ) f(n) 的值为 O ( n ) O(n) , 所以 O ( n l o g b a ) < O ( f ( n ) ) O(n^{log_{b}^{a}}) < O(f(n)) ,则 T ( O ) = O ( n ) T(O)=O(n)


(4). 求: T ( n ) = 2 T ( n / 4 ) + n 2 T(n) = 2 T(n/4) + n^2

解: a = 2 , b = 4 , a = 2, b = 4, 所以 O ( n l o g b a ) O(n^{log_{b}^{a}}) 的值为 O ( n ) O(\sqrt{n}) f ( n ) f(n) 的值为 O ( n 2 ) O(n^2) , 所以 O ( n l o g b a ) < O ( f ( n ) ) O(n^{log_{b}^{a}}) < O(f(n)) ,则 T ( O ) = O ( n 2 ) T(O)=O(n^2)


猜你喜欢

转载自blog.csdn.net/jal517486222/article/details/82805401
今日推荐