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

jim*_*imo 12 algorithm complexity-theory big-o data-structures

因此,我知道效率取决于解决方案中使用的算法和数据结构.但是,我真的不知道算法的顺序如何比处理器的速度更重要?

Nik*_*nka 17

典型的个人电脑可以做到10^8 calculations per second.
而世界上最快的超级计算机也是如此10^16 calculations per second.

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

PC上的运行时间= 10 ^ 10/10 ^ 8 = 100 seconds.
超级计算机上的运行时间= 10 ^ 20/10 ^ 16 = 10000 seconds.

因此,显然笔记本电脑的性能远远超过了超级计算机.并且使用更好的算法实际上要快100倍.

我们寻找更好算法的另一个原因是可扩展性问题.根据摩尔定律,计算能力每18个月翻一番.因此,即使超级计算机今天能够以极快的速度处理大量输入,也可能无法在问题规模增加了许多倍的情况下这样做,而计算能力在未来18个月内只会翻倍.

  • 这个答案假设O(n ^ 2)表示n ^ 2.0.1n ^ 2和1000n ^ 2 + 10 ^ 100都是O(n ^ 2).我很惊讶你提出摩尔定律是某种迹象表明计算能力随着时间的推移而缓慢增加.通常摩尔定律被引用为相反的原因. (7认同)
  • @DouglasZare这里的观点是,任何一天都可以选择更好的算法.为了强调这一点,我已经讨论了当前场景中的性能考虑因素,以及几年后处理器速度增加时的性能考虑因素.所以这就是我提到摩尔定律的原因.因为即使算法今天很棒,明天也许不会这样.你不认为你在分析中考虑到常数因素而过于迂腐.我认为答案中强调的一点是明确的,OP非常理解. (3认同)
  • 你错误地引用摩尔定律.摩尔定律并未说明计算能力每18个月翻一番,这是晶体管数量.这是一个重要的区别,因为性能不随晶体管数量而扩展. (2认同)
  • Nikunj Banka,从典型的个人计算机每秒计算的次数开始,你有几个错误.为什么不修理它们?即使OP对一个非常有缺陷的答案感到满意,你也不应该这样做.不,我不认为对于O(n ^ 2)的含义是正确的,而不是建立在常见的误解上,比如认为O(n ^ 2)意味着n ^ 2或cn ^的概念错误. 2.我不认为向后使用不正确版本的摩尔定律会有所帮助. (2认同)

Sig*_*iSv 5

我们来看一个例子:

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

如果n变为10000,则该处理器需要1158天.

获得两倍于处理器的处理器只能将其减少到579天.

即使你能够以十倍的速度获得处理器,它仍然需要几个月的时间.

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