算法:有限步内解决一个问题的有效方法。
算法五大特征:(输入,输出,有穷性,确定性,有效性)。
递归算法时间复杂度(递归方程)计算方法:
一个例子:
1.1
T(n) = O(1) n=1
2T(n/2)+O(n) n>1
求T(n)的表达式
T(n)=2T(n/2)+O(n)
=4T(n/4)+2O(n/2)+O(n)
=4T(n/4)+2O(n)
=8T(n/8)+3O(n)
.....
=2k T(n/2k) +kO(n)
这里令n=2k ,k=logn那么T(n)=T(2k)=n * T(1)+logn * O(n)
=n*O(1)+O(nlogn)
=O(n)+O(nlogn)
=O(nlogn).
1.2 公式法
这个方法为估计形如:
T(n) = aT(n/b) + f(n)
其中,a≥1和b≥1,均为常数,f(n)是一个确定的正函数。在f(n)的三类情况下,我们有T(n)的渐近估计式:
1.若对于某常数ε>0,有f(n) = O(nlogb a-ε ),则T(n) = O(nlogb a )
2.若f(n) = O(nlogb a ),则T(n) = O(nlogb a *logn)
3.若f(n) = O(nlogb a+ε ),且对于某常数c>1和所有充分大的正整数n,有af(n/b)≤cf(n),则T(n)=O(f(n))。
设T(n) = 4T(n/2) + n,则a = 4,b = 2,f(n) = n,计算得出nlogb a = nlog2 4 = n2 ,而f(n) = n = O(n2-ε ),此时ε= 1,根据第1种情况,我们得到T(n) = O(n2 )。
这里涉及的三类情况,都是拿f(n)与nlogb a 作比较,而递归方程解的渐近阶由这两个函数中的较大者决定。在第一类情况下,函数nlogb a 较大,则T(n)=O(nlogb a );在第三类情况下,函数f(n)较大,则T(n)=O(f (n));在第二类情况下,两个函数一样大,则T(n)=O(nlogb a *logn),即以n的对数作为因子乘上f(n)与T(n)的同阶。
但上述三类情况并没有覆盖所有可能的f(n)。在第一类情况和第二类情况之间有一个间隙:f(n)小于但不是多项式地小于nlogb a ,第二类与第三类之间也存在这种情况,此时公式法不适用。