美文网首页
白话时间复杂度与空间复杂度

白话时间复杂度与空间复杂度

作者: s1991721 | 来源:发表于2018-04-09 22:03 被阅读0次

    时间复杂度

    用于表示,算法解决规模为n的问题所消耗的时间。
    理解:用同一代码块段执行的次数衡量

    sum = n*(n+1)/2; //顺序执行时,此代码块只会运行一次因此时间复杂度为 O(1)
    
    for(int i = 0; i < n; i++){
        printf("%d ",i);     //根据上面的理解它的时间复杂度O(n)
    }                       
    

    有些时候为了表示方便也会取近似值如:

    for(int i = 0; i < n; i++){
        for(int j = 0; j < n; j++){
            printf("%d ",i);       //准确的时间复杂度为O(n^2)
        }
    }               
    

    for(int i = 0; i < n; i++){
        for(int j = i; j < n; j++){
            printf("%d ",i);//此代码块运行次数为 (1+n)*n/2 
    //由高数中的极限可推n无限大时,(1+n)*n/2极限为n^2,因此时间复杂度O(n^2)
        }
    }   
    
    

    那 log2n是怎么出现的

    int i = 1, n = 100;
    while(i < n){
        i = i * 2;   //设执行次数为x。 2^x = n 即x = log_2 n,时间复杂度O(log2n)
    //当循环步数不为1跳跃时,便会产生多种答案
    }
    

    参考 时间复杂度和空间复杂度

    空间复杂度

    用于表示,算法解决规模为n的问题所消耗的空间。
    理解:生成额外空间的数量(临时变量在内)

        public static void swap(int a, int b) {
            int temp = a;
            a = b;
            b =temp;
        }
    

    一个简单交换的完成,借助了一个临时变量temp才得以完成,所以空间复杂度为O(1)

        public static void swap(int a, int b) {
            a = a+b;
            b = a-b;
            a = a-b;
        }
    

    而使用加减法交换就不会产生临时变量因此空间复杂度为O(0)

    相关文章

      网友评论

          本文标题:白话时间复杂度与空间复杂度

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