刚刚发现自己以前认为的递归算法复杂度分析都是错的……
主定理:(以下摘自算导)
另
a≥1
和
b>1
是常数,
f(n)
是一个函数,
T(n)
是定义在非负整数上的递归式:
T(n)=aT(n/b)+f(n)
其中 n/b 被解释为 ⌊n/b⌋ 或 ⌈n/b⌉ 。(对以下结果无影响)
那么:
1.若对于某个常数 k>0 ,有 T(n)=O(nlogba−k) ,则 T(n)=O(nlogba) 。
2.若 f(n)=O(nlogba) ,则 T(n)=O(nlogbalog2n) 。
3.若对于某个常数 k>0 ,有 T(n)=O(nlogba+k) ,且存在常数c<1对于足够大的n都有 af(n/b)≤cf(n) ,则 T(n)=O(f(n)) 。