Time 当有人说大O(n)就是大O(n^2)是什么意思?

Time 当有人说大O(n)就是大O(n^2)是什么意思?,time,big-o,complexity-theory,space,Time,Big O,Complexity Theory,Space,我有一点想法,但我不确定。大O(n)是大O(n^2)?如果是,O(n log 2n)是O(n^2)?用简单的外行术语来说,大的Oh(O)表示法用于设置一段代码需要执行的时间上限 请考虑这个例子, 用于从n元素列表中查找元素。简单的情况 将是顺序搜索,需要n比较。所以我们可以 比如说,顺序搜索是O(n)。当我们说它是O(n)的时候 复杂性,意思是代码占用的最大值为n 比较以完成其执行。这是最大值 在小于n的比较中搜索需要。这也是真的(但不是真的) 精确)如果我们说它小于n^2比较。所以O(n)可以

我有一点想法,但我不确定。大O(n)是大O(n^2)?如果是,O(n log 2n)是O(n^2)?

用简单的外行术语来说,大的Oh(O)表示法用于设置一段代码需要执行的时间上限

请考虑这个例子,

用于从
n
元素列表中查找元素。简单的情况 将是顺序搜索,需要
n
比较。所以我们可以 比如说,顺序搜索是
O(n)
。当我们说它是O(n)的时候 复杂性,意思是代码占用的最大值为
n
比较以完成其执行
。这是最大值 在小于
n的比较中搜索需要。这也是真的(但不是真的)
精确)如果我们说它小于
n^2
比较。所以
O(n)
可以 替换为
O(n^2)
。但我们通常倾向于使用尽可能低的价格 上限时提到大哦符号

在Big Oh中,任何符号都可以被性能较差的表达式替换,因为Big Oh定义了执行时间的上限。 因此,如果一个代码片段的复杂性是
O(n)
,那么它也是
O(n^2)
O(n^3)
O(n!)
O(2^n)
等等

性能从最好到最差(左边的最好,右边的最差)

回到Big-Oh符号,这里是从最好到最坏的列表。


希望这有帮助!:)

O(n)是O(n^2)可以解释为“对于大于n_0的所有值,第二个函数总是大于(或等于)第一个函数,其中n_0>=0

更具体地说 O(n)是O(n^2)意味着存在一些常数(称之为c)和一些n值(称之为n_0),因此如果n大于或等于n_0,则第二个函数将始终大于(或等于)第一个函数

您可能还会遇到这种符号O(n)=O(n^2),这意味着O(n)是O(n^2)

例如,如果我在java中有一个For循环,它在大小为n的相同列表中迭代两次,它将是O(n)。为什么?它将访问每个元素两次,这意味着将进行2*n总访问量,因此2*n是O(n),因为2*n=0(其中4是我们的常数c)

我任意选择了4,不管它是什么常数c,只要它确保当n增加超过n_0时,第二个函数总是大于第一个函数。在计算机科学中,我们称之为“见证”。所以我可以为c选择3或100,甚至2,它仍然有效。只要2*n=n_0(其中n_0也是某个常数)则2*n是O(n)

下面的图表显示了我的意思

f(n)=O(g(n))意味着对于某些常数c,我们的函数f(n)总是小于函数g(n)。这是大O表示法的一个更任意的定义。
在你的例子中,f(n)=O(n)和O(g(n))=O(n^2)

幻灯片来源:安迪米尔扎安教授,约克大学EECS 3101


为什么我们要使用这种表示法?它帮助我们比较算法的速度,以帮助做出更好的选择。某些类型的算法只能在非常小的输入上运行,因为它们太慢。例如,如果您的算法f(n)是O(n^30)您的输入大小是一百万个元素,在我们运行代码之前,我们就知道这段代码会大大降低程序的速度,因为1000000^30是一个巨大的数字。相反,如果算法f(n)是O(log(n))然后会很快计算出一百万个元素。

是的,这两种说法都是正确的。你可以粗略地把大O表示法看作是上界。请你详细说明一下好吗?谢谢,我理解。所以可以肯定地说O(n)是O(n^2),但O(n^2)不是O(n)完全正确。还有另外两种常用的渐近符号称为ω和θ。ω设置了与大Oh完全相反的下界,θ设置了一个紧界,这更像是大Oh和ω的交点。一位讲师告诉我,3n^2的书写方式不正确,因为等式并非适用于所有值n的用法。例如:如果n=2,那么3(2)^2=12>8=2^3。它应该是3n^2=3和n>=0。(必须包含约束,以使该不等式适用于常数后面的所有n)。请注意,这不是大O表示法,但大O表示法是一种较短的书写方式。例如:3n^2=3和n>=0等于说3n^2是O(n^3).我知道这很棘手,但是一旦你理解了大O的定义,以及为什么使用它,它就会有意义。这有帮助吗?
O(1) > O(logn) > O(n) > O(nlogn) > O(n^2) > O(2^n) > O(n!)