zoukankan      html  css  js  c++  java
  • 时间复杂度 & 空间复杂度

    时间、空间复杂度

    • 时间维度:是指执行当前算法所消耗的时间。
    • 空间维度:是指执行当前算法需要占用多少内存空间。

    「时间复杂度」和「空间复杂度」的计算方式

    时间复杂度:「大O符号表示法」,即T(n)= O(f(n))。大O符号表示法并不是用来真实代表算法的执行时间的,它是用来表示代码执行时间的增长变化趋势的。

    其中f(n)表示每行代码执行次数之和,O表示正比例关系。

    常见的时间复杂度量级:

    • 常数阶O(1)
    • 对数阶O(logN)
    • 线性阶O(n)
    • 线性对数阶O(nlogN)
    • 平方阶O(n2)
    • 立方阶O(n3)
    • K次方阶O(nk)
    • 指数阶O(2n)

    从上到下依次的时间复杂度越来越大,执行的效率越来越低。

    依次举例说明

    • 常数阶O(1)
    let i = 0;
    let j = 0;
    

    上述代码执行的时候,它消耗的时间并不随着某个变量的增长而增长,无论代码有多长,都可以用O(1)来表示它的时间复杂度。

    • 线性阶O(n)
    for(let i = 0;i < n;i++ ){
       console.log(i) 
    }

    上述代码执行的时候,for循环里面的代码会执行n遍,因此它消耗的时间是随着n的变化而变化的,因此这类代码可以用O(n)来表示它的时间复杂度。

    • 对数阶O(logN)
    let i = 1
    while(i < n){
      i *= 2  
    }
    

    上述代码执行的时候,假设循环x次之后,i大于n,循环退出,也就是说2的x次方等于n,因此这类代码的时间复杂度为O(logN)。

    • 线性对数阶O(nlogN)
    for(let i = 0;i < j;i++){
      let   i = 1
      while(i < n){
        i *= 2        
      }    
    }
    • 平方阶O(n2)
    for(let i = 0;i < n;i++){
       for(let j = 0;j < n;j++){
          console.log(j)
        }
    }
    

      

    for(let i = 0;i < m;i++){
       for(let j = 0;j < n;j++){
          console.log(j)
        }
    }
    

    上述代码的时间复杂度就变成了O(m*n)

    空间复杂度:也不是用来计算程序实际占用的空间的。它是对一个算法在运行过程中临时占用存储空间大小的一个量度,同样反映的是一个趋势,我们用S(n)来定义。公式:S(n)= O(f(n))

    空间复杂度比较常用的有:O(1)、O(n)、O(n²)

  • 相关阅读:
    用AjaxMethod 方法实现动态加载地图
    C#中HashTable的使用(转)
    ArcGIS Server 中的动态文字标注
    ArcGIS Server .Net Web ADF之几何类型的相互转换(转)
    ArcGIS Server连接远程地图服务器
    sqlplus环境配置(login.sql)
    Oracle从软件安装到运行的全流程
    【转载】linux中误删除oracle数据文件的恢复操作
    “大淘宝战略”下集市定位,将决定马云和未来淘宝的命运
    男人如何对待抱怨自己的女人
  • 原文地址:https://www.cnblogs.com/zhenjianyu/p/13068556.html
Copyright © 2011-2022 走看看