计算算法的时间复杂度,通常说的是算法的渐进增长时间复杂度,也就是随着数据的变大,该算法所需要的时间是如何增长的。
推导时间复杂度的原则
- 用常数1取代运行事件中的所有加法常数。
- 在修改后的运行次数函数中,只保留最高阶数
- 如果最高阶项存在且不是1,则去除这个项相乘的常数。
有以下常见的时间复杂度。
1.常数阶
时间复杂度为O(1)
表示计算量不会随着数据的增长而增长
var i = 0;
console.log(i);
2.线性阶
时间复杂度为O(n)
表示计算量随着数据的增长而线性增长,增长量与数据增长几乎相同
for(let i=0;i<n;i++){
//时间复杂度为O(1)的运算
}
3.平方阶
时间复杂度为O(n^2)
表示计算量随着数据的增长而成平方增长
for(let i=0;i<n;i++){
for(let j=0;j<n;j++{
//时间复杂度为O(1)的运算
}
}
4.对数阶
时间复杂度为O(logn)
表示随着数据n的线性递增,计算的递增是成次方递增;比如数据n每次加一,而计算的递增每次以二的次方增加,那么时间复杂度就会介于O(1)和O(n)之间
for(let i=1;i<n;i*=2){
//时间复杂度为O(1)的运算
}
这里i
第一次是2(2的1次方),第二次是2*2
(2的2次方),第三次是4*2
(2的3次方),可以看出每次增加的都是二的指数,那么假设时间复杂度为x,那么就能得出2^x=n;x=log2n;
网友评论