算法复杂度

146 阅读1分钟

时间复杂度

用来描述算法运行的时间。常用大写O表示。类似数学上的无穷

常见的时间复杂度量: O(1),O(n),O(logN),O(nlogN),O(n^2),O(n^3)

const arr = [1,2,3]
console.log(arr[1])

这段代码永远只执行一次,所以时间复杂度为O(1)

for(let i = 0;i < n;i += 1){
console.log(i)
}

这段代码执行了n次,时间复杂度为O(n)

俩者结合 O(1) + O(n) = O(n),n足够大的时候1可以忽略不计

for(let i = 0;i < n;i += 1){
  for(let j = 0;j < n;j += 1){
     console.log(i,j)
  }
}

双重for循环 O(n) * O(n) = O(n^2)

let i = 1
while(i < n){
log(i)
i *= 2
}

这就是不断的求,2^1,2^2....2^n,时间复杂度为O(logN)

空间复杂度

用来描述算法运行所需要的存储空间,用大写O表示

常见的空间复杂度量: O(1),O(n),O(n^2)...

let a = 1
a += 1

只占一个变量空间,空间复杂度为O(1)

const arr = []
for(let i = 0;i < n;i += 1){
arr.push(i)
}

所占存储空间为n,空间复杂度为O(n)

const arr = [];
for(let i = 0; i < n; i += 1){
arr.push([])
for(let j = 0; j < n; j += 1){
    arr[i].push(j)
}
}

O(n^2) 就是二维数组