算法 -- 时间复杂度

大O阶的三种规则:

  1. 用常量1取代运行时间中的所有加法常数
  2. 只保留最高阶项
  3. 去除最高阶的常数
  • 常数阶
let sum = 0, n = 10; // 语句执行一次 
let sum = (1+n)*n/2; // 语句执行一次 
console.log(`The sum is : ${sum}`) //语句执行一次 

这段代码的执行次数为3,套用规则1,则这个算法的时间复杂度为O(1),也就是常阶数。

  • 线性段
let i =0; // 语句执行一次 
while (i < n) { // 语句执行n次 
  console.log(`Current i is ${i}`); //语句执行n次
  i++; // 语句执行n次
}

这段代码总共执行了 3n+1 次,因此该算法的时间复杂度是O(n)。

  • 对阶性
let number = 1; // 语句执行一次 
while (number < n) { // 语句执行logn次
  number *= 2; // 语句执行logn次
}

上面的算法中,number每次都放大两倍,我们假设这个循环体执行了m次,那么2^m = nm = logn,所以整段代码执行次数为1 + 2*logn,则f(n) = logn,时间复杂度为O(logn)。

  • 平方阶
for (let i = 0; i < n; i++) { // 语句执行n次 
  for (let j = 0; j < n; j++) { // 语句执行n^2次 
     console.log('I am here!'); // 语句执行n^2
  }
}

上面的嵌套循环中,代码共执行 2*n^2 + n,则f(n) = n^2。所以该算法的时间复杂度为O(n^2 )

常用时间复杂度比较

O(1)<O(logn)<O(n)<O(nlogn)<O(n²)<O(n³)<O(2ⁿ)<O(n!)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值