说“渐近更有效”是什么意思?


12

当我们说算法渐近地比更有效时,这是什么意思?Xÿ

  • X对于所有输入,将是更好的选择。
  • X对于所有输入(小输入除外),都是更好的选择。
  • X对于大型输入以外的所有输入,都是更好的选择。
  • ÿ对于小输入,将是更好的选择。

这个问题的链接在这里。

http://quiz.geeksforgeeks.org/algorithms-analysis-of-algorithms-question-16/


我以为,一种渐近有效的算法应该适用于所有输入,但是我没有明白“它适用于除小输入以外的所有输入”的原因。


大的输入暴露了算法的瓶颈。我会用工程术语来表达。
阿皮瓦(Apiwat Chantawibul)

Answers:


14

首先,两种算法都对所有输入“起作用”。问题在于性能。

这个问题的答案有点of脚。一种算法比另一种算法渐近有效的一种说法是,如果存在一些(特定于问题的)输入大小,以便对于任何较大的输入大小,更有效的算法通常会通过某种抽象措施来减少“计算步骤”,例如比较次数。

答案的想法是,渐近更有效的算法在输入大小之前可能仍需要更多步骤。它可以是渐近更高效的算法,需要对所有输入步骤较少的情况下,但它并不需要在实践中的情况下,通常是没有的。因此,“正确”答案的一个更好的措词是“ 对于所有输入(可能很小的输入除外),将是一个更好的选择”。X

措词仍然不是那么好。首先,还有更多因素会决定哪种算法是“更好的选择”,但我会告诉他们在这种情况下意图很明确。真正的问题是“小”和“大”。我最喜欢的论文之一是针对所有定义明确的问题的最快和最短算法。本文介绍了一种算法,该算法给出了函数的任何规格,并证明可以在多项式时间内进行计算,这将以倍加加项的最佳时间复杂度来计算该函数。例如,如果我为它提供了冒泡排序的实现作为功能说明,并简单证明它是5Øñ2,它将产生一个排序算法。实际上,它会产生一个算法,是其中是的常数因子渐近*最优算法。这真太了不起了。只有一个问题:常数 –隐藏在Øñlgñ5Cñlgñ+ØñlgñCØñlgñ在此示例中,几乎对于任何实际问题,该算法几乎都是完全不可行的。我说“完全不可行”是什么意思?我的意思是,在该算法完成之前,宇宙的热死将发生多次。然而,对于适当的“大”输入,它将比气泡排序更快。我的观点是,几乎绝对不可能以任何方式写下“适当大”的输入,更不用说对其进行计算了。

无论如何,我如何说出正确的答案是:“ 在足够大的输入上,比所需的步数少”。这仍然有点含糊,因为可以应用多个“步骤”概念,并且一种度量可以渐近地通过一种度量来提高效率,而另一种度量则可以更低的效率。该措辞避免了“更好选择”的价值判断;当指定常量因素/条件(例如缓存效率或实现简单性)时,有许多理由选择渐近效率较低的算法,甚至选择效率较低的算法。Xÿ

*这里有一个微妙之处。渐近最优算法可能比渐进非最优算法具有更差的常数。我认为对于任何渐近最优算法,它都将具有最佳的值,但是可以想像,为了逐渐提高渐近效率,可以增加大量复杂性,从而显着增加常数因子。CC


2

人们通常说的是这样的意思:

Ť一个Ť一个Ť一个ØŤ

X

尤其是,即使人们经常建议第二个陈述也没有,但您提出的陈述都没有。

令人遗憾的是,为了简化起见,更广泛的算法处理人员群体使用了与虚无界接壤的术语。(很难给出关于算法的准确有用的声明!)

您可能对我们的参考问题感兴趣。


如果在所有输入大小n都大于值n0的情况下(如果n0> 0),X花费的时间比y短,则算法X的渐近性优于Y。

Ť一个ñ=ñ+1个Ťñ=ñ

我建议您从CS资源中学习计算机科学,而不是从曾经阅读过Wikipedia知识的程序员那里学习。(是的,这很严厉,但是我已经看到太多的错误说法在程序员圈子中传播,甚至在SO上也是如此。)


2

“渐近地更有效”是指“对于一定大小以上的所有问题都更有效”。它没有说“确定大小”是什么,也没有说在“确定大小”之前发生了什么。

因此,除了第二个答案外,所有答案显然都是错误的,因为“渐近地更有效”完全没有说明小的输入大小。但是第二个也是有问题的。

103010301040

1015

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.