大O中的O是什么?


23

Big O符号中的Big和O是什么?我已经阅读了定义,但并没有说出O的发音是“哦”。例如-我知道O(n)是线性算法的复杂度,其中n可以是操作数。但是什么是O


13
这是英文字母的第15个字母。这也是希腊字母中的第15个字母。
乔尔·埃瑟顿

1
只是为了澄清一下:您正在寻找为什么O是使用的符号(而不是Q或E或其他名称)的原因,以及O对其他符号的意义是什么(如果有)?
FrustratedWithFormsDesigner

6
@Joel:实际上是Omicron,这就是为什么选择此特定字母的线索。
约尔格W¯¯米塔格

这个答案反驳了(我认为是正确的)Omicron理论。
Hawkeye Parker

Answers:


31

好吧,我想是秩序,这与维基百科一致的

编辑:(我自己的(任何改进表示赞赏))来自德国维基百科文章的翻译

大写字母O(实际上在当时是一个资本OMICRON)作为一个符号的顺序(德语:“Ordnung冯”)中出现他的解析数论书的第二个问题最早是由德国数理论家保罗·巴克曼1894年,由于另一位德国数字理论家埃德蒙·兰道(Edmund Landau)的工作,该名称得到了普及,这种命名法与当今尤其是德语术语有着广泛的联系。


5
尽管许多数学家可能会这样称呼它,但最初并非如此。如果您阅读20世纪初期的数论书籍,您将找不到这种解释。就是这样,我看不懂德语,以弄清楚他对这种记法的想法。
乔纳森·亨森

1
@Jonathan:帖子已更新。
back2dos

非常好!我查看了所有的数论书籍,但找不到任何关于O的解释。+1
乔纳森·汉森

2
我一直把它说成是顺序,就像说O并不意味着什么。
Newtopian 2011年

16

“大”表示“资本”,“ O”表示顺序,与“复杂性顺序”相同。之所以这样命名,是因为将“复杂度顺序”写为O(f(x)),例如,用大写字母“ O”或“ Big O”表示。没有人谈论它,因为“每个人”都理解它的含义,而理解它并不能真正帮助您理解复杂性分析。

为了理解复杂性分析,我认为topgun_ivard发布的链接是一个不错的起点。一本涵盖数据结构或算法的入门书籍也可能会有所帮助。


5
抱歉,Bachmann-Landau表示法是德国数学家发明的,因此我几乎认为他不会用英语单词来命名它。实际上,即使它是由美国数学家发明的,它也可能仍以德语单词命名,因为它是在我发明(大约在1920年左右)时使用的,国际语言是德语。此外,它甚至没有远程有什么关系的复杂性。
约尔格W¯¯米塔格

1
@Jörg:是的,但这不是Ordnung,德国Wiki文章声称它是起源:de.wikipedia.org/wiki/Landau-Symbole#Geschichte
back2dos

1
@Ethel您可以对您的文章进行一些小的更改,以便我投票给您吗?你确实是对的。您必须编辑才能投票。
乔纳森·亨森

1
@乔纳森,我不确定你到底想要什么小改变。您可以继续进行所需的编辑吗?或者,我们可以让back2dos的答案站起来,由于一些出色的研究,他似乎可能最终以最佳答案告终:)
Ethel Evans

1
嗯,有趣。在瑞典,Big Oh通常被称为“ ordo”(拉丁语,意思是秩序),而不是“ ordning”(瑞典语为order)。
Vatine 2012年

11

O代表命令。

它最初是由德国数学家保罗·巴赫曼(Paul Bachmann)在其关于数论Die Analytische Zahlentheorie的书的第二卷中引入的,该书于1894年出版(第401页)。他在首次使用该符号的公式后指出:

(...)wenn wir durch das Zeichen O(n) eindeGrösseausdrücken,deren Ordnung in Bezug auf n die Ordnung von n nichtüberschreitet(...)

我的翻译:

(...),其中使用符号O(n)表示的量级,其相对于n的阶数不超过n(...)的阶

与其他人所说的相反,他的文字中没有任何内容表明这实际上是希腊的首府欧姆龙。他同时使用大量的希腊语和拉丁语字符,因此实际上没有任何可说的方式。考虑到他继续在文本中使用“ Ordnung n log n ”等,很明显在任何情况下它都代表“ Ordnung”(德语为“ order”(如有疑问)),但这仍然可以使花哨的希腊O.

然而,omikron的起源是更可能是由于高德纳一个返璞词谁介绍的符号欧米茄(Ω)和θ(Θ)对相关概念的他的论文大奥米克和大欧米茄和大西塔,或可能Hardy和的Littlewood谁较早地引入了欧米茄符号。


2
有趣。我想你是对的。我只是在Landau和Bachmann的书中查阅了定义,它们的确是a)使用拉丁语Oh,而不是希腊语Omikron,b)都使用“ Ordnung”一词,以及c)Landau 明确指出它的意思是“ Ordnung” 。我站得住了。
约尔格W¯¯米塔格

有什么更好的词?我是说,是德国人?Ordnung ist das halbe Leben!
JensG 2014年

我认为您的答案(正确,赞成,很棒)的第一句话应该是:“ O代表“ Ordnung”(德语意为“秩序”)。这将有助于此答案引起其他读者的注意。
Hawkeye Parker

5

我喜欢这篇文章,希望您也觉得它有用!

引用文章的一部分:
大希腊字母

