学习笔记 - 位逆序置换 / 非递归FFT / 快速数论变换(NTT)


前言

递归版的FFT比较容易理解, 然而递归会消耗大量额外的内存空间, 通过位逆序置换(又称蝴蝶变换)可以模拟递归FFT的分治步骤从而对递归FFT进行优化;
而在此基础上由于FFT的精度等问题, 我们可以通过用原根替换单位复根来进一步优化, 以下是我的学习笔记.

递归版FFT学习笔记


一、位逆序置换

1. 分治

以一个长度为8的多项式为例, 其系数如下:
{ a 0 , a 1 , a 2 , a 3 , a 4 , a 5 , a 6 , a 7 } \left\{ a_0,a_1,a_2,a_3,a_4,a_5,a_6,a_7 \right \} { a0,a1,a2,a3,a4,a5,a6,a7}
第一次二分之后:
{ a 0 , a 2 , a 4 , a 6 } , { a 1 , a 3 , a 5 , a 7 } \left\{ a_0,a_2,a_4,a_6 \right \}, \left\{ a_1,a_3,a_5,a_7 \right \} { a0,a2,a4,a6},{ a1,a3,a5,a7}
重复……
{ a 0 , a 4 } , { a 2 , a 6 } , { a 1 , a 5 } , { a 3 , a 7 } \left\{a_0,a_4 \right \},\left\{ a_2,a_6 \right \},\left\{ a_1,a_5 \right \},\left\{ a_3,a_7 \right \} { a0,a4},{ a2,a6},{ a1,a5},{ a3,a7}
直到多项式只有常数项:
{ a 0 } , { a 4 } , { a 2 } , { a 6 } , { a 1 } , { a 5 } , { a 3 } , { a 7 } \left\{ a_0 \right \},\left\{ a_4 \right \},\left\{ a_2 \right \},\left\{ a_6 \right \},\left\{ a_1 \right \},\left\{ a_5 \right \},\left\{ a_3 \right \},\left\{ a_7 \right \} { a0},{ a4},{ a2},{ a6},{ a1},{ a5},{ a3},{ a7}
让我们不妨将它们的下标化为二进制进行观察

原 数 组 : { ( 000 ) 2 } , { ( 001 ) 2 } , { ( 010 ) 2 } , { ( 011 ) 2 } , { ( 100 ) 2 } , { ( 101 ) 2 } , { ( 110 ) 2 } , { ( 111 ) 2 } 最 终 数 组 : { ( 000 ) 2 } , { ( 100 ) 2 } , { ( 010 ) 2 } , { ( 110 ) 2 } , { ( 001 ) 2 } , { ( 101 ) 2 } , { ( 011 ) 2 } , { ( 111 ) 2 } 原数组:\\ \left\{ (000)_2 \right \},\left\{ (001)_2 \right \},\left\{ (010)_2 \right \},\left\{ (011)_2 \right \},\left\{ (100)_2 \right \},\left\{ (101)_2 \right \},\left\{ (110)_2 \right \},\left\{ (111)_2 \right \}\\ 最终数组:\\ \left\{ (000)_2 \right \},\left\{ (100)_2 \right \},\left\{ (010)_2 \right \},\left\{ (110)_2 \right \},\left\{ (001)_2 \right \},\left\{ (101)_2 \right \},\left\{ (011)_2 \right \},\left\{ (111)_2 \right \} :{ (000)2},{ (001)2},{ (010)2

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值