一道 FFT 相关的题

2018-04-13 18:06:24 +08:00
 letianqiu
K 个多项式,这 K 个多项式最高次数的和是 S。如何在 O(SlogSlogK)内求出这 K 个多项式的乘积。
O(KSlogS)很容易,只需要对每个多项式做 FFT, O(SlogS),然后依次逐点相乘,最后 IFFT。总的复杂度就是 O(KSlogS)。但是如何把 K 变成 logK 就想不到了,尝试两两相乘,但是复杂度并不能降低。
2999 次点击
所在节点    程序员
2 条回复
wodesuck
2018-04-13 21:59:15 +08:00
两两相乘复杂度是 O(SlogSlogK)的。
两个 degree 为 a 和 b 的多项式相乘,是 O((a+b)log(a+b))。考虑做第一次两两相乘,P1 乘 P2,P3 乘 P4,P5 乘 P6...,复杂度就是 O( (d1+d2)log(d1+d2) + (d3+d4)log(d3+d4) + ...) < O((d1+d2+d3+...)logS) = O(SlogS)。乘完后 degree 和不变,下一次两两相乘的复杂度还是 O(SlogS),一共要做 logK 趟。
zjuturtle
2018-04-13 22:03:31 +08:00
可以参考一下我的博客
https://zjuturtle.com/2017/12/26/fft/

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/446616

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX