繁体   English   中英

大哦-O(n)vs O(n ^ 2)

[英]Big Oh - O(n) vs O(n^2)

我最近对结构类的数据完成了两次测试,并且两次遇到与O(n)vs O(n ^ 2)有关的问题。 我想知道我是否可以得到帮助来理解问题。 问题是:

假设算法A的运行时间为O(n ^ 2),算法B的运行时间为O(n)。 当n = 17时,我们可以说这两种算法的运行时间如何?

a)当n = 17时,我们无法谈论特定的运行时间

b)算法A比算法B运行更快

c)算法A的运行速度比算法B慢得多

对于这两个测试,我都基于以下条件回答了C: https : //en.wikipedia.org/wiki/Big_O_notation#Orders_of_common_functions 我知道根据提供的链接,B毫无意义。 现在我开始认为它是A。我猜它是A,因为n很小。 如果是这种情况,我想知道何时n足够大以至于C会成立。

实际上,这里有两个问题。

第一个是您提到的那个。 增长顺序是渐近的。 他们只是说存在某个n 0 ,对于任何n> n 0 ,函数都以某种方式有界。 他们没有说n的特定值,只是“足够大”。

第二个问题(您没有提到)是O 只是一个上限(与Θ相反) ,因此即使对于足够大的n,您也无法将两者进行比较。 因此,如果A =√nB = n ,那么显然B的增长快于A。 但是, AB仍然适合这个问题,因为√n = O(n 2n = O(n)

答案是A。

如果f(x)<= K * g(x)对于所有x>某个实数,则函数f(x)的大哦阶为g(x)

3 * n + 2的大欧姆,n为O(n),因为对于所有x> 2,4 * n都大于两个函数。 由于这两个函数的Big oh表示法相同,因此我们不能说它们在同一时间针对某个值运行。例如,在n = 0时,第一个函数的值为2,第二个函数的值为0

因此,我们无法确切地将两个函数的运行时间关联为某个值。

答案是a):仅给出大的O符号,您实际上不能说出任何特定数字的任何内容。

c的反例:B的运行时间为1000 * n(= O(n)),A的运行时间为n ^ 2。

在进行算法分析时,尤其是Big Oh,您实际上应该只考虑趋于无穷大的输入大小。 如此小巧的尺寸(数万对数万对数百万),两者之间没有显着差异。 但是,通常O(n)的运行速度应比O(n ^ 2)快,即使两者之间的差值小于几毫秒。 我怀疑这个问题的关键词很多

我的答案是基于我在竞争性编程方面的经验,这需要对O或“ Big O”有基本的了解。

当然,当您谈论哪一个速度更快而哪一个速度更慢时,就可以完成基本的计算。 O(n)比O(n ^ 2)快,根据最坏的情况使用大哦。

现在到底是什么时候发生? 好吧,在竞争性编程中,我们使用了10^8拇指法则。 这意味着如果算法复杂度为O(n),然后大约n = 10^8 ,时限约为1秒,则该算法可以解决问题。

但是,如果算法复杂度为O(n ^ 2)怎么办? 不,那么,它大约需要(10^8)^2 ,超过1秒。 (一秒钟的计算机可以处理大约10 ^ 8的操作)。

因此,在1秒钟内,O(n ^ 2)的最大范围大约为10^4而O(n)的最大值可以达到10^8 在这里,我们可以在计算机上1秒内清楚地看到两种复杂性之间的区别。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM