算法时间复杂度
主方法
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))
case 1可用递归树证明:
分治法
归并排序
排序步骤:
-
n为1时,已经完成排序。
-
n大于1时,递归的对A[1~┏n/2┓]这部分以及A[┏n/2┓+1~n]这部分排序。
(┏ ┓表示向上取整) -
将排序好的两个表合并,比较两个表,依次取出最小者到输出序列中。
-
运行时间:
递归函数为T(n)=2T(n/2)+Θ(n)。(递归时间+非递归时间)
使用主方法,为case2 ,所以T(n)= Θ(nlgn)。
乘方问题
和二分查找实质一样,将指数n二分:
有实数X和正整数n计算X^n。
当n为偶数时,X^n=X^(n/2)·X^(n/2),当n为奇数时,X^n=X^((n-1)/2)·X^((n-1)/2)·X。
- 运行时间:
递归函数为T(n)=T(n/2)+Θ(1)。
使用递归树法T(n)= Θ(lgn)。
斐波那契数列
-
Fn=φn/5(1/2)结果取最接近的整数(round)。(φ是黄金分割数)
该方法无法用计算机实现(精确度不够的原因)。
运行时间:Θ(lgn)。 -
平方递归式:
(F(n+1) Fn) = (1 1)n
(Fn F(n-1)) (1 0)
运行时间:Θ(lgn)
证明方法可采用归纳法:
- (F2 F1) = (1 1)1
(F1 F0) (1 0) - (F(n+1) Fn) = (Fn F(n-1)) (1 1)
(Fn F(n-1)) (F(n-1) F(n-2)) (1 0)
由定义可知上式成立。