JS【详解】时间复杂度

时间复杂度是从时间维度描述一段代码的复杂程度,由一段代码中执行频次最高的语句决定,用大O符号表述。

时间复杂度的分类

从低到高依次是:

  • 常数时间复杂度 O(1):无论问题规模如何变化,算法的运行时间都保持不变。

  • 线性时间复杂度 O(n):当输入规模n线性增加时,算法的运行时间呈现出线性增长趋势。

  • 对数时间复杂度 O(log n):当输入规模n呈指数增长时,算法的运行时间呈对数增长趋势。

  • 平方时间复杂度 O(n^2):当输入规模n线性增加时,算法的运行时间呈现出平方增长趋势。

  • 立方时间复杂度O(n^3):当输入规模n线性增加时,算法的运行时间呈现出立方增长趋势。

  • 指数时间复杂度 O(2^n):当问题规模成指数增长时,算法的运行时间将会急剧增加

O(1)

O(1) 不是说只执行1次,而是对常量级时间复杂度的一种表示法。一般情况下,只要算法里没有循环和递归,就算有上万行代码,时间复杂度也是O(1)

js 复制代码
(function () {
  console.log("你好");
})();
js 复制代码
// 时间复杂度还是 O(1)
(function () {
  console.log("你好");
  console.log("你好");
})();

O(n)

只有一层循环或者递归等,时间复杂度就是 O(n)

js 复制代码
function test(n) {
  for (let i = 0; i < n; i++) {
    console.log(i);
  }
}

O(n^2)

嵌套循环的时间复杂度就是 O(n^2)

js 复制代码
function test(n) {
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
      console.log(i, j);
    }
  }
}

多种复杂度并列在一起时,只取执行次数最高的语句,即取最高项

js 复制代码
// 最终的时间复杂度以高的为准,是 O(n^2)
function test(n) {
  //   单循环的时间复杂度是 O(n)
  for (let i = 0; i < n; i++) {
    console.log(i);
  }
  //   嵌套循环的时间复杂度是 O(n^2)
  for (let i = 0; i < n; i++) {
    for (let j = 0; j < n; j++) {
      console.log(i, j);
    }
  }
}

O(logn)

二分法的时间复杂度是 O(logn),以下两种情况都是。

js 复制代码
function test(n) {
  while (n > 1) {
    n = n / 2;
    console.log(n);
  }
}
js 复制代码
function test(n) {
  for (let i = 1; i < n; i = i * 2) {
    console.log(i);
  }
}

O(nlogn)

二分嵌套一个单循环,即时间复杂度O(nlogn)

js 复制代码
function test(n) {
  for (let i = 1; i < n; i = i * 2) {
    for (let j = 0; j < n; j++) {
      console.log(i, j);
    }
  }
}
相关推荐
你的人类朋友1 小时前
【Node】认识multer库
前端·javascript·后端
可触的未来,发芽的智生3 小时前
新奇特:黑猫警长的纳米世界,忆阻器与神经网络的智慧
javascript·人工智能·python·神经网络·架构
前端开发爱好者3 小时前
尤雨溪官宣:"新玩具" 比 Prettier 快 45 倍!
前端·javascript·vue.js
欧阳呀4 小时前
Vue+element ui导入组件封装——超级优雅版
前端·javascript·vue.js·elementui
天***88965 小时前
js封装一个双精度算法实现
开发语言·前端·javascript
胡斌附体5 小时前
使用Electron创建helloworld程序
前端·javascript·electron·nodejs·pc
toobeloong5 小时前
Electron 从低版本升级到高版本 - webview通信的改造
前端·javascript·electron
im_AMBER5 小时前
React 01
前端·javascript·笔记·react.js·前端框架·web
@大迁世界5 小时前
React 19.2.0 有哪些新变化
前端·javascript·react.js·前端框架·ecmascript