Big o 一个O(n)的算法怎么可能也是O(n^2),O(n^1000000),O(2^n)?
那么这个问题的答案是什么呢 声明“基本上,当我们说一个算法是O(n)的时候,它也是O(n2),O(n1000000),O(2n),…但是一个Θ(n)算法不是Θ(n2)。” 我理解大O代表上界或最坏情况,但我不理解O(n)如何也是O(n2)以及其他比O(n)更坏的情况 也许我有一些基本的误解。请帮助我理解这一点,因为我已经挣扎了一段时间 谢谢 我理解大O代表上界或最坏情况,但我不理解O(n)如何也是O(n2)以及其他比O(n)更坏的情况 直观地说,“x的上界”意味着某个值总是小于或等于x。如果某个值小于或等于Big o 一个O(n)的算法怎么可能也是O(n^2),O(n^1000000),O(2^n)?,big-o,asymptotic-complexity,Big O,Asymptotic Complexity,那么这个问题的答案是什么呢 声明“基本上,当我们说一个算法是O(n)的时候,它也是O(n2),O(n1000000),O(2n),…但是一个Θ(n)算法不是Θ(n2)。” 我理解大O代表上界或最坏情况,但我不理解O(n)如何也是O(n2)以及其他比O(n)更坏的情况 也许我有一些基本的误解。请帮助我理解这一点,因为我已经挣扎了一段时间 谢谢 我理解大O代表上界或最坏情况,但我不理解O(n)如何也是O(n2)以及其他比O(n)更坏的情况 直观地说,“x的上界”意味着某个值总是小于或等于x。如果某个
x
,则它也小于或等于x^2
和x^1000
,以获得足够大的x
。因此x^2
和x^1000
也可以是上界
这就是大oh所代表的:上界。思考大oh的含义是很有帮助的:如果函数是O(n),那么
c*n
,其中c是一些正数,是上界。如果c*n
是上界,那么对于整数,c*n^2
显然也是上界。还有c*n^3
,c*n^4
,c*n^1000
,等等
下图显示了函数的增长,它是函数“向右”的上界;i、 例如,它在较小的n
上生长得更快
当我们说f(n)=O(g(n))时,我们的意思是,对于所有足够大的n,存在一个常数c,使得f(n)假设算法的运行时间是
T(n)=3n+6
(即,一阶任意多项式)
这是真的,T(n)=O(n)
,因为3n+6<4n
对于所有n>5
(使用大oh符号的定义)。T(n)=O(n^2)
也是正确的,因为3n+6
对于所有n>5
(再次使用该定义)
T(n)=Θ(n)
也是正确的,因为除了证明它是O(n)
之外,3n+6>n
对于所有n>1
都是正确的。但是,对于任意大的n
,对于c
的任何值,您无法证明3n+6>cn^2
。(证明草图:lim(cn^2-3n-6)>0表示n->无穷大)。如果一个数字是<1
,那么它也是<10
和<1000
,但是如果它是==1
,那么它也不是==10
或==1000
。上限不必很紧。与0.99<1但也0.99<10000000000的方式相同,可以说n=O(n),但也可以说n=O(n³)。BigO是一个上限。BigΘ更像是一个等式。Big Oh符号是一个大概的符号。如果一个算法“在n的范围内”,那么它就是大的Oh(n)。n^2是一个更大的球场,等等。如果某件事可以在不超过n
的时间内完成,那么它也可以在n^2
的时间内完成,因为n
。这就是为什么O(n)算法在技术上也是O(n^2),它的意思是“不超过”。