我有兴趣了解使用多个处理器将大整数模(大)常数相乘的时间复杂度。这归结为基本上只是整数乘法,因为除法和余数也可以使用乘法来实现(例如倒数乘法或巴雷特归约)。
我知道目前已知的整数乘法算法的运行时间大致以下限为界o(n * log n)
。我的研究未能确定这是针对单核机器还是多核机器。但是,我认为这是针对单核机器的,因为算法似乎使用了分而治之的方法。
m
现在我的问题是,目前已知的在内核上实现的并行整数乘法算法的时间复杂度下限是多少?o(n)
给定足够多的内核,是否可以实现具有下限或更少的时间复杂度?(即是否m
取决于n
?)这里o(n)
描述了手头整数的输入大小。
到目前为止,在我的研究中,我已经阅读了几篇声称使用并行 FFT 乘法可以提高速度的论文。不幸的是,这些仅声称经验加速(例如“在某某计算机上使用 6 个内核的速度提高了 56%”),然后无法解释以时间复杂度界限表示的理论加速。
我知道尚未找到“最快”的整数乘法算法,这是计算机科学中一个未解决的问题。我只是在询问目前已知的这种并行算法的界限。
更新 #1:用户@delnan 链接到关于NC 复杂性类的 wiki 页面。该维基页面提到整数乘法在NC中,这意味着处理器上存在O((log n)^c)
算法。O(n^k)
这有助于更接近答案。现在没有回答的部分是整数乘法的c
和k
常量是什么,哪种并行算法适合这个目的?
更新 #2:根据康奈尔大学计算机科学课程的PDF 文件中的第 12 页(共 15 页),NC 复杂性课程中的整数乘法需要处理器O(log n)
上的时间。O(n^2)
它还解释了一个关于如何进行此操作的示例算法。我很快就会为这个问题写一个正确的答案。
最后一个问题来满足我的好奇心:有没有人知道“just”或处理器的当前已知时间O(n)
复杂O(sqrt(n))
度O(log n)
?