FFT —— 快速计算多项式乘法

多项式乘法可以用O(n2)逐项得到,但不高效。而FFT可以用O(nlogn)快速计算

利用FFT来解决算法题的例子:
ABC392 G

要找给定数组中满足A+C=2B的升序三元组(A,B,C)的数量,可以通过构造多项式的方式巧妙计算:

a=[1,2,3,5],要计算这个数组中的三元组数量:

转化为计算数组中每个元素作为B时的数量,再累加到一起。

例如计算B=5时的三元组数量,即计算A+C=10(A,C)个数。这相当于计算:

num(1)num(9)+num(2)num(8)+num(3)num(7)+num(4)num(6)

其中num(i)表示数字ia中出现个数。

这个操作就是卷积的计算,而计算卷积的高效算法就是FFT。对于本题,可以构造这样的多项式:

(x1+x2+x3+x5)

数组中每一项对应指数,而数组中出现了的数系数置为1,没出现的数系数置为0。计算这个多项式的平方,即:

(x1+x2+x3+x5)(x1+x2+x3+x5)

上面多项式的展开结果中的每一项bixi即表示2B=i(A,C)个数是bi。具体见代码(用python中的numpy库实现了FFT)

code

posted @   jxs123  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 推荐几款开源且免费的 .NET MAUI 组件库
· 实操Deepseek接入个人知识库
· 易语言 —— 开山篇
· Trae初体验
点击右上角即可分享
微信分享提示
主题色彩