zoukankan      html  css  js  c++  java
  • 程序的时间复杂度

    一、概念

    1. 时间复杂度:随着n的不断变化,T(n)/f(n)逐渐趋近于一个常数,我们使用O(f(n))来表示时间复杂度

      我的理解就是:
      时间复杂度就是: 程序循环体内,执行次数最多的语句的执行次数,若并列的循环,则将并列循环的时间复杂度相加。
      时间复杂度排序:
      Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n2)<Ο(n3)<…<Ο(2n)<Ο(n!)

    2. 步骤:

      1.首先找到执行次数最多的基本语句,一般都是在最内层循环的循环体内
      2.查看该基本语句执行的次数
      3.对于并列循环,则把复杂度相加,得出最后该程序的时间复杂度
      (保证基本语句执行次数的函数中的最高次幂正确即可,可以忽略所有低次幂和最高次幂的系数)

    3. 示例:

      时间复杂度:O(1)
      核心:n是不变的,就执行固定次数,有限的;
      Ο(1)表示基本语句的执行次数是一个常数,一般来说,只要算法中不存在循环语句,其时间复杂度就是Ο(1)

        int sum=0,n=100;           //执行一次
        sum=(1+n)*n/2;             //执行一次
        System.out.println(sum);   //执行一次 

    时间复杂度:O(log2n)
    i一次增长2倍,也就是说,超过n需要执行多少次语句,即为时间复杂度。通过计算2^i=n,得到i=logn.所以时间复杂度为对数阶O(logn).



    int i = 1; while(i < n){ i * = 2; }


    时间复杂度:O(n)
    n是因为一次增长一步,n次后执行完了这条语句,所以为O(n)



    例子1: int b =0; for(int i = 0; i < n; i++){ b++; }
    例子2int i,sum=0,n=100;     //执行一次
        for(i=1;i<=n;i++)      //执行n+1次
        {
            sum=sum+i;         //执行n次
        }
    
        System.out.println(sum);  //执行一次  


    时间复杂度:O(n2)



     例子1:   for (i=1; i<=n; i++){   for (j=1; j<=n; j++)   {x++;}   }
    例子2int i,j,x=0,sum=0,n=100;     //执行一次
        for(i=1;i<=n;i++){           //执行n+1次
            for(j=1;j<=n;j++){       //执行n*(n+1)次
                x++;                 //执行n*n次
                sum=sum+x;
            }
        }
        System.out.println(sum);   //执行一次 
    
    
    这段代码执行了2n^2+2n+3次,即O(n2),随着这段代码重复被执行的次数增多,随着n值增大,时间效率会爆炸式增长。

    小结:

    1. O(1)常数阶:每条语句的频度都是1,算法的执行时间不随着问题规模n增大而增长,即使有上千条语句,其执行时间也不过是一个比较大的常数。
    2. O(n)线性阶:有一个n次循环的循环语句。随着n增长执行时间线性增长。
    3. O(n^2)平方阶:循环中嵌套一个循环的情况。
    4. 时间复杂度大小体现:
      这里写图片描述

    参考:https://blog.csdn.net/c99463904/article/details/77414163

  • 相关阅读:
    Go 命令行参数,JSON 序列化与反序列化
    Go 文件操作
    Go 多态
    Go 接口
    Go 面向对象三大特性
    Go 面向对象编程应用
    Go 结构体方法
    Go 面向对象之结构体
    Go Map
    vue安装 vue-cli安装
  • 原文地址:https://www.cnblogs.com/NanKe-Studying/p/15384343.html
Copyright © 2011-2022 走看看