数据结构与算法笔记(一)时间空间复杂度分析

时间复杂度分析

要点

  • 只关注循环执行次数最多的一段代码
  • 总复杂度等于量级最大的那段代码
  • 嵌套代码的复杂度等于嵌套内外代码复杂度的乘积

复杂度量级

多项式量级

  • 常量阶O(1)
  • 对数阶O(logn)
  • 线性阶O(n)
  • 线性对数阶O(nlogn)
  • 平方阶O(n^2)
  • 立方阶O(n^3)

非多项式量级 //当数据规模急剧增大,求解时间会无限延长。

  • 指数阶O(2^n)
  • 阶乘阶O(n!)

常见多项式复杂度

O(1)

int i = 8;
int j = 6;
int sum = i + j;

O(logn)

int i = 1;
    while (i < n) {
        i = i * 2; //执行了log2N次
    }

O(nlogn)

 int i = 1;
        for (int i = 1; i < n; i++) {
            while (i < n) {
                i = i * 2; //执行了log2N次
            }
        }

O(m+n)

 int cal(int m, int n) {
        int sum_1 = 0;  //代码的复杂度由两个数据规模来决定,不能忽略其中任何一个数据。
        int i = 1;
        for (; i < m; i++) {
            sum_1 = sum_1 + i;
        }
        int sum_2 = 0;
        int k = 1;
        for (; k < m; i++) {
            sum_1 = sum_1 + i;
        }
    }

O(m*n)

  int cal(int m, int n) {
    int sum_1 = 0;
    int i = 1;
    int sum_2 = 0;
    int k = 1;
    for (; i < m; i++) {
        sum_1 = sum_1 + i;
        for (; k < m; i++) {
            sum_2 = sum_2 + i;
        }
    }
}

你可能感兴趣的:(数据结构与算法)