Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 理解Schö;nhage-Strassen算法(大整数乘法)_Algorithm_Multiplication - Fatal编程技术网

Algorithm 理解Schö;nhage-Strassen算法(大整数乘法)

Algorithm 理解Schö;nhage-Strassen算法(大整数乘法),algorithm,multiplication,Algorithm,Multiplication,我需要在Python中尽可能高效地乘以几个1000位数长的整数。这些数字是从文件中读取的 我试图实现整数乘法的算法,但我一直在理解它背后的定义和数学,特别是快速傅立叶变换 任何有助于理解此算法的帮助,如实际示例或一些伪代码,都将不胜感激。1000位数字对于Schönhage Strassen来说是“小”的,因此非常值得使用。你可以看看乘法运算。是gmp的Python包装器,提供这些函数。Knuth的第4.3.3章对此进行了描述,在其他章节中也有一些FFT伪代码可用于此功能。不要重新发明轮子。GM

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

我试图实现整数乘法的算法,但我一直在理解它背后的定义和数学,特别是快速傅立叶变换


任何有助于理解此算法的帮助,如实际示例或一些伪代码,都将不胜感激。

1000位数字对于Schönhage Strassen来说是“小”的,因此非常值得使用。你可以看看乘法运算。是gmp的Python包装器,提供这些函数。

Knuth的第4.3.3章对此进行了描述,在其他章节中也有一些FFT伪代码可用于此功能。

不要重新发明轮子。GMP有一个出色的高性能算法实现,任何用纯Python编写的算法都至少慢100倍,因为Python是一种解释语言。用于从Python应用程序调用GMP。我也很好奇,你正在开发的应用程序需要如此大的数字乘法,也许有一种更简单的方法来处理你的问题


此外,正如其他答案所提到的,“数个1000位数”的长度还不足以证明Schönhage Strassen的合理性(您必须至少有10000个十进制数字,可能更多)。Toom Cook的一些变体,如Toom-3,通常用于此范围。同样,不要自己用Python写这篇文章——GMP的实现经过了非常仔细的优化。

+1,尽管我希望OP知道这一点。他链接到的维基百科条目很早就解释了这一点(“开始优于旧方法[…](10000到40000个小数位数)。对不起,我知道,我想问的是“几个1000位数”。我将编辑这个问题。一个非常重要的提示:除非你真的需要,否则不要尝试实现你自己的FFT。如果它对python可用,请尝试使用FFTW进行计算。它将远远超过你自己梦想实现的任何东西。简单的FFT没有那么难,但最难的部分是快速实现,尤其是如果你正在处理的数字不是二的幂的幂。@LiKao:Schönhage-Strassen通常使用任意大小整数的固定大小向量和数论变换来实现,而像FFTW这样的包实现的fft使用浮点和固定大小的元素,所以它们实际上没有多大帮助。那么,什么呢例如,关于PyopenCL?