Master theorem
Let T ( n ) T(n) T(n) be defined by T ( n ) = a T ( n b ) + O ( n d ) T(n) = aT(\frac{n}{b}) + O(n^d) T(n)=aT(bn)+O(nd) for a > 1 , b > 1 a>1, \ b>1 a>1, b>1 and d > 0 d>0 d>0, then T ( n ) T(n) T(n) can be bounded by:
- if d < l o g b a d<log_ba d<logba, then T ( n ) = O ( n l o g b a ) T(n) = O(n^{log_ba}) T(n)=O(nlogba);
- if d = l o g b a d = log_ba d=logba, then T ( n ) = O ( n l o g b a l o g n ) T(n) = O(n^{log_ba}logn) T(n)=O(nlogbalogn);
- if d > l o g b a d>log_ba d>logba, then T ( n ) = O ( n d ) T(n) = O(n^d) T(n)=O(nd);
看到上面三个时间复杂度计算的前提条件,发现少了一项,就是 d = 0 d=0 d=0 时要怎么计算,所以下面将对这四种情况进行推导说明。
1. d=0
d = 0 d=0 d=0时,可以适用于只分不 merge 的情况,比如查找二叉树某结点深度等。
在下面计算时会用到换底公式
a l o g b c = c l o g b a a^{log_b^c} = c^{log_b^a} alogbc=clogba
T ( n ) = a T ( n b ) + c = a 2 T ( n b 2 ) + 2 c = a 3 T ( n b 3 ) + 3 c ⋯ = a l o g b n T ( n b l o g b n ) + c ⋅ l o g b n = a l o g b n T ( n n ) + c ⋅ l o g b n = n l o g b a + O ( l o g n ) \begin{aligned} T(n) &= aT(\frac{n}{b})+c \\ &= a^2T(\frac{n}{b^2}) +2c \\ &= a^3T(\frac{n}{b^3}) +3c \\ &\cdots \\ &= a^{log_bn}T(\frac{n}{b^{log_bn}}) +c\cdot log_bn \\ &= a^{log_bn}T(\frac{n}{n}) + c\cdot log_bn \\ &= n^{log_ba}+O(logn) \end{aligned} T(n)=aT(bn)+c=a2T(b2n)+2c=a3T(b3n)+3c⋯=alogbnT(blogbnn)+c⋅logbn=alogbnT(nn)+c⋅log