数据结构与算法(复杂度)

98 阅读1分钟

复杂度

定义

复杂度又称渐进复杂度,包括时间复杂度和空间复杂度。

复杂度用来分析算法执行时间或占用空间随数据规模的增长关系

越高阶的复杂度算法,执行效率越低。

用途,为什么用?

  • 借助复杂度分析,有利于编写性能更优的代码,降低成本
  • 复杂度分析不依赖执行环境,成本低,效率高,易操作,指导性强,是一套理论方法

时间复杂度

  • 表示算法的执行时间与数据规模之间的增长关系

空间复杂度

  • 表示算法的存储空间与数据规模之间的增长关系

使用

常见复杂度表达式

  • 从低到高:O(1) -> O(logn) -> O(n) -> O(nlogn) -> O(2n)

时间复杂度分析

  • 大O复杂度表示法:T(n) = O(f(n)),公式中的O,表示代码的执行时间 T(n) 与 f(n) 表达式成正比

只关注循环执行次数最多的一段代码

总复杂度等于量级最大的那段代码的复杂度

嵌套代码的复杂度等于嵌套内外代码复杂度的乘积

  • 平均时间复杂度:代码在所有情况下执行的次数的加权平均值
  • 均摊时间复杂度:极少数高级别复杂度且发生具有时序关系时,可将这几个高级别的复杂度均摊到低级别复杂度上,正常情况下均摊结果==低级别复杂度

空间复杂度分析

与时间复杂度分析类似,关注算法的存储空间与数据规模之间的增长关系