奋斗小羊的成长点滴 Java Coder 耶稣爱你,上帝祝福你

时间复杂度和空间复杂度


时间复杂度和空间复杂度

作用:粗略地估计算法的执行效率的方法

时间复杂度

规律:所有代码的执行时间 T(n) 与每行代码的执行次数 n 成正比。

公式:T(n) = O(f(n))

其中T(n)代码执行的时间;n表示数据规模的大小;f(n)表示每行代码执行次数的总和;

时间复杂度: 表示代码执行时间随数据规模增长的变化趋势。时间复杂度实际上并不具体表示代码真正的执行时间。

分析时间复杂度的方法:

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

复杂的度量级:

多项式量级

  • 常量阶 O(1) 一般情况下,只要算法中不存在循环语句、递归语句。
  • 对数阶 O(logn)
  • 线性阶 O(n)
  • 线性对数阶 O(nlogn)
  • 平方阶 O(n^2),立方阶 O(n^3), K次方阶O(n^k)

非多项式量级

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

时间复杂度四个维度

  • 最好情况时间复杂度(best case time complexity) 在最理想的情况下,执行这段代码的时间复杂度
  • 最坏情况时间复杂度(worst case time complexity) 最糟糕的情况下,执行这段代码的时间复杂度
  • 平均情况时间复杂度(average case time complexity) 加权平均时间复杂度
  • 均摊时间复杂度(amortized time complexity) 均摊时间复杂度就是一种特殊的平均时间复杂度

    空间复杂度

    空间复杂度全称就是渐进空间复杂度asymptotic space complexity),表示算法的存储空间与数据规模之间的增长关系。


下一篇 数组

目录