【JavaScript系列】时间复杂度和空间复杂度

本文介绍了时间复杂度和空间复杂度的概念,强调它们在算法与数据结构中的重要性,旨在提高代码效率和节省空间。文章通过实例解析大O表示法,解释了如何分析时间复杂度,如常数阶、对数阶、线性阶和平方阶等,并探讨了空间复杂度的计算。最后,作者提出通过优化算法降低复杂度,以提升代码执行效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

时间复杂度和空间复杂度,我们在大学里的算法与数据结构课程中已经学习过,这回根据项目工作中整理一下,这个估计只是一个粗略的估计分析,并不是一个准确的估计分析。

1、学习时间复杂度和空间复杂度是很有必要的,这个属于算法与数据结构的范畴,学这个是为了解决代码中的“快”和“省”的问题。这样才能使你的代码运行效率更高,占用空间更小。代码执行效率需要通过复杂度分析。

2、数据规模的大小会影响到复杂度分析。比如排序,如果是一个有序的数组,执行效率会更高;如果数据量很少的时候,这个算法看不出性能上差别。

3、比如说不同物理机环境不一样,比如i3,i5,i7的cpu等等,运行内存1G,2G,4G,8G等等;时间上肯定有差别。

 

二、大O的复杂度

我们来看个简单的例子,一个循环累加器。

function total(n) { 
      var sum = 0;   //t
      for (var i = 0; i < n; i++) {   // nt
        sum += i;   //nt
      } 
      return sum;  // t
    } 

分析:假设每一行代码执行耗时都一样,为t,这样整个代码总执行时间为(t+nt+nt+t)=(2n+2)t。

我们再来看一个栗子:

function total(n) { 
      var sum = 0;      // t
      for (var i = 0; i < n; i++) {   //nt
        for (var j = 0; j < n; j++) {     //n*n*t
          sum = sum + i + j;     //n*n*t
        }
      }
      return sum;      //t
    }

分析:假设每一行代码执行耗时都一样,为t,这样整个代码总执行时间为(t+nt+n*n*t*2+t)=(2n*n+n+2)t。

从数学角度来看,我们可以得出个规律:代码的总执行时间 T(n) 与每行代码的执行次数成正比.

所以上边两个函数的执行时间可以标记为 T(n) = O(2n+2) 和 T(n) = O(2n*n+n+2)。这就是大 O 时间复杂度表示法,它不代表代码真正的执行时间,而是表示代码随数据规模增长的变化趋势,简称时间复杂度

而且当 n 很大时,我们可以忽略常数项,只保留一个最大量级即可。所以上边的代码执行时间可以简单标记为 T(n) = O(n) 和 T(n) = O(n2)。

 

三、时间复杂度分析

1、循环次数最多的代码块

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值