跳到主要内容

时间复杂度

情况1,使用累加法求解​

递推形式典型场景复杂度
T(n)=T(n−1)+O(1)T(n)=T(n-1)+O(1)每次规模减 1O(n)O(n)
T(n)=T(n−1)+O(n)T(n)=T(n-1)+O(n)每层再做一次线性操作O(n2)O(n^2)
T(n)=T(n−1)+O(nk)T(n)=T(n-1)+O(n^k)逐层递减O(nk+1)O(n^{k+1})

第二类​

递推形式典型场景复杂度
T(n)=T(n/2)+O(1)T(n)=T(n/2)+O(1)二分、倍增O(log⁡n)O(\log n)
T(n)=T(n/2)+O(n)T(n)=T(n/2)+O(n)每层扫描整个当前区间O(n)O(n)

第三类​

递推形式典型场景复杂度
T(n)=2T(n−1)+O(1)T(n)=2T(n-1)+O(1)每层产生两个规模 n−1n-1 的问题O(2n)O(2^n)
T(n)=2T(n/2)+O(1)T(n)=2T(n/2)+O(1)二叉递归O(n)O(n)
T(n)=2T(n/2)+O(n)T(n)=2T(n/2)+O(n)归并排序O(nlog⁡n)O(n\log n)
T(n)=2T(n/2)+O(n2)T(n)=2T(n/2)+O(n^2)分成两半但合并很重O(n2)O(n^2)

第四类,使用主定理求解。​

递推形式典型场景复杂度
T(n)=aT(n/b)+f(n)T(n)=aT(n/b)+f(n)标准分治用 Master 定理

例子​

递推式nlog⁡ban^{\log_b^a}比较复杂度
T(n)=2T(n/2)+1T(n)=2T(n/2)+1nn1≪n1\ll nΘ(n)\Theta(n)
T(n)=4T(n/2)+nT(n)=4T(n/2)+nn2n^2n≪n2n\ll n^2Θ(n2)\Theta(n^2)
T(n)=2T(n/2)+nT(n)=2T(n/2)+nnn相同Θ(nlog⁡n)\Theta(n\log n)
T(n)=4T(n/2)+n2T(n)=4T(n/2)+n^2n2n^2相同Θ(n2log⁡n)\Theta(n^2\log n)
T(n)=2T(n/2)+n2T(n)=2T(n/2)+n^2nnn2≫nn^2\gg nΘ(n2)\Theta(n^2)

注意是具有 nεn^\varepsilon 这样的多项式级差距。T(n)=3T(n/4)+nlg⁡nT(n)=3T(n/4)+n\lg n 可以使用主定理求解,而 T(n)=2T(n/2)+nlg⁡nT(n) = 2T(n/2) + n\lg n 将不能使用一般的主定理求解。