小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
前言:
可能是自己数学不好,对于各种运算啊多少怀有抵触,但是终究是逃不过的,想要写出简洁、便于维护的代码,算法是逃不过的,这感觉就像,自己没事自创武功和某天突然来了本武功秘籍但是需要大量时间去修炼的武功对比一样,只能硬着头皮上,狭路相逢勇者胜~!淦!
1.大o表示法:
从《算法图解》中得知,大O表示法是一种特殊的表示方法,指出了算法的速度有多快。能够比较操作数,指出了算法运行时间的增速。
- 算法的运行时间不是以秒为单位的。
- 算法的运行时间是从
增速
的角度度量的。 - 算法的运行时间用大O表示法表示。
2.时间复杂度:
时间复杂度是用来定性
的描述算法那的运行时间的。(就和上面提到的一样,不会具体到秒,只是描述大概的运行趋势)
下面是几种常见的时间复杂度的图:
2.1 时间复杂度O(1):
let a = 996;
a +=1;
- 每次执行代码的时候,上面的两行代码只会被执行一次,所以时间复杂度为O(1)
2.2 时间复杂度为O(n):
for(let i=0;i < n; i++){
console.log(n)
}
- 上面代码是一个简单的循环,
for循环
中的代码被执行了n
次时间复杂度为O(n)
;
2.3 时间复杂度O(n^2):
for(let i=0;i < n; i++){
for(let j=0;j < n; j++){
console.log(i,j);
}
}
- 两层for循环,也就是循环中套循环的
2.4 时间复杂度为O(logN):
logN
是啥意思呢?
等同于问2
的多少次方为N
?
let i = 1;
while(i < N){
console.log(i);
i *= 2;
}
- 上述代码是
while
循环,就是一个数不断地乘以2
,直到这个结果大于N
,循环停止,代码执行了logN
次
3.空间复杂度:
和时间复杂度类似,空间复杂度也是用大O表示法来表示的。
空间复杂度:算法在运行过程中,临时占用存储空间
大小的量度。
3.1 空间复杂度 O(1):
例子同上略
3.2空间复杂度 O(n):
let arr = [];
for(let i = 0; i < 0; i+=1){
arr.push(i);
}
- 占用了
n
个内存单元,所以这段代码的空间复杂度为O(n)
;
3.3空间复杂度 O(n^2):
let square=[];
for(let i=0;i < n; i++){
square.push([]);
for(let j=0;j < n; j++){
square[i].push(j)
}
}
- 二位数组,就是一个矩阵(行列)