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²)

  • 相关阅读:
    LeftoverDataException,依赖包,apache license 2.0
    GPL,BSD,Apache,MIT开源许可协议
    一次重构经历
    转载:reactor模式学习
    版本控制学习
    系统开发,出错处理,日志
    最近学习linux命令的一个总结
    sudo,linux 新建账号,并开通ssh登录
    运行R 报错R cannot R_TempDir, 继而发现/dev/mapper/VG00-LV01 磁盘空间已满
    用InputStream读出来转换成String类型
  • 原文地址:https://www.cnblogs.com/zhenjianyu/p/13068556.html
Copyright © 2011-2022 走看看