算法-复杂度分析

91 阅读1分钟

算法复杂度分析

1、时间复杂度的由来

用来计算一段代码的执行时间

2、大O时间复杂度表示法

  • 只表示数据规模n很大时候的执行效率。
  • 忽略低阶、常量、系数只保留高阶的部分。
  • 表示执行时间随数据规模的增长趋势,而不是执行时间。

3、常见时间复杂度量级

  1. O(1)常量级 哈希表上的操作。
  2. O(logn)对数级 二分查找、跳表等操作。
  3. O(n)线性 数组和链表的遍历、二叉树的遍历。
  4. O(nlogn) 快速排序、归并排序。
  5. O(n^2) 冒泡插入。
  6. O(2^n)指数级 斐波那契数列。
  7. O(n!)比较少见 求空排列。

分析一段代码的复杂度时应该从三种情况:

  • 最好的情况
  • 最差的情况
  • 平均情况

还有一种不常见的均摊复杂度,对某个数据结构进行一组连续操作大部分时间都很地,个别情况下比较高,我们可以将这一组操作放在一块分析,看能否将耗时多的操作均摊到耗时少的操作上。常见的就是支持动态的拓容的数据结构。一般情况下均摊等于最好的复杂度。

4、空间复杂度分析

  • 分析最高的内存占用空间
  • 时间复杂度是累计