一、数据结构之"时间空间复杂度"

148 阅读2分钟

1.什么是时间复杂度?

  • 简单来说,时间复杂度就是一个函数
  • 与其他函数不同它是用大写 O 来表示
  • 如: O(1)、O(n)、O(logN)...
  • 是用来定性描述该算法的运行时间

image.png

  1. 以2为底的log2n > 1
  2. n 又比 log2n 大
  3. n2 (n的2次方) 大于(>) n

1.O(1)的时间复杂度

  • 为什么 这两行代码时间复杂度为O(1)呢?
  • 因为这两行代码每次只会执行一次
let a = 0
a += 1

2.时间复杂度O(n)

  • for循环它执行了n次,n增大,它也会跟着增大
for(let i = 0; i < n; i+=1) {
    console.log(i)
}

3.时间复杂度计算 O(1) + O(n) = O(n)

  • 如果先后排列那么就相加
  • O(n) 足够大的时候O(1)可以忽略不计
1. o(1)
let i = 1
i += 1

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

4. O(n) * O(n) = O(n^2) // n^2 n的2次方

  • 相乘的时候按照正常的乘法来计算 就是n的2次方
for(let i = 0; i < n; i += 1){
    for(let j = 0; j < n; j += 1){
        console.log(i, j);
    }
}

5.O(logN)

  • log函数就是来求 2的多少次方为n
let i = 1;
while(i < n) {
    console.log(i);
    i *= 2;
}

2. 什么是空间复杂度

  • 也是一个函数 大写O来表示
  • 如: O(1), O(n), O(n^2)
  • 功能: 算法在运行过程中;临时占用存储空间大小的度量,计算代码的占据的空间大小

1. O(1)

  • 只声明了单个变量
  • 单个变量所占的内存永远是1
let i = 0
i += 1

2. O(n)

  • 在数组里添加了n个值
  • 相当于占用了n个内存单元
const list =[]
for(let i = 0; i < n; i += 1){
    list.push(i)
}

3.O(n^2)

  • O(n^2) 其实就是一个矩阵
  • 矩阵: 行 列
  • 本质: 是一个二维数组
  • 嵌套了两层数组,存储了2的n次方个变量
const list =[]
for(let i = 0; i < n; i += 1){
    list.push([]);
    for(let j = 0; j < n; j += 1){
        list[i].push(j);
    }
}