算法的时间复杂度和空间复杂度

        复杂度分析可以帮助我们粗略的估计代码运行的时间和所需空间,因此我们用到时间复杂度和空间复杂度这两个指标。

时间复杂度

以几个例子来分析代码的时间复杂度

1、只关注循环执行次数最多的一段代码

function total(n) { // 1
      var sum = 0; // 2
      for (var i = 0; i < n; i++) { // 3
        sum += i; // 4
      } //5
    } //6

假设每一行代码的执行时间相等,那么第2行代码执行需要t个时刻,第3行代码执行需要n*t个时刻,第4行代码执行需要n*t,最终这段代码的执行时间为(n+n+1)*t,当数据规模n很大时,我们可以忽略常数项,所以最终这段代码的时间复杂度可以表示为O(n)

2、总复杂度等于两级最大的那段代码的复杂度

function total(n) { 
      // 第一个 for 循环
      var sum1 = 0; 
      for (var i = 0; i < n; i++) {  //执行n次
        for (var j = 0; j < n; j++) {  //执行n^2次
          sum1 = sum1 + i + j;  //执行n^2次
        }
      }
      // 第二个 for 循环
      var sum2 = 0;
      for(var i=0;i<1000;i++) {  //执行1000次
        sum2 = sum2 + i; //执行1000次
      }
      // 第三个 for 循环
      var sum3 = 0;
      for (var i = 0; i < n; i++) { //执行n次
        sum3 = sum3 + i;  //执行n次
      }
    }

第一个for循环执行了2n^2+n,第二个for循环执行了2000次,第三个for循环执行了2n次,选数量级最大的作为整段代码的复杂度,则结果为O(n^2)

3、常见的时间复杂度理解

(1)O(1)表示常量级时间复杂度,代码的运行时间并不受数据规模n的影响

(2)O(logn)

 function total2(n) {
      var sum = 0;
      for (var i = 1; i <= n; i = i * 2) {
        sum += i;
      }
    }

代码中i的取值为2的倍数,那么i的取值可以用一个等比数列来表示

2^1  2^2  .......  2^x=n

通过x=log2n就可以计算代码循环的次数,所以代码的时间复杂度为O(logn),底数可以忽略

空间复杂度

空间复杂度也就是代码中的数规模与所需存储空间的关系

举例

function initArr(n) {
      var arr = [];
      for (var i = 0; i < n; i++) {
        arr[i] = i;
      }
    }

每一次循环都会创建一个空间来存储变量,所以空间复杂度为O(n),同样也可以类比于时间复杂度忽略常数项

参考

https://juejin.cn/post/6844903750985842695 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值