了解Schönhage-Strassen算法(巨大整数乘法)

时间:2009-05-14 07:11:32

标签: algorithm multiplication

我需要在Python中尽可能高效地乘以几个1000位数的长整数。这些数字是从文件中读取的。

我正在尝试实现整数乘法的Schönhage-Strassen算法,但我不得不理解它背后的定义和数学,特别是快速傅里叶变换。

任何理解此算法的帮助,如实际示例或某些伪代码都将受到高度赞赏。

3 个答案:

答案 0 :(得分:4)

Knuth's TAOCP的第4.3.3章描述了它,并且在其他章节中也有一些可用于此的FFT伪代码。

答案 1 :(得分:2)

Schönhage-Strassen的1000位数字“小”非常值得使用。您可以查看Toom Cook乘法。 gmpy是gmp的Python包装器,提供这些功能。

答案 2 :(得分:2)

不要重新发明轮子。 GMP具有该算法的出色的高性能实现,并且用纯Python编写的任何算法将至少慢100倍,因为Python是一种解释语言。使用gmpy从Python应用程序调用GMP。我也很好奇你正在做什么应用程序需要增加如此大的数字 - 可能有一种更简单的方法来处理你的问题。

另外,正如其他答案所提到的,“几千个数字长”并不足以证明Schönhage-Strassen的合理性(你必须至少有10000个十进制数字,可能更多)。像Toom-3这样的Toom-Cook的一些变体通常在此范围内使用。同样,不要自己在Python中编写 - GMP的实现经过了非常仔细的优化。