为什么Big-Oh符号很有用,因为很容易找到技术上正确的Big-Oh大多数算法?

Dan*_*lan 2 algorithm big-o computer-science big-theta

我的理解是,如果一个算法是O(1)它也是O(n),O(n^2),O(n^3)等这使得它显得有些苍白无力.例如,如果有人问我任何算法的Big-Oh表示法,我可以在O(n^n)不考虑它的情况下(字面意思)说,并且在大多数情况下在技术上是正确的.

既然(这是我的理解)这是真的,这有用的信息怎么样?使用类比,如果我问某人他们拥有多少房子,那么"1到无限"这样的答案就不是很有用.一个有用的答案(这有点像Big-Theta)将是"1".

Joh*_*ica 7

Big-O建立一个上限.如果您知道算法是O(n 2),那么您就知道它的复杂性是最差的二次方.它实际上可能是O(n)或O(1)但它绝对不是O(n 3).找出算法的运行时上限是非常有用的.

问题是"这个算法的大O是什么?"这是正确的.措辞不好."the"这个词不正确.算法中没有一个Big-O.有许多.无限多.Big-O没有建立一个紧张的上限.这就是Big-Theta的用武之地.Big-Theta断言了上限和下限:它给出了一个精确的渐近界.问题应该是,"这个算法的Big-Theta是什么?"

但重要的是不要抛出Big-O,因为并非所有算法都具有已知的精确边界.矩阵乘法是众所周知的问题,没有已建立的Big-Theta.朴素算法是O(n 3),现有技术是O(n 2.3727).这是一个上限,但它可能不是的(最佳)的上限.Big-Theta位于O(n 2.3727)和Ω(n 2)之间.

  • 通常正确的问题是"什么是XYZ的大-Theta?" 而不是"什么是大O?" 但是那个糊涂,病态的Big-Theta并不像足球队队长"Big-O"那样受欢迎. (2认同)
  • @tieTYT:我猜是因为随着时间的推移,已知最低的上限会随着更好的算法(或对现有算法的更好分析)的发现而改变.数学符号最有用,如果它总是意味着相同的东西,无论你什么时候阅读它. (2认同)