我似乎对一个问题感到困惑。
这是问题,然后是我的假设:
Al和Bob正在争论他们的算法。 Al声称他的O(n log n)时间方法总是比Bob的O(n ^ 2)时间方法快。为解决这个问题,他们进行了一系列实验。令Al感到沮丧的是,他们发现如果n <100,则O(n ^ 2)时间算法运行得更快,并且只有当n> = 100时,O(n log n)时间才更好。解释这是如何实现的。
根据我的理解,用O(n ^ 2)时间方法编写的算法仅对少量输入n有效。随着输入的增加,效率会随着运行时间的急剧增加而降低,因为运行时间与输入的平方成正比。 O(n ^ 2)-time方法比O(n log n)-time方法仅对非常少量的输入(在这种情况下对于小于100的输入)更有效,但随着输入变大(在这种情况为100或更大),O(n log n)成为更有效的方法。
我是否仅仅陈述问题中显而易见的内容,或者答案似乎是否满足了这个问题?
答案 0 :(得分:2)
您在答案中注意到O(N ^ 2),运行时间与输入大小的平方成比例。跟进 - 有一个恒定的比例性存在但没有大O符号描述。对于实际时间,常数的大小很重要。
Big-O也忽略了低阶项,因为渐近它们被最高阶项所支配,但那些低阶项仍然有助于实际时间。
由于这些问题中的任何一个(或两个),具有较高增长率的函数对于有限范围的输入可能会有较小的结果。
答案 1 :(得分:1)
不,我认为这还不够。
我希望得到一个答案来解释大哦定义如何允许函数f(x) > g(x)
,对于某些x,即使O(f(x)) < O(g(x))
。有一种形式主义可以用两行来回答它。
另一种选择是更直观地回答它,解释时间函数的常数项如何在小输入量中起基本作用。
答案 2 :(得分:0)
如果您明确考虑输入,即n <= 100等,则表示正确。但实际上渐近分析(大O,欧米茄等)是针对相当大的输入而做的,比如当n倾向于无限时。 nlogn比n ^ 2有效。当n足够大时,该陈述为真。我们在不考虑输入大小的情况下谈论大哦。这意味着默认情况下,asymtotic分析假设输入大小非常大。我们忽略n的具体值,将它们视为机器相关的。这就是为什么忽略常数的原因(因为n接近足够大,常数的影响变得可以忽略不计)
答案 3 :(得分:0)
你的答案是正确的,但没有提到这种情况如何或为何会发生。一种解释是,使用O(n log n)时间方法存在固定数量的(额外)开销,使得该方法的总收益加起来等于/超过开销直到100个这样的收益。汇总了。
答案 4 :(得分:0)
根据定义:
T(n)是O(f(n))当且仅当存在两个常数C和n0时: T(n)&lt;当n>时,Cf(n) N0。
在您的情况下,这意味着n ^ 2之前的系数小于nlogn之前的系数或者可以在n> 1上获得渐近限制。 100.