【发布时间】:2011-11-19 06:18:45
【问题描述】:
http://en.wikipedia.org/wiki/Binary_GCD_algorithm
此 Wikipedia 条目有一个非常令人不满意的含义:二进制 GCD 算法曾一度比标准欧几里德算法的效率高出 60%,但直到 1998 年,Knuth 得出结论,效率仅提高了 15%在他同时代的电脑上。
又过了 15 年……今天这两种算法如何与硬件的进步叠加?
二进制 GCD 是否在低级语言中继续优于欧几里得算法,但由于其在 Java 等高级语言中的复杂性而落后?还是现代计算中的差异没有实际意义?
我为什么在乎你可能会问?我碰巧今天不得不处理大约 1000 亿个这样的数据:) 为生活在计算时代干杯(可怜的 Euclid)。
【问题讨论】:
-
您可以有一个基准来测试它们,只需在一个 for 循环中(例如大小为 1000)创建一个随机数列表,然后为所有一对数字计算二进制并在另一个循环中计算euclid gcd,有什么问题? IMO,仍然在现代计算机中,二进制文件应该更快,特别是数字越大。
-
我可以,这将相当代表特定操作系统上特定处理器上的特定语言。这是一种足够常见的数值运算,我更普遍地好奇当今高性能应用程序中的首选解决方案是什么。
-
如果您今天必须完成 1000 亿次,那么花在讨论最有效解决方案上的任何时间都会比简单地实施其中一个或另一个花费更多的时间。
标签: java algorithm math numerical-analysis number-theory