时间复杂度是什么?
- 一个函数,用大O表示,比如O(1)、O(n)、O(logN) …
- 定性描述该算法的运行时间
- O(1)
let i = 0;
i += 1;
}
- O(n)
for (let i = 0; i < n; i += 1) {
console.log(i);
- 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)
let i = 1;
while (i < n) {
console.log(i);
i *= 2;
}
a^x =N,x=logaN。x即i不小于n时的运行次数,这里 运行一行为time,则:
- 第1行:time
- 第2-4行:logN*time *3
- 则fn = (3logN+1),N无穷大时,O(logN)
空间复杂度
- 一个函数,用大O表示,比如O(1)、O(n)、O(logN) …
- 算法在运行过程中临时占用存储空间大小的度量
- 固定部分:代码占用的空间,定义的变量所占据的空间。
- 可变部分:动态分配的空间,递归栈所需的空间。
- O(1)
let i = 0;
i += 1
- O(n)
const list = []
for (let i = 0; i < n; i+= 1) {
list.push(i);
}
- O(n^2)
const matrix = [];
for (let i =0; i < n; i += i) {
matrix.push([]);
for (let j = 0; j < n; j += 1) {
matrix[i].push(j)
}
}