算法复杂度分析

来源:互联网 发布:im聊天软件蓝色 编辑:程序博客网 时间:2024/05/21 09:21

递推算法

对于递推类和循环类算法,我们一般统计其主要的基本操作个数与问题的规模大小。从而就可以推出算法复杂度。

递归算法

  1. 对于任意α!=1的通式T(n)=T(αn)+T((1α)n)+cn,其时间复杂度都是O(nlogn)
  2. 对于范式T(n)=aT(n/b)+nd,对于a>1,b>1,d>0,所以可以得出最后的复杂度为:

    对上面分析,当d>logba时,那么abd就小于1,所以1+abd+(abd)2+.......+(abd)logbn的和极限一定小于某个常数,即T(n)<Cnd,所以T(n)=nd.
    d=logba时,那么1+abd+(abd)2+.......+(abd)logbn等于logbn,所以这个时候T(n)=nlogbalogn .
    d<logba时,那么abd就大于1,所以1+abd+(abd)2+.......+(abd)logbn的和是一个随n的线性增长,即T(n)<nlogba,所以T(n)=nlogba.

双层递推

如:

aT(n)+bT(n1)+cT(n2)=0

对于此类问题的分解:
采用求取特征值的求法:
ax2+bx+c=0

这样转换的原因在于,呈现上述公式的解一般是指数型解可以化简,这样x就相当于指数基数了。这样就可以最终求出T(n)的表达式,时间复杂度一目了然。

特殊形式

M(n)=k1M(n1)+k2

k11时,这样的表达式一般表示的也是指数级别的复杂度。

原创粉丝点击