big O notation:类比为小于等于 n2+O(n)=O(n2)
big Omega notation Ω:类比为 大于等于
Θ:类比为等于
严格符号:小o与小ω:类比为小于和大于
解递归方法:
1、替换法:guess the form,verify by induction,solve the consts
2、递归树法
3、master method:之应用于特定情况
T(n)=aT(n/b)+f(n)------>compare f(n) with n^(log_b a)---------->3 cases
divide-conquer method:
1.divide 2.conquer 3.combine
Ex:归并排序、二分查找、乘方问题分治法、斐波那契数列平方递归算法、矩阵乘法分治算法、VLSI布局H布局
fibonacci numbers:递归算法(指数级时间)bottom-up算法(linear)朴素平方递归(因浮点、仅理论可行)平方递归(log_2 n)
其中递归算法与bottom-up算法的python实现:
import datetime
def fibo(n):
if n==0:
return 0
elif n==1:
return 1
elif n>=2:
return fibo(n-1)+fibo(n-2)
starttime = datetime.datetime.now()
print("递归算法计算:指数级时间增长\n",fibo(35))
endtime = datetime.datetime.now()
print("cost time:",endtime - starttime,end="\n\n")
def bottom_up(n):
if n==0:
return 0
else:
i=1
f0=0
f1=1
while i<n:
tmp=f1
f1+=f0
f0=tmp
i+=1
return f1
starttime = datetime.datetime.now()
print("bottom_up算法:线性增长\n",bottom_up(35))
endtime = datetime.datetime.now()
print("cost time:",endtime - starttime)
#时间复杂度更低的还有 平方递归算法:θ(log_2 n)
# (Fn+1 Fn)=(1 1)^n
# (Fn Fn-1) (1 0)
递归算法计算:指数级时间增长
9227465
cost time: 0:00:04.679061
bottom_up算法:线性增长
9227465
cost time: 0:00:00.004988
>>>