时间复杂度你真的了解吗?

161 阅读3分钟

分析&回答

现在的你编程的时候还关心时间复杂度吗?

  • 关心:说明你很牛,因为你把算法和数据结构牢记于心,你有成为架构师的潜质。
  • 不关心:说明你很正确,现在 CPU 的高性能之下你无需关心,基于开发成本的角度你是对的。但是当你应对数以亿计的数据,你又要做到毫秒级操作,那么理解时间复杂度至关重要。

时间复杂度的理解

  1. 时间复杂度用来检验某个算法处理一定量的数据要花多长时间。
  2. O(x)这个表示法用一个函数来描述算法处理给定的数据需要多少次运算
  3. 重要的不是数据量,而是当数据量增加时运算如何增加

下面是某研究者基于对数尺建图和结论: image.png

  • 绿:O(1)或者叫常数阶复杂度,保持为常数。
  • 红:O(log(n))对数阶复杂度,即使在十亿级数据量时也很低。
  • 粉:最糟糕的复杂度是 O(n^2),平方阶复杂度,运算数快速膨胀。
  • 黑和蓝:另外两种复杂度(的运算数也是)快速增长。

关于 O(1) vs O(n^2)

面对数据量低时,O(1) 和 O(n^2)的区别可以忽略不计。比如,你有个算法要处理2000条元素。

  • O(1) 算法会消耗 1 次运算
  • O(log(n)) 算法会消耗 7 次运算
  • O(n) 算法会消耗 2000 次运算
  • O(n*log(n)) 算法会消耗 14,000 次运算
  • O(n^2) 算法会消耗 4,000,000 次运算

O(1) 和 O(n^2) 的区别似乎很大(4百万),但当今处理器每秒可处理上亿次的运算,所以你最多损失 2 毫秒,只是一眨眼的功夫。。这就是为什么性能和优化在很多IT项目中不是问题。

面临海量数据时,了解时间复杂度依然很重要。如果这一次算法需要处理 1,000,000 条元素(当然这个数据也不算大)。

  • O(1) 算法会消耗 1 次运算
  • O(log(n)) 算法会消耗 14 次运算
  • O(n) 算法会消耗 1,000,000 次运算
  • O(n*log(n)) 算法会消耗 14,000,000 次运算
  • O(n^2) 算法会消耗 1,000,000,000,000 次运算 在一个不算大数据的运算下需要一万亿次,如果用O(n^2) 算法且再给计算元素加两个0,是不是要 芭比 Q了。

反思&扩展

知道上面的结果你就知道算法的重要性了,是不是有兴趣看看


喵呜面试助手: 一站式解决面试问题,你可以搜索微信小程序 [喵呜面试助手] 或关注 [喵呜刷题] -> 面试助手 免费刷题。如有好的面试知识或技巧期待您的共享!