算法学习FFT系列(4):任意模数的快速傅里叶变换(MTT)

本文是算法学习FFT系列的第四篇,重点探讨如何处理任意模数的快速傅里叶变换(MTT)。文章讨论了NTT在任意模数下失效的问题,提出了三模数NTT和拆系数FFT两种策略。拆系数FFT通过将每个数拆成k*M+b的形式,利用FFT处理M的部分,然后处理k和b的部分,以满足精度要求。最后,通过DFT合并和IDFT合并的技巧,优化了计算次数,将MTT简化为4次DFT操作。
摘要由CSDN通过智能技术生成

算法学习FFT系列(4):任意模数的快速傅里叶变换(MTT)

毛神好强,毛神好强

任意模数的快速傅里叶变换的解法

这里假设序列是 105 10 5 级别的,模数是 109 10 9 级别的。
首先找到问题的瓶颈。
由于模数的任意性,所以NTT失效了。
而由于如果没有模数,最后的结果是在 1023 10 23 级别,会太大,所以FFT也不适用。
既然找到了瓶颈,所以我们解决的方针就有两种:(1)把NTT推广到任意模数的形式。(2)通过某种方法分步计算FFT使得精度符合要求。

三模数NTT

根据第一种思路,找到三个符合要求的模数在这三个模数意义下分别FFT然后利用中国剩余定理合并一下。
以后有空再补吧,今天主要介绍另外一种。

拆系数FFT

讲每个数拆成 kM+b k ∗ M + b 的形式,其中 M M 是常数
考虑卷积的过程。
( k 1 M + b 1 ) ( k 2 M + b 2 ) = k 1 k 2 M 2 + b 1 k 2 M + b 2 k 1 M + b 1 b 2
M M 这个东西可以FFT出来之后乘
这样子的话,大概估计一下范围,考虑最大的情况。
k 1 k 2 = P M P M = P 2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值