第一模块:课程介绍
课程名称:JavaScript版数据结构与算法 轻松解决前端算法面试
课程章节:2-1 时间复杂度计算
主讲老师:lewis
第二模块:课程内容
知道什么是时间复杂度,学会对时间复杂度进行计算。
第三模块:课程收获
1。时间复杂度是什么?
一个函数,用大O表示,比如O(1)、O(n)、O(logN)…
定性描述该算法的运行时间
定性说明不是描述具体多少秒,而且一个大概的时间趋势,也就是用上面说的那个函数来表示的。
下面的图片就列举了常见的时间复杂度
几个时间复杂度的说明:
- O(1)
下面这个代码,只会执行一次,所以是O(1)
cost a = 0;
a = a + 1;
- O(n)
也就是常见的for循环
for(let i = 0; i < nums.length; i++){
}
- O(logN)
其实就是以2为底的函数,2的多少次方为null
let i = 1;
while(i < n){
//O(1)的程序步骤
i *= 2;
}
因为i每次在乘以2之后和n的差会变得更小,也就是说,在经过n次循环之后,i会大于n然后结束循环,也就是说2的i次方等于n,也就是n = long2n,所以这个循环的复杂度就是O(logN)
举个例子:
以前学的二分法查找
二分法查找一定有一种情况的时间复杂度为log n
因为在最好的情况下,二分法查找的时间复杂度为O(1)也就是一下子就找到了,最复杂的情况,就是O(logN),也就是最坏的情况
- 时间复杂度计算
加法:O(1) + O(n) = O(1)
代码示例:像下面的代码的时间复杂度还是O(1)
cost a = 0;
a = a + 1;
for(let i = 0; i < nums.length; i++){
}
乘法:O(n) * O(n) = O(n^2)
for(let i = 0; i < nums.length; i++){
for(let j = i + 1; j < nums.length; j++){
}
}