时间复杂度与空间复杂度

568 阅读1分钟

时间复杂度

从小到大依次排列

O(1) < O(1og n) < O(n) < O(nlog n) < O(n2) < O(n3) < ...

时间复杂度为 O(1)的例子

let a = 1; 
result = 3 + 4; 
result = n * 2
result = 10000 * 10000
array.push(12)
array.pop()
map.set(1,2)

在计算复杂度时 一般会将复杂度为1的进行忽略

时间复杂度为 O(n)的例子

for 循环/while 循环(不使用二分搜索)

let a = 0;
for (let i = 0; i < n; i++) {
    a+=i
}

多个O(n)时间复杂度也为O(n)
let a = 0;
for (let i = 0; i < n; i++) {
    a+=i
}

let b = 0;
for (let i = 0; i < n; i++) {
    b+=i
}

下面这种情况也是O(n), 因为j 不是从0或者已知常量开始的
while (i < n) {
    i++; j = i;
    while(j < n) {
        i++
    }
}

复杂度计算(取值标准) 取最大的那个

1、n3 + n2 + n 时间复杂度是 n3 2、2n2 + 3n + 6 时间复杂度是 n2

空间复杂度

空间复杂度为O(1)的例子

let a = 1
const b = 2

空间复杂度为O(n)的例子

1、定义一个长度为n的数组 2、定义一个长度为n的set map 3、用for循环生成一个链表

空间复杂度为O(n2)的例子

1、二维数组 2、一维数组每个元素放一个长度为n的set 或者 map

log n 二分查找(搜索)

nlog n 数组自带的排序 array.sort()