前言

在上一篇文章中介绍了算法和数据结构的基本概念,这篇文章来介绍一下时间复杂度和空间复杂度。

时间复杂度和空间复杂度是衡量一个算法是否优秀的标准,通常我们比较两个算法时会用到以下两种方法:

  • 预先估算:就是说在算法设计出来之后,根据算法中的步骤,去估算这个算法所需的时间复杂度和空间复杂度,然后两个进行比较,选择更优秀的那个;
  • 事后统计:根据两个算法分别编写一个可执行程序/脚本,交给计算机去执行,分别记录两个算法所需要的时间复杂度和空间复杂度,然后两个进行比较,选择更优秀的那个。、

通常情况下我们都会采用第一种方式进行对比,因为第二种在不同环境、不同语言、不同计算机下的运行结果是有差异的,而且第二种的工作量也要比第一种要大。

时间复杂度

所谓的时间复杂度就是用于定性描述算法所运行需要花费的时间,所谓的定性就是大概进行描述一下运行时间的趋势,不会去具体到运行需要多少秒;时间复杂度通常用大O来表示,例如O(1)O(n)O(logn)等。

接下来我们通过具体的代码来展示一下时间复杂度,这样更方便去理解:

  • O(1)
let i = 0
console.log(i)

因为在这个代码中,这两行代码永远只执行一次,所以时间复杂度是`O(1)`

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

在上面的代码中,运行时间取决与`n`,所以时间复杂度是`O(n)`。

  • O(logn)
let i = 1
while (i < n) {
  console.log(i)
  i *= 2
}

如果是下面这种情况:

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

它的时间复杂度是O(1) O(n),它最终的时间复杂度是O(n),两个时间复杂度相加的话一般会忽略较小的那个。

如果是两个时间复杂度相乘的话,例如下面这段代码:

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

这段代码的时间复杂度是O(n^2),如果是相乘的话会将两个时间复杂度进行相乘。

空间复杂度

空间复杂度与时间复杂度差不多,表示的是算法在运行过程中临时占用存储空间的大小的一个计量单位,

现在我们来看一下几个例子:

  • O(1)
let i = 0
console.log(i)

​​​​​​​因为在这个代码中,仅仅定义了一个临时变量,所以空间复杂度是`O(1)`

  • O(n)
const arr = []
for (let i = 0; i < n; i  ) {
  arr.push(i)
}

​​​​​​​在上面的代码中,我们声明了一个数组,每循环一次都要往数组中存储一个变量,所以时间复杂度是`O(n)`

O(n^2)

let i = 1
while (i < n) {
  console.log(i)
  i *= 2
}

到此这篇关于JavaScript时间复杂度和空间复杂度的文章就介绍到这了,更多相关JavaScript时间复杂度内容请搜索Devmax以前的文章或继续浏览下面的相关文章希望大家以后多多支持Devmax!

JavaScript时间复杂度和空间复杂度的更多相关文章

  1. 最省空间的计数器

    最近嘉新的计数器改成文本的了,不过正好..//count.php-js应用版

  2. 基于jQuery实现仿QQ空间送礼物功能代码

    qq空间的一份虚拟礼物可能会让很久不曾相见的朋友拉近一些距离。那么基于jquery代码是如何实现此功能的呢?下面脚本之家小编给大家分享基于jQuery实现仿QQ空间送礼物功能代码,一起看看吧

  3. Python函数高级(命名空间、作用域、装饰器)

    这篇文章介绍了Python函数的高级用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  4. Python名称空间与作用域

    这篇文章主要介绍了Python名称空间与作用域,名称空间即存放名字与对象映射 绑定关系的地方,下文更多相关介绍需要的小伙伴可以参考一下

  5. TypeScript中命名空间与模块化详情

    这篇文章主要介绍了TypeScript中命名空间与模块化详情,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下

  6. OpenCV实战之OpenCV中的颜色空间

    这篇文章主要介绍了OpenCV实战之OpenCV中的颜色空间,解计算机视觉中常用的色彩空间,并将其用于基于颜色分割。我们还将用C ++和Python共享演示代码,下文详细内容需要的小伙伴可以参考一下

  7. 如何用JavaScript学习算法复杂度

    这篇文章主要介绍了如何用JavaScript学习算法复杂度,对算法感兴趣的同学,一定要看一下

  8. Python 全局空间和局部空间

    这篇文章主要介绍了Python 全局空间和局部空间,命名空间的概念的提出是为了划分和控制变量是否可见,以及生存周期的长短;命名空间的作用范围叫做作用域更多详细内容需要的小伙伴可以参考一下

  9. JavaScrip String对象的方法

    这篇文章主要为大家介绍了String对象的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助

  10. JavaScrip关于创建常量的知识点

    这篇文章主要介绍了JavaScrip创建常量的相关知识点,帮助大家对JS更加深入的学习,参考下吧。

随机推荐

  1. js中‘!.’是什么意思

  2. Vue如何指定不编译的文件夹和favicon.ico

    这篇文章主要介绍了Vue如何指定不编译的文件夹和favicon.ico,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

  3. 基于JavaScript编写一个图片转PDF转换器

    本文为大家介绍了一个简单的 JavaScript 项目,可以将图片转换为 PDF 文件。你可以从本地选择任何一张图片,只需点击一下即可将其转换为 PDF 文件,感兴趣的可以动手尝试一下

  4. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  5. AngularJs上传前预览图片的实例代码

    使用AngularJs进行开发,在项目中,经常会遇到上传图片后,需在一旁预览图片内容,怎么实现这样的功能呢?今天小编给大家分享AugularJs上传前预览图片的实现代码,需要的朋友参考下吧

  6. JavaScript面向对象编程入门教程

    这篇文章主要介绍了JavaScript面向对象编程的相关概念,例如类、对象、属性、方法等面向对象的术语,并以实例讲解各种术语的使用,非常好的一篇面向对象入门教程,其它语言也可以参考哦

  7. jQuery中的通配符选择器使用总结

    通配符在控制input标签时相当好用,这里简单进行了jQuery中的通配符选择器使用总结,需要的朋友可以参考下

  8. javascript 动态调整图片尺寸实现代码

    在自己的网站上更新文章时一个比较常见的问题是:文章插图太宽,使整个网页都变形了。如果对每个插图都先进行缩放再插入的话,太麻烦了。

  9. jquery ajaxfileupload异步上传插件

    这篇文章主要为大家详细介绍了jquery ajaxfileupload异步上传插件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  10. React学习之受控组件与数据共享实例分析

    这篇文章主要介绍了React学习之受控组件与数据共享,结合实例形式分析了React受控组件与组件间数据共享相关原理与使用技巧,需要的朋友可以参考下

返回
顶部