美文网首页数据结构和算法分析程序员
【数据结构与算法】时间复杂度和空间复杂度

【数据结构与算法】时间复杂度和空间复杂度

作者: 大基本功 | 来源:发表于2018-08-06 10:58 被阅读10次

    同一问题可用不同算法解决,而一个算法的质量优劣将影响到算法乃至程序的效率。算法分析的目的在于选择合适算法和改进算法。一个算法的评价主要从时间复杂度和空间复杂度来考虑。

    时间复杂度

    一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),存在一个正常数c使得fn*c>=T(n)恒成立。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。

    推导大O阶

    推导攻略:

    • 用常数1取代运行时间中的所有加法常数
    • 在修改后的运行次数函数中,只保留最高阶项
    • 如果最高阶项存在且不是1,则去除与这个项相乘的常数
    常数阶

    常数阶用O(1)表示

    线性阶

    线性阶用O(n)表示
    示例:如下代码的时间复杂度即为O(n)

    int I ,n = 100, sum = 0;
    for(I = 0 ; I < n; I++){
       sum = sum + I;
    }
    
    平方阶

    平方阶用O(n²)表示
    示例:如下代码的时间复杂度即为O(n²)

    int I , j , n = 100;
    for (I = 0; I < n; I++){
       for(j = 0; j < n; j ++ ){
       printf("666")
       }
    }
    
    对数阶

    对数阶用O(logn)表示
    示例:如下代码的时间复杂度即为O(logn)

    int I = 1, n = 100;
    while(I < n){
     I = I * 2
    }
    //由于2^x = n ,所以x = log(2)n
    
    常见时间复杂度
    时间复杂度 术语 例子
    O(1) 常数阶 123
    O(n) 线性阶 2n+3
    O(n²) 平方 3n²+4n+5
    O(logn) 对数阶 3log(2)n + 5
    O(nlogn) nlogn阶 2n + 3nlog(2)n + 10
    O(n³) 立方阶 n³+3n²+4n+5
    O(2^n) 指数阶 2^n

    常见时间复杂度耗费时间从小到大依次是: O(1)<O(logn)<(O(n))<O(nlogn)<O(n²)<O(n³)<O(2^n)

    空间复杂度

    与时间复杂度类似,空间复杂度是指算法在计算机内执行时所需存储空间的度量。记作:

    S(n)=O(f(n))

    相关文章

      网友评论

        本文标题:【数据结构与算法】时间复杂度和空间复杂度

        本文链接:https://www.haomeiwen.com/subject/woluvftx.html