时间复杂度是什么?
一个函数,用大O表示,常见的有:O(1)、O(n)、O(logN)...
定性(大概的运行时间的趋势)的描述该算法的运行时间。
- 常见的时间复杂度
1、log2n、n、n²
O(1)
代码只被执行了一次。
let i = 0
i += 1
O(n)
代码执行了n次。
for (let i = 0; i < n; i +=1) {
console.log(i)
}
先后排列的时间复杂度,相加,并且取 趋势更快的时间复杂度。
O(1) + O(n) = O(n)
let j = 0
j += 1
for (let i = 0; i < n; i +=1) {
console.log(i)
}
O(n^2)
O(n) * O(n) = O(n^2)
for(let i = 0; i< n; i += 1) {
for(let j = 0; j < n; j += 1) {
console.log(i, j)
}
}
O(logN)
2 ^ x = N; x = log2N。
执行了log2N次。由于时间复杂度需要去掉常数和系数,而log的底数跟系数是一样的,所以也需要去掉,所以最后这个正确的时间复杂度就是 O(logN)
let i = 1
while (i < n) {
console.log(i)
i * =2
}
空间复杂度是什么?
一个函数,用大O表示,常见的有:O(1)、O(n)、O(N^2)...
算法在运行过程中临时占用内存大小的度量。
O(1)
不会导致额外的空间增长。
let i = 0
i += 1
O(n)
占用了n个内存单元。
const list = []
for(let i = 0; i < n; i += 1) {
list.push(i)
}
O(n^2)
矩阵(行、列)。
二维数组,存储了n^2个变量。
const matrix = []
for(let i = 0; i < n; i += 1) {
matrix.push([])
for(let j = 0; j < n; j += 1) {
matrix[i].push(j)
}
}
结语
希望本文对你有一点点帮助,另外,求个赞,谢谢! ^_^