Algorithm 为什么算法的顺序通常比处理器的速度更重要?

Algorithm 为什么算法的顺序通常比处理器的速度更重要?,algorithm,data-structures,big-o,complexity-theory,Algorithm,Data Structures,Big O,Complexity Theory,所以,我知道效率是由算法和数据结构决定的 在溶液中使用。但是,我真的不明白算法的顺序如何比处理器的速度更重要?不能说算法的顺序比CPU的速度更重要!!!他们是不可比的!!!! 我们使用顺序来相互比较不同的算法,因为我们不知道算法将运行的目标体系结构。另一方面,程序的执行时间取决于许多因素,如cach未命中率、主存命中率和。。。。因此,在每个执行程序中,执行时间可能与以前的不同。因此,即使在一个结构上执行两个程序,我们也无法对它们进行比较一台典型的个人计算机每秒可以进行10^8次计算。 世界上最快

所以,我知道效率是由算法和数据结构决定的
在溶液中使用。但是,我真的不明白算法的顺序如何比处理器的速度更重要?

不能说算法的顺序比CPU的速度更重要!!!他们是不可比的!!!!
我们使用顺序来相互比较不同的算法,因为我们不知道算法将运行的目标体系结构。另一方面,程序的执行时间取决于许多因素,如cach未命中率、主存命中率和。。。。因此,在每个执行程序中,执行时间可能与以前的不同。因此,即使在一个结构上执行两个程序,我们也无法对它们进行比较一台典型的个人计算机每秒可以进行
10^8次计算。

世界上最快的超级计算机每秒进行10^16次运算

因此,假设您现在在笔记本电脑/台式机上运行了一个O(n)算法。以及同时在世界上最快的超级计算机上运行的O(n^2)算法。如果n=10^10

电脑上的运行时间=10^10/10^8=
100秒

超级计算机上的运行时间=10^20/10^16=
10000秒

因此,笔记本电脑的性能明显优于超级计算机。事实上,在使用更好的算法时,速度要快100倍


我们寻找更好算法的另一个原因是问题。据英国《每日邮报》报道,计算能力每18个月翻一番。因此,即使一台超级计算机今天能够以非常快的速度处理巨大的输入,它也可能无法在一段时间后这样做,因为问题规模已经增加了许多倍,而计算能力在未来18个月内只会翻一番

我会尽量用简单的方式解释。
处理器速度以周期/秒为单位进行测量,处理器之间的速度会有所不同。要判断一个算法,我们需要一个独立于此并完全基于该算法的度量。

假设算法中的单个操作需要一个处理器周期。 所以,对于algon的顺序,如果输入的大小为n,则需要n个处理器周期。 如果顺序为algo n^2,如果输入大小为n,则需要n^2个处理器周期

因此,您可以看到,算法的顺序是一个独立于处理器速度的度量。订单越低,工作越快。

这是一个非常笼统的回答,但我希望它能消除你的疑虑

让我们看一个例子:

您有一个顺序为O(n^3)的算法。您正在一个处理器上运行该算法,该处理器可以在100毫秒内处理n=10

如果n变为10000,处理器将需要1158天

将处理器速度提高一倍只会将时间缩短到579天

即使你能以十倍的速度得到一个处理器,也需要几个月的时间


但是,用O(n^2)级的算法替换该算法,并在原始处理器上运行该算法,将所需时间减少到2.8小时。

是否更重要取决于具体情况。算法的复杂度顺序与它的速度没有直接联系,可能有比“更好”算法更快地解决特定问题实例的“更差”算法。正如其他答案所解释的,复杂性顺序归结为“内存/时间消耗如何随输入大小而增长?”。对于小的输入,你不在乎。对于平均输入,您可以对算法进行基准测试,并查看哪个算法在硬件上运行得更快。问题是出乎意料的大量输入:现在你关心的是十倍的数据意味着十倍的运算时间、百倍的等待时间,还是直到宇宙热死才停止计算

这方面的一个突出例子是。他们正在使用具有指数运行时间的算法处理已安装更新的列表。这不是问题,运行速度也可以接受,直到几十年后,更新的数量使这成为一个真正的问题

但作为一名计算机科学家,我有另一个观点要分享,那就是什么更重要:算法复杂性更有趣。找出一个更复杂的算法是一个智力问题。如果您只关心更快的结果,那么您可以同样轻松地升级硬件。你可以用金钱获得处理能力。处理器的速度或多或少仍在提高——只要使用它们,您的程序就会大大加快[1]。直到你到达(技术或预算)的边缘,你需要一个更好的算法。那你就有了一个想法。脑筋急转弯。这是纯粹的乐趣


1:我并不是说让处理器变快是件小事。但用它们来解决问题是:-)

我认为顺序是指,在这种情况下,一个(大O)顺序对性能更重要的原因是执行算法所用的步骤更少。事实并非如此。我在合理大的输入上运行指数最坏情况下的算法,并且具有规律性。我认为可以得出的最有力的结论是,对于足够大的n,算法的阶数对性能的重要性大于处理器的速度。然而,在许多实际场景中,n不足以使低阶算法实际更快,并且还有其他实际考虑因素,例如实现算法的代码的简单性和可维护性。因此,该问题没有明确答案,将征求意见和讨论。tmyklebu和njuffa为+1。我的观点(抄袭其他评论)是“Cpu”和“复杂性”都很重要。(A) cpu在初始阶段非常重要,在初始阶段,决定(例如)不使用HP笔记本电脑,但使用IBM超级计算机(B)一旦确定cpu,现在选择算法。现在可以选择O(n)