时间复杂度的计算----摘自百度百科


1.一般情况下,算法中基本操作重复执行的次数是问题规模 n 的某个函数,用 T(n)表示,若有某个辅助函数 f(n),使得 T(n)/f(n)的极限值(当 n 趋近于无穷大时)为不等于零的常数,则称 f(n)是 T(n)的同数量级函数。记作 T(n)=O(f(n)),称 O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。
分析:随着模块 n 的增大,算法执行的时间的增长率和 f(n) 的增长率成正比,所以 f(n) 越小,算法的时间复杂度越低,算法的效率越高。


  1. 在计算时间复杂度的时候,先找出算法的基本操作,然后根据相应的各语句确定它的执行次数,再找出 T(n) 的同数量级
    (它的同数量级有以下:1,logn,n,n logn ,n 的平方,n 的三次方,2 的 n 次方,n!),
    找出后,f(n) = 该数量级,若 T(n)/f(n) 求极限可得到一常数 c,则时间复杂度 T(n) = O(f(n))
    例:算法:
for(i=1; i<=n; ++i)
{
    for(j=1; j<=n; ++j)
    {
        c[i][j] = 0;//该步骤属于基本操作执行次数:n的平方次
        for(k=1; k<=n; ++k)
            c[i][j] += a[i][k] * b[k][j];//该步骤属于基本操作执行次数:n的三次方次
    }
}

则有  ,根据上面括号里的同数量级,我们可以确定 n 的三次方 为 T(n)的同数量级
则有   ,然后根据 T(n)/f(n) 求极限可得到常数 c
则该算法的时间复杂度:T(n) = O(n^3) 注:n^3 即是 n 的 3 次方。


3.在 pascal 中比较容易理解,容易计算的方法是:
看看有几重 for 循环,
只有一重则时间复杂度为 O(n),
二重则为 O(n^2),
依此类推,
如果有二分则为 O(logn),
二分例如快速幂、二分查找,
如果一个 for 循环套一个二分,那么时间复杂度则为 O(nlogn)。


文章作者: 慕书
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 慕书 !
评论
  目录