【问题标题】:Algorithm Performance Explanation Ex: O(n) [duplicate]算法性能说明 Ex:O(n) [重复]
【发布时间】:2011-01-23 20:12:55
【问题描述】:

可能重复:
Plain English explanation of Big O

亲爱的,

在阅读一些算法的信息时,偶尔会遇到算法性能信息,如:O(1)、O(n)、O(n^2)等。

能否请我解释一下如何翻译和理解这些性能数据?有哪些 O(n) 变体可用,它们在实践中意味着什么?

谢谢。

【问题讨论】:

标签: algorithm performance


【解决方案1】:

你需要一个大 O 表示法的解释。

它是衡量算法复杂性的指标。随着 N 趋于无穷大,时间量的方向。

您需要注意的一件事是 O(N) 乘以一个常数仍然是 O(N)。没有真正的 O(2N) 这样的东西。

O(1) 表示某事需要一个恒定的时间,即它所花费的时间与您正在处理的数据量无关。

O(N) 表示它与您正在处理的数据量成正比,因此如果处理一百万条记录需要一分钟,则处理 200 万条记录需要 2 分钟。

O(N^2) 表示它与 N 的平方成正比。1000 条记录需要一分钟,2000 条需要 4 分钟,4000 条需要 16 分钟,以此类推。

你也可以有 O(log N) 和 O(N log N)。您可以使用任何日志基数,但一个通常以日志基数 2 衡量。因此,一百万条记录将测量为 20,因为 2^20 接近一百万,而 200 万条记录将是 21。对于 N log N,一千条记录将等于 10,000,因为 1000 的日志大约是 10。2000 条记录将是 22,000,因为 2000 的日志大约是 11。

【讨论】:

  • 感谢 CashCow 的回答。我也会检查维基百科的 Big-O 表示法。
  • @Bunkai:这很好,但不是完全正确。 O(1) 并不意味着花费恒定的时间。这意味着时间有一个恒定的上限 - 无论如何都不会超过一定的时间。它总是被允许少吃。其他人也有同样的想法。
  • @Bunkai:另一种思考方式:绘制曲线:1、N、N^2、logN 或 NlogN。假设您可以将运行时间除以您喜欢的任何常数,那么您的运行时间适合所有 N 的哪条曲线?
  • 请注意,日志可以是任何基数,因为更改基数与乘以常数相同。
  • 人们还必须明白,添加一个常量并不会改变复杂性,因此添加更多记录可能不会像您想象的那样增加,特别是对于少量数据较高复杂度的算法可以比低复杂度的算法更快。例如在 4 条记录中使用线性搜索可以比二分搜索更快。
【解决方案2】:

从维基百科开始:http://en.wikipedia.org/wiki/Big-o_notation

【讨论】:

  • 大声笑 - 我直接在我的评论中放了同样的东西 :)
  • 嗨,迈克尔,谢谢。我会查维基百科。保重。
猜你喜欢
  • 2023-01-09
  • 1970-01-01
  • 2017-10-28
  • 2017-06-14
  • 2015-07-18
  • 1970-01-01
  • 1970-01-01
  • 2018-08-08
  • 2017-07-31
相关资源
最近更新 更多