大O经常被滥用。Big O或Big Oh实际上是Big Omicron的缩写。它代表渐近复杂度的上限。因此,如果算法为O(n log n),则存在常数c,以使上限为cn log n。

Θ(n log n)(Big Theta)的约束更紧密。这种算法意味着存在两个常数c1和c2,使得c1n log n <f(n)<c2n log n。

Ω(n log n)(Big Omega)表示该算法的下限为cn log n。

还有其他一些,但是这些是最常见的,Big O是最常见的。这种区别通常并不重要,但值得注意。毕竟,正确的符号是正确的符号。

什么是大O?

Big O表示法试图通过在关键因素趋于无穷大时将增长率降低到关键因素来描述算法的相对复杂性。因此,您经常会听到短语“渐近复杂性”。这样做会忽略所有其他因素。它是复杂性的相对表示。

什么不是大O?

Big O不是算法的性能测试。它也是概念上的或抽象的,因为它倾向于忽略其他因素。排序算法的复杂度通常降低为要排序的元素数量,这是关键因素。很好,但是没有考虑以下问题:

内存使用:一种算法可能比另一种使用更多的内存。根据情况,这可能是完全无关紧要的事情;比较成本:比较元素可能真的很昂贵,这可能会改变算法之间的任何实际比较。移动元素的成本:复制元素通常很便宜,但不一定是这种情况。等等


5
仅仅链接文章并不过分。解释或引用与线程特别相关的部分通常是一个好主意。
Demian Brecht

3
否决票真的必要吗?他链接的文章非常相关,恕我直言非常有帮助。同时,票数最高的答案是Wikipedia文章的链接。+1以抵消蜂巢思想的虚伪。
Brandon Moretz

1
-1,因为artice虽然是一篇非常出色且写得很好的文章,但与该问题无关。
约尔格W¯¯米塔格

@Jorg,我从未说过这篇文章可以解决问题,但我分享了这一观点,因为当我研究这些概念时,发现它很有用。
topgun_ivard 2011年

3
@topgun_ivard:如果它变成了死链接,会发生什么?释义允许1)此主题的受众获取链接的Coles注释版本(时间就是金钱),以及2)确保您的帖子不会与无效链接无关。
Demian Brecht

2

“ f(x)比g(x)大哦”

这是一种预测功能增长的数学方法。

令f和g为从整数集或实数集到实数集的函数。我们说如果有常数C和k使得| f(x)|为f(x)为O(g(x))。<= C | g(x)| x> k时

您会读为“ f(x)是g(x)的大哦”

在德国数学家埃德蒙·兰道(Edmund Landau)之后,big-O有时被称为兰道符号。我认为这不代表任何其他事情。您还具有类似的big-Omega和big-Theta表示法。这些符号像在高中的“平面几何”课程中一样,总是使用theta来表示三角形中的角度。

更正 @ back2dos为O提供了令人满意的解释,即引用了命令。做得好。看到他的答案。

Donald Knuth将其用于研究计算机程序的复杂性。

如果要查找使用该符号的原因,则应阅读

保罗·巴赫曼(Paul Bachmann)于1892年创作的《分析Zahlentheorie》


2

编辑:原来我错了。不过,也许这可以帮助某人保持其符号笔直,所以我不会删除它。


实际上,这不是拉丁字母,这是希腊字母Omicron。不幸的是,这两个具有完全相同的字形,因此,随着时间的流逝,原始版本已损坏,现在只是Oh

符号的选择实际上没有任何特殊含义,它被选作助记符

  • Omicron中包含字母MICRO,而Omicron符号的语义大致表示“小于”
  • 欧米茄(Omega)中包含字母MEGA,而欧米茄(Omega)符号的语义大致意味着“大于”
  • Theta(Θ)看起来有点像等号,并且Theta符号的语义大致表示“等于”

而已。它没有真正的意义,它只是玩单词,如果您愿意的话,可以帮助您更轻松地记住语义。


2
尽管我很想相信您的助记符命题(这是一个非常酷的主意),但我将需要看到一些证明,这是巴合曼的真实初衷。提供它,我会为您+1。
乔纳森·亨森

2
@乔纳森·亨森(Jonathan Henson):显然,我被克努斯(Knuth)教授误导了:-)
约尔格·米塔格(

-5

更新:尝试清理我的答案并更准确

大O符号是一种根据那里的增长率表征功能的方法。O代表阶数(第一阶为n,第二阶为n平方,等等)。如果我没记错的话,对于给定N个元素的方法运行时(或存储),这将是最坏的情况。顺序越大,该方法执行的效果越差。
例如,在数组中查找记录是O(1)(我相信在某些哈希表实现中也是如此)。在链接列表的末尾添加一个值将是O(N),因为您必须先到达列表的末尾才能添加元素等。

这个答案应该比我的第一次尝试更正确:)


2
-1,因为这只是普通的旧错误,并且回答了一个独立于询问的问题。问题是为什么要使用字母“ O”,而不是“ Big O表示法是如何工作的?”。您对Big-oh的工作方式还不正确...虽然遍历数组是O(n),其中n是数组的大小,而不是O(1)。该表示法与算法的“周期”无关……它是对算法运行时间上限的度量。
Casey Patton

在这里不与您争论,但这就是我的意思。运行时间是什么意思?好吧,运行时间取决于必须在计算机上处​​理的内容。我想我这里的使用周期比较宽松。按周期,我想我应该说过迭代或类似的内容。但是您对上限是正确的,它不能确定平均值。因此,我接受降级。
SoftwareSavant
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.