O符号(上界)
f(n)=O(g(n)) (<=)
存在c>0 n0>0 当n>=n0时 使得0<=f(n)<=cg(n)。
O(g(n))表示符合上述条件的函数集,公式中的等号的作用类似于属于,所以等号不可逆。
- Ex
- f(n)=n^3+O(n^2)
存在h(n)属于O(n^2)使得f(n)=n^3+h(n)。 - n^2+O(n)=O(n^2)
对任意的f(n)属于O(n)总存在h(n)属于O(n^2)使得n^2+ f(n)= h(n)。
- f(n)=n^3+O(n^2)
Ω符号(下界)
f(n)= Ω(g(n)) (>=)
存在c>0 n0>0 当n>=n0时 使得0<=cg(n)<=f(n)。
- Ex
- sqrt(n)= Ω(lgn)
Θ符号
Θ(g(n))= O(g(n))∩Ω(g(n))(=)
o符号
f(n)=o(g(n))(<)
对任意的c存在n0>0 当n>=n0时 使得0<=f(n)<=cg(n)。
ω符号
f(n)=ω(g(n))(>)
对任意的c存在n0>0 当n>=n0时 使得0<=cg(n)<=f(n)。
求解递归式的方法
代换法
1.猜测结果。
2.验证递归式是否按照数学归纳法满足条件。
3.求出系数使问题成立。
- Ex
T(n)=4T(n/2)+n(T(1)=Θ(1))
- 思路1
1.假设T(n)=O(n^3)。
2.则有T(k)<=ck^3(k小于n)
T(n)=4T(n/2)+n<=4c(n/2)^3+n=(cn^3)/2+n=cn^3-((cn^3)/2-n)。
3.若假设成立则需(cn^3)/2-n>=0 因为c的取值任意 例如当c的值为2时 不等式成立。
验证基本情况T(1)=Θ(1)<=c1^3 当c取一个足够大的数时,不等式成立。 - 思路2
1.假设T(n)=O(n^2)。
2.则有T(k)<=ck^2(k小于n)。
T(n)=4T(n/2)+n<=4c(n/2)^2+n=cn^2+n=cn^2-(-n)。
3.若假设成立则需-n>=0(进入死路)。 - 思路3
改进归纳假设:
1.假设T(n)=O(n^2)。
2.则有T(k)<=c1·k^2-c2·k(k小于n)。
T(n)=4T(n/2)+n<=4(c1·(n/2)^2-c2·(n/2))+n=c1·n^2-c2·n-(-1+c2)·n。
3.若假设成立则需(-1+c2)·n>=0当c2>=1时 不等式成立。
4.验证基本情况T(1)=Θ(1)<=c1·1^2-c2·1 当c1取一个足够大的数时,不等式成立。
- 思路1
递归树法
这个方法不够严谨,比较好的解题过程应该是用递归树法求出结果后再用代换法验证。
- Ex:
T(n)=T(n/4)+T(n/2)+n^2
主方法
T(n)=aT(n/b)+f(n)(a>=1 b>1 f(n)渐进趋正)
注:log(b)a表示以b为底a的对数,lg表示以2为底。
- case 1
f(n)=O(n^(log(b)a-ε)) (ε>0)
=>T(n)=Θ(n^log(b)a) - case 2
f(n)=Θ (n^log(b)a·(lgn)^k)(k>=0)
=>T(n)=Θ(n^log(b)a·(lgn)^(k+1)) - case 3
f(n)=Ω(n^(log(b)a+ε))(ε>0)&& 存在0<ε‘<1,使得af(n/b)<=(1-ε’)·f(n)
=>T(n)=Θ(f(n)) - Ex
- T(n)=4T(n/2)+n
n^log(b)a=n^2
n小于n^2
为case 1=> T(n)=Θ(n^2) - T(n)=4T(n/2)+n^2
n^log(b)a=n^2
n^2等于n^2
为case 2=> T(n)=Θ(n^2·lgn) - T(n)=4T(n/2)+n^3
n^log(b)a=n^2
n^3大于n^2
为case 3=> T(n)=Θ(n^3) - T(n)=4T(n/2)+n^2/lgn
注意第2种情况要求k>=0,所以主方法不适用,可尝试用递归树法。
- T(n)=4T(n/2)+n