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

主定理公式: T ( n ) = a T ( n / b ) + f ( n ) T(n) = aT(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)) O(nlogba)>O(f(n))的时候, T ( O ) = O ( n l o g b a ) T(O)=O(n^{log_{b}^{a}}) T(O)=O(nlogba)
  2. O ( n l o g b a ) = O ( f ( n ) ) O(n^{log_{b}^{a}}) = O(f(n)) O(nlogba)=O(f(n))的时候, T ( O ) = O ( n l o g b a l g n ) T(O)=O(n^{log_{b}^{a}} lg n) T(O)=O(nlogbalgn)
  3. O ( n l o g b a ) < O ( f ( n ) ) O(n^{log_{b}^{a}}) < O(f(n)) O(nlogba)<O(f(n))的时候, T ( O ) = O ( f ( n ) ) T(O)=O(f(n)) T(O)=O(f(n))

显然, T ( n ) T(n) T(n)将复杂度分为了 a T ( n / b ) aT(n/b) aT(n/b)的复杂度 O ( n l o g b a ) O(n^{log_{b}^{a}}) O(nlogba),和 f ( n ) f(n) f(n)的复杂度 O ( 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) O(nlogbalgn)


练习:

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

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


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

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


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

解: a = 2 , b = 4 , a = 2, b = 4, a=2,b=4, 所以 O ( n l o g b a ) O(n^{log_{b}^{a}}) O(nlogba)的值为 O ( n ) O(\sqrt{n}) O(n ) f ( n ) f(n) f(n)的值为 O ( n ) O(n) O(n), 所以 O ( n l o g b a ) < O ( f ( n ) ) O(n^{log_{b}^{a}}) < O(f(n)) O(nlogba)<O(f(n)),则 T ( O ) = O ( 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 T(n)=2T(n/4)+n2

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


你可能感兴趣的:(算法,计算机基础)