前言
在介绍主定理之前,需要了解一下关于表示时间复杂度的几种形式。
O(big−O) 表示最坏时间复杂度,为上界。
Ω(big−Omega) 表示最优时间复杂度,为下界。
Θ(big−Theta) 表示确界,当上界和下届相同时,可以用这个来表示时间复杂度。
主定理
主定理主要解决递归式的时间复杂度计算。但并不能解决所有的递归式。主要适用如下递归式:
T(n)=aT(bn)+f(n) bn 为每个子问题的规模。
三种 case
主定理的结果主要跟 f(n) 有关。
当 f(n)=O(n(logba)−ϵ) 其中 ϵ>0 (相当于 logba>f(n)),则有 T(n)=Θ(nlogba)。
当 f(n)=Θ(nlogba),则有T(n)=Θ(nlogbalogn)。
当 f(n)=Ω(n(logba)+ϵ) 其中 ϵ>0 (相当于logba<f(n)),则有 T(n)=Θ(f(n))
简化版本
如果 T(n)=aT(bn)+O(nd)(其中 a>0,b>1,d≥0),则有
T(n)=⎩⎨⎧O(nd)O(ndlogn)O(nlogba)if d>logbaif d=logbaif d<logba 总结
计算递归时间复杂度的话,一般两种方法,画递归树手算和用主定理,具体情况具体分析。