求解时间复杂度
主要有三种方法:代入法、递归树法、主方法
代入法:
根据解的形式进行猜测,然后证明。
例子:
T(n)=2T(n/2)+Θ(n)
猜测T(n)=Ο(nlgn)
T(n)=2T(n/2)+Θ(n)<2c(n/2)lg(n/2)+dn=cnlgn-cnlg2+dn
证明完毕,只要我们选择合适的c与合适的d使得dn-cnlg2<0即可。
递归树求解法:
画出递归树,并计算递归树的高度以及每一层递归树中的代价,再相加。
例子:
T(n)=2T(n/2)+Θ(n)
n变成1一共经历了log2n层。每一层的代价总和是cn,所以是nlgn。
主方法求解:
形如T(n)=aT(n/b)+f(n)的递归式一般可以使用主方法进行求解。
首先计算logba=k,计算nk
将nk与f(n)进行比较。较大的决定了递归式的解。
若f(n)较大,则T(n)=Θ(f(n))
若nk较大,则T(n)=Θ(nk)
若相同,则T(n)=Θ(f(n)lgn)
这里的较大较小指的是多项式意义上的大小。
f(x)多项式大于g(x):
存在实数e>0,使得f(x)>g(x)*n^e
f(x)多项式小于g(x):
存在实数e>0,使得f(x)