【问题标题】:Why is Big-Oh notation useful when it's so easy to find a technically correct Big-Oh of most algorithms?为什么在大多数算法中很容易找到技术上正确的 Big-Oh 符号时 Big-Oh 表示法很有用?
【发布时间】:2013-09-30 07:29:38
【问题描述】:

我的理解是,如果一个算法是O(1),那么它也是O(n)O(n^2)O(n^3)等等,这使它看起来毫无用处。例如,如果有人问我任何算法的 Big-Oh 表示法,我可以直接说 O(n^n) 而无需考虑(字面意思)并且大部分时间在技术上是正确的。

既然(我的理解是)这是真的,那么这些有用的信息如何?打个比方,如果我问某人他们拥有多少房子,“1 到无穷大”之类的答案并不能提供很多信息。一个有用的答案(这有点像 Big-Theta)是“1”。

【问题讨论】:

  • Big-O 与“最多”这个短语一样有用。这句话显然可能没用:“我最多拥有数不胜数的房子”。这会使短语本身无用吗?
  • @j_random_hacker 不,它没有,我可能会添加很好的解释。但是当你要求某人量化某事时,他们通常不会用“最多”这个短语来回答。通常他们会说“大约”或“周围”。但在计算机科学中,我们似乎通常说“至多”。似乎当计算机科学家知道“关于”或“周围”时,他们会回答“至多”。这让我很困惑。
  • 我喜欢 John Kugelman 的评论——基本上 Big-O 刚刚变得流行 :) 我想有足够多的程序员了解它的要点,通常最有趣的上限是最低的,所以这就是“XYZ的 Big-O”获得的意义。此外(正如他所说)虽然 Big-Theta 信息量更大,但通常更难获得。至于为什么我们有 Big-Anything-At-All,这是因为我们希望以一种不依赖于您的计算机使用的特定指令集的方式来测量时间或空间。

标签: algorithm computer-science big-o big-theta


【解决方案1】:

Big-O 建立一个上限。如果您知道一个算法是 O(n2),那么您就知道它的复杂度最坏情况是二次的。它实际上可能是 O(n) 或 O(1),但绝对不是 O(n3)。找出算法运行时的上限非常有用。

您的问题是正确的,“这个算法的 Big-O 是什么?”措辞不好。 “那个”这个词是不正确的。没有一个算法的大 O。有许多。无穷多。 Big-O 没有建立严格的上限。这就是 Big-Theta 的用武之地。Big-Theta 断言了一个上限和下限:它给出了一个精确的渐近界。问题应该是,“这个算法的 Big-Theta 是多少?”

但重要的是不要抛弃 Big-O,因为并非所有算法都具有已知的确切界限。 Matrix multiplication 是一个众所周知的问题,它没有确定的 Big-Theta。朴素算法是 O(n3),而最先进的算法是 O(n2.3727)。这是一个上限,但可能不是(最佳)上限。 Big-Theta 介于 O(n2.3727) 和 Ω(n2) 之间。

【讨论】:

  • 他们为什么不创建一个新的希腊字母符号来表示“已知的最低上限”?这样我就不能像我在问题中那样“作弊”。
  • 通常正确的问题是“XYZ 的 Big-Theta 是多少?”而不是“什么是Big-O?”但是,糊状、病态的 Big-Theta 并不像橄榄球队“Big-O”的队长先生那样受欢迎。
  • @tieTYT:我猜是因为随着更好的算法(或对现有算法的更好分析)的发现,已知的最低上限会随着时间的推移而改变。如果数学符号的含义始终相同,则无论您何时阅读它,数学符号都是最有用的。
【解决方案2】:

这是一个 letter by Donald Knuth,用于向美国数学会提出 O 表示法

【讨论】:

    【解决方案3】:

    说任何算法都是 O(n^n) 是不正确的,因为 big-Oh 指的是严格的上限。我们也不是说算法是 O(n^n),而是算法的时间复杂度是 O(n^n)。

    我希望这能澄清一些事情。

    【讨论】:

    • 你能告诉我一个可靠的参考资料,说 big-Oh 是一个严格的上限吗?
    • Big-Oh 是正式定义的渐近上界;即,对于某个常数 c,0 f(n) in O(g(n))。我想你是对的,这可能会导致宽松的上限,但在实践中 big-Oh 总是指严格的上限。否则,该符号将没有多大用处(事实并非如此。)
    猜你喜欢
    • 2019-02-15
    • 2014-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多