(二)时间/空间复杂度计算

240 阅读1分钟

时间复杂度是什么?

一个函数,用大O表示,常见的有:O(1)O(n)O(logN)...

定性(大概的运行时间的趋势)的描述该算法的运行时间。

  • 常见的时间复杂度

1log2nn image.png

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)
    }
}

结语

希望本文对你有一点点帮助,另外,求个赞,谢谢! ^_^