现代计算机上的二进制GCD算法与欧几里得算法



http://en.wikipedia.org/wiki/Binary_GCD_algorithm

维基百科上的这个条目有一个非常令人不满的含义:二进制GCD算法一度比标准欧几里得算法高出60%的效率,但直到1998年,克努思才得出结论,他的当代计算机的效率只有15%的提高。

又过了15年。。。随着硬件的进步,这两种算法是如何结合在一起的?

二进制GCD在低级语言中是否继续优于欧几里得算法,但在Java等高级语言中由于其复杂性而落后?或者这种差异在现代计算中是没有意义的?

我为什么在乎你可能会问?今天我碰巧要处理1000亿个这样的问题:(为生活在一个计算机时代干杯(可怜的欧几里得(。

答案当然是"取决于"。这取决于硬件、编译器、具体实现,无论我忘了什么。在具有慢速除法的机器上,二进制GCD往往优于欧几里得算法。几年前,我在C、Java和其他几种语言的Pentium4上对其进行了基准测试,总体而言,在该基准测试中,具有256元素查找表的二进制gcd以1.6到近3的因子击败了欧几里得算法。当欧几里得不是立即除法,而是先进行几轮减法时,欧几里得更接近了。我不记得数字了,但二进制仍然快得多。

如果机器具有快速除法,情况可能会有所不同,因为欧几里得算法需要更少的运算。如果除法和减法/移位之间的成本差足够小,二进制将更慢。在你的情况下,哪一个更好,你必须通过自己的基准来找出。

最新更新