Big O符号中的Big和O是什么?我已经阅读了定义,但并没有说出O的发音是“哦”。例如-我知道O(n)是线性算法的复杂度,其中n可以是操作数。但是什么是O?
Big O符号中的Big和O是什么?我已经阅读了定义,但并没有说出O的发音是“哦”。例如-我知道O(n)是线性算法的复杂度,其中n可以是操作数。但是什么是O?
Answers:
编辑:(我自己的(任何改进表示赞赏))来自德国维基百科文章的翻译
大写字母O(实际上在当时是一个资本OMICRON)作为一个符号的顺序(德语:“Ordnung冯”)中出现他的解析数论书的第二个问题最早是由德国数理论家保罗·巴克曼1894年,由于另一位德国数字理论家埃德蒙·兰道(Edmund Landau)的工作,该名称得到了普及,这种命名法与当今尤其是德语术语有着广泛的联系。
“大”表示“资本”,“ O”表示顺序,与“复杂性顺序”相同。之所以这样命名,是因为将“复杂度顺序”写为O(f(x)),例如,用大写字母“ O”或“ Big O”表示。没有人谈论它,因为“每个人”都理解它的含义,而理解它并不能真正帮助您理解复杂性分析。
为了理解复杂性分析,我认为topgun_ivard发布的链接是一个不错的起点。一本涵盖数据结构或算法的入门书籍也可能会有所帮助。
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谁较早地引入了欧米茄符号。
我喜欢这篇文章,希望您也觉得它有用!
引用文章的一部分:
大希腊字母
大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不是算法的性能测试。它也是概念上的或抽象的,因为它倾向于忽略其他因素。排序算法的复杂度通常降低为要排序的元素数量,这是关键因素。很好,但是没有考虑以下问题:
内存使用:一种算法可能比另一种使用更多的内存。根据情况,这可能是完全无关紧要的事情;比较成本:比较元素可能真的很昂贵,这可能会改变算法之间的任何实际比较。移动元素的成本:复制元素通常很便宜,但不一定是这种情况。等等
“ 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》
编辑:原来我错了。不过,也许这可以帮助某人保持其符号笔直,所以我不会删除它。
实际上,这不是拉丁字母哦,这是希腊字母Omicron。不幸的是,这两个具有完全相同的字形,因此,随着时间的流逝,原始版本已损坏,现在只是Oh。
符号的选择实际上没有任何特殊含义,它被选作助记符:
而已。它没有真正的意义,它只是玩单词,如果您愿意的话,可以帮助您更轻松地记住语义。
更新:尝试清理我的答案并更准确
大O符号是一种根据那里的增长率表征功能的方法。O代表阶数(第一阶为n,第二阶为n平方,等等)。如果我没记错的话,对于给定N个元素的方法运行时(或存储),这将是最坏的情况。顺序越大,该方法执行的效果越差。
例如,在数组中查找记录是O(1)(我相信在某些哈希表实现中也是如此)。在链接列表的末尾添加一个值将是O(N),因为您必须先到达列表的末尾才能添加元素等。
这个答案应该比我的第一次尝试更正确:)