网上很少有人提到,写的也很简单,事实上就是很简单...


\(Bluestein's\ Algorithm\),用以解决任意长度\(DFT\)。

考虑\(DFT\)的形式:\[\begin{aligned}y_k&=\sum_{i=0}^{n-1}a_i\omega_n^{ki}\\&=\sum_{i=0}^{n-1}a_i\omega_{2n}^{k^2+i^2-(k-i)^2}\\&=\omega_{2n}^{k^2}\sum_{i=0}^{n-1}a_i\omega_{2n}^{i^2}\omega_{2n}^{-(k-i)^2}\end{aligned}\]

注意到\(\sum\)是个卷积,可以用\(FFT/NTT\)计算。所以\(Bluestein\)的复杂度是\(O(n\log n)\)的。
具体:\(k-i\)可能是负的,所以对后一项右移\(n\)位,令\(f_i=a_i\omega_{2n}^{i^2},\ g_i=\omega_{2n}^{-(i-n)^2}\),那么\(y_k=\omega_{2n}^{k^2}\sum_{i}f_ig_{n+k-i}=\omega_{2n}^{k^2}(f\times g)_{n+k}\)。

\(IDFT\)同理,可以直接令\(\omega_{2n}=\omega_{2n}^{-1}\),代到\(DFT\)的式子里,也可以一样的推一下:\[\begin{aligned}c_k&=\frac{1}{n}\sum_{i=0}^{n-1}a_i\omega_n^{-ki}\\&=\frac{1}{n}\sum_{i=0}^{n-1}a_i\omega_{2n}^{k^2+i^2-(k+i)^2}\\&=\frac{1}{n}\omega_{2n}^{k^2}\sum_{i=0}^{n-1}a_i\omega_{2n}^{i^2}\omega_{2n}^{-(k+i)^2}\end{aligned}\]

令\(f_i=a_i\omega_{2n}^{i^2},\ g_i=\omega_{2n}^{-(2n-1-i)^2}\),那么\(c_k=\frac{1}{n}\omega_{2n}^{k^2}\sum_if_ig_{2n-1-k-i}=\omega_{2n}^{k^2}(f\times g)_{2n-1-k}\)。

上面是一般的做法(其实就是个\(trick\)),但是\(dls\)指出有更好一些的做法:
像这样写成平方需要\(\omega_{2n}\)(有些题可能不存在\(2n\)次单位根),就可以用:\(ij=\binom{i+j}{2}-\binom i2-\binom j2\)来替换:\(y_k=\omega_n^{-\binom k2}\sum_{i=0}^{n-1}a_i\omega_n^{-\binom i2}\omega_n^{\binom{i+j}{2}}\)。


例题

事实上我觉得除了循环卷积需要任意长度\(DFT\)外,其它地方就用不到了...(应该是我做题少)

1. 正睿 青岛集训 Day4 A.智慧树

见这里

2. BZOJ.1919.[CTSC2010]性能优化

也是循环卷积裸题...

3. HDU.4656.Evaluation

类似\(Bluestein\)的\(trick\)应用。题解见这里(我就咕咕咕了)

Bluestein's Algorithm的更多相关文章

  1. [codeforces 901E] Cyclic Cipher 循环卷积-Bluestein's Algorithm

    题目大意: 传送门 给两个数列${B_i}.{C_i}$,长度均为$n$,且${B_i}$循环移位线性无关,即不存在一组系数${X_i}$使得对于所有的$k$均有$\sum_{i=0}^{n-1} X ...

  2. 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT)

    再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT) 目录 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Blueste ...

  3. NTT&FFT(快速?变换)

    NTT&FFT 预先知识:无 我觉得我们可以从NTT/FFT讲起? 两个其实本质相同,都是求 多项式乘积 的算法 FFT \((x,y)\)指复数,我们可以不用管它 首先我们构造单位根\(\o ...

  4. 【Luogu5293】[HNOI2019] 白兔之舞

    题目链接 题目描述 略 Sol 考场上暴力 \(O(L)\) 50分真良心. 简单的推一下式子,对于一个 t 来说,答案就是: \[\sum_{i=0}^{L} [k|(i-t)] {L\choose ...

  5. 【Luogu4191】[CTSC2010] 性能优化

    题目链接 题意简述 求循环卷积意义下的 \(A(x)*B(x)^C\). 模数为 n+1 ,长度为 n. Sol 板子题. 循环卷积可直接把点值快速幂来解决. 所以问题就是要快速 \(DFT\),由于 ...

  6. XJOI NOI训练2 传送

    NTT循环卷积 30分: 可以发现这是一个很明显的分层$DP$,设$dp[i][j]$表示当前走了j步走到i号节点的方案数.如果当前走的步数对节点有限制就直接将这个点的$DP$值赋成$0$ #incl ...

  7. 挑子学习笔记:两步聚类算法(TwoStep Cluster Algorithm)——改进的BIRCH算法

    转载请标明出处:http://www.cnblogs.com/tiaozistudy/p/twostep_cluster_algorithm.html 两步聚类算法是在SPSS Modeler中使用的 ...

  8. PE Checksum Algorithm的较简实现

    这篇BLOG是我很早以前写的,因为现在搬移到CNBLOGS了,经过整理后重新发出来. 工作之前的几年一直都在搞计算机安全/病毒相关的东西(纯学习,不作恶),其中PE文件格式是必须知识.有些PE文件,比 ...

  9. [异常解决] windows用SSH和linux同步文件&linux开启SSH&ssh client 报 algorithm negotiation failed的解决方法之一

    1.安装.配置与启动 SSH分客户端openssh-client和openssh-server 如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有 ...

随机推荐

  1. Tmk吃汤饭

    问题 : Tmk吃汤饭 时间限制: 1 Sec  内存限制: 128 MB 题目描述 Tmk喜欢吃汤饭! Tmk喜欢吃汤饭!! Tmk喜欢吃汤饭!!! 汤饭窗口分点餐和取餐两个窗口,一位蜀黍负责点餐窗 ...

  2. Django中各目录文件的作用

    一般的项目结构如下(大同小异) my_site是一个项目,blog是项目下的应用之一,可以使用创建命令创建更多的应用. 最上层的django文件夹: 自己手动创建,名字随意. 第二层my_site文件 ...

  3. AI学习吧-结算中心

    结算中心流程 在结算中心中,主要是对用户添加到购物车商品的结算,由于用户可能添加了多个课程,但是,结算时会选择性的进行支付.在结算时会选中课程id,和对应的价格策略.在后台,首先会对用户进行校验,验证 ...

  4. C++ Primer 笔记——嵌套类 局部类

    1.嵌套类是一个独立的类,与外层类基本没什么关系.特别的是,外层类的对象和嵌套类的对象是相互独立的.在嵌套类的对象中不包含任何外层类定义的成员,在外层类的对象中也不包含任何嵌套类定义的成员. 2.嵌套 ...

  5. Echarts-各个配置项详细说明总结【转】

    1.图表标题 1 title: { 2 x: 'left', // 水平安放位置,默认为左对齐,可选为: 3 // 'center' ¦ 'left' ¦ 'right' 4 // ¦ {number ...

  6. ThreadPool线程池

    1.GetMaxThreads,GetMinThreads class Program { static void Main(string[] args) { int workerThreads; i ...

  7. 【bzoj4811】[Ynoi2017]由乃的OJ 树链剖分+线段树区间合并

    题解: 好像和noi那题并没有什么区别 只是加上了修改和变成树上 比较显然我们可以用树链剖分来维护

  8. cookie实现刷新不变化树形菜单

    通过设置cookie来保存树形菜单的状态,在页面加载时重新读取cookie来设置菜单. 菜单的HTML结构: <div class="treemenu"> <ul ...

  9. sqlserver中的数据转换与子查询

    数据类型转换 --cast转换 select CAST(1.23 as int) select CAST(1.2345 as decimal(18,2)) select CAST(123 as var ...

  10. phpmyadmin详细的图文使用教程

    做网站用到服务器有很多站长应该都会用到数据库,那么phpmyadmin的使用也会是很多新手站长头大的问题,下面小编详细介绍一下phpmyadmin详细的图文使用教程. 方法/步骤     如何进入ph ...