这篇文章主要是为了实现量子傅里叶变换(Quantum Fourier Transform, QFT)的programming做准备,对QFT的算法以及它和在传统计算机上运行的FFT进行比较。

目录

1 FFT

1.1 DFT与FFT

1.2 FFT原理

1.3 FFT算法实现

2 QFT

2.1 QFT原理

2.1.1 计算推倒

2.1.2 量子电路

2.1.3 QFT幺正矩阵/量子门

2.2 举例

2.3 QFT和FFT对比

3 代码部分

参考文献与推荐阅读


1 FFT

FFT快速傅里叶变换是一种快速计算离散傅里叶变换(DFT)以及其逆变换(IDFT)的方法。简单起见,这里我们只对其正变换进行讨论。

1.1 DFT与FFT

  DFT FFT
定义式

时间复杂度

1.2 FFT原理

FFT能够大幅度对传统的DFT提速的原因在于,利用了傅里叶变换的对称性。

根据上面表格里的DFT定义式,用N+k代替k,我们不难得到:

这说明Xk是每N个loop后一重复的,即:

利用这种对称性,Cooley-turkey算法证明了,我们可以将DFT分为两部分,如下:

同理,上图中的拆分可以继续进行下去(代码体现为一个递归函数),因此我们不难发现最终的算法复杂度降低为了

1.3 FFT算法实现

2 QFT

2.1 QFT原理

Quantum Fourier transform是传统的离散傅里叶变换(DFT)的量子解决办法。

DFT的计算式为:

,其中x_0,...,x_{N-1}是一个由复数组成的向量。

量子计算做的就是首先计算量子态,然后再将它映射到去,其中yk就是DFT定义式的所求。

这样的映射也等同于:

2.1.1 计算推倒

(感谢sky-edge的更正,上图中的j_l j_{l+1}...j_m应该是0.j_l j_{l+1}...j_m。)

由此可以对之前的QFT映射做出以下变换:

其中推导过程中出现的表示的是n项相乘。而0.j1j2...jn的表示就是我们刚刚讨论的二进制:

2.1.2 量子电路

由这样的结果,我们可以将量子傅里叶变换表示为一个量子电路(Quantum Circuit):

其中H是Hadamard门,Rk表示的是幺正矩阵形式为的量子门。具体这些门的计算可以在参考文献3或4中详细阅读,最终得到的qubits state是,和2.1.1保持一致。

对于第一个qubit我们用了1个H门和n-1个Rk门(conditional rotations),对于第二个qubit我们用了1个H门和n-2个Rk门(conditional rotations)...所以总共用的门的数量是n+(n-1)+(n-2)+...+1=n(n+1)/2个。上图中省略了一些SWAP运算(用来在计算后交换qubits的位置,应该第一行与最后一行交换,第二行与倒数第二行交换...全部换完后,和2.1.1中的最终算式的顺序保持一致),最多有n/2个SWAP运算,每个SWAP可以用3个CNOT门实现。因此QFT所用的门的数量是O(n^2)。

对于FFT来说,门的数量是O(n·2^n)。

2.1.3 QFT幺正矩阵/量子门

量子傅里叶变换也可以用一个幺正矩阵&量子门表示(任意一种量子门都是幺正矩阵,反之,任意幺正矩阵也是量子门):

, 其中

2.2 举例

此处我们以3qubits的QFT为例进行阐述。

,矩阵表示为:

量子电路为:

经过这个量子电路后,再使用1个SWAP门将第1个和第3个qubit进行交换,就可以得到公式:

我们现在可以假设输入的三个qubit |x1>, |x2>, |x3>都是|0>,计算一下最终的结果:

因此最终{000, 001, 010, 011, 100, 101, 110, 111}这八种情况出现的概率是一样的。

2.3 QFT和FFT对比

速度对比为:

computational cost和二者使用的门的数量是直接挂钩的。如果我们把N和n的关系带入这两个computational cost,就会发现结果和本文的2.1.2部分结论一致。

3 代码部分

参见我的 github 或者这篇CSDN文章(IBM QISKit+Python3.6+Jupyter Notebook实现)。

参考文献与推荐阅读

1. FFT中文维基百科

2. Understanding the FFT Algorithm

3. DFT英文维基百科

4. 教材 Quantum Computation and Quantum Information ,Neilson,P217

5. 文章Quantum Machine Learning for Data Scientists,P23

5. 论文 Quantum Circuit Proposal to Solar Visualization using BDA Radiointerferometer

快速傅里叶变换(FFT)和量子傅里叶变换(QFT)相关推荐

  1. 量子傅里叶变换(QFT)

    很长时间没有回顾QFT算法,等到用的时候,自己推导的时候忘得一干二净,用这篇博客总结一下推导过程. 目录 1.QFT介绍 1.1 离散傅里叶变换 1.2 量子傅里叶变换 1.3 QFT过程推导 2.Q ...

  2. 傅里叶级数、傅里叶变换、量子傅里叶变换(学习笔记)

    量子傅里叶变换 一开始看到这个题目我是这样的: 然后我开始了有关傅里叶变换的学习,我从某站上面截了一张图:顺便附上某站的链接,视觉上很享受. 形象展示傅里叶变换 一.傅里叶级数    在开始这一个部分 ...

  3. fft的c语言和matlab对比_傅里叶级数(FS)、傅里叶变换(FT)快速傅里叶变换(FFT)及量子傅里叶变换(QFT)之间推导关系...

    1 引言 傅里叶级数 (Fourier Series, FS) 是<高等数学>中遇到的一个重要的级数,它可以将任意一个满足狄利克雷条件的函数为一系列三角级数的和.最早由法国数学家傅里叶在研 ...

  4. 使用QISKit实现量子傅里叶变换(QFT),并与FFT,DFT比较

    使用平台为Jupyter Notebook,Python版本3.6,QISKit版本0.6.0.本文的github链接为: https://github.com/yangjy0826/IBM-QISK ...

  5. 基于python的快速傅里叶变换FFT(二)

    基于python的快速傅里叶变换FFT(二) 本文在上一篇博客的基础上进一步探究正弦函数及其FFT变换. 知识点   FFT变换,其实就是快速离散傅里叶变换,傅立叶变换是数字信号处理领域一种很重要的算 ...

  6. 基于python的快速傅里叶变换FFT(一)

    基于python的快速傅里叶变换FFT(一) FFT可以将一个信号变换到频域.有些信号在时域上是很难看出什么特征的,但是如果变换到频域之后,就很容易看出特征了.这就是很多信号分析采用FFT变换的原因. ...

  7. MIT 线性代数 Linear Algebra 26:复矩阵,傅里叶矩阵, 快速傅里叶变换 FFT

    这一讲我们来讲一下复矩阵.线性代数中,复矩阵是避免不了的话题,因为一个简单实矩阵都有可能有复数特征值. 复矩阵 我们着重看一下复矩阵和实矩阵在运算上的区别. 距离 首先,一个复数向量的的距离求法发生了 ...

  8. Java中实现快速傅里叶变换FFT

    Java中实现快速傅里叶变换FFT 一.概述 1.傅里叶变换(FT) 2.离散傅里叶变换(DFT) 3.快速傅里叶变换(FFT) 1)单位根 2)快速傅里叶变换的思想 3)蝶形图 4)快速傅里叶变换的 ...

  9. OpenCV快速傅里叶变换(FFT)用于图像和视讯流的模糊检测

    OpenCV快速傅里叶变换(FFT)用于图像和视频流的模糊检测 翻译自[OpenCV Fast Fourier Transform (FFT) for blur detection in images ...

最新文章

  1. 超级干货:关于数据中台的深度思考与总结
  2. 一些C语言学习的国外资源
  3. 在LINUX 下安装 Realtek 8110SC 千兆网卡驱动
  4. svn 地址中文_iGit自助迁移SVN工程解密
  5. Ubuntu(Debian)apt-get
  6. 人工蜂群算法的最小搜索模型_【优化求解】人工蜂群ABC算法
  7. 桌面虚拟化究竟能给我们带来什么?
  8. Android5更新包,Android5.1无法完成整包的更新
  9. everything is nothing
  10. 母函数 经典题目汇总
  11. 电子工程师常用的单位转换
  12. UG二次开发GRIP总结简明教程
  13. 微信公众平台开发系列之必备知识
  14. 点电荷分布matlab仿真,利用Matlab模拟点电荷的电场分布..doc
  15. 13.请编一个函数void fun(int tt[M][N],int pp[N]),tt指向一个M行N列的二维数组,求出二维数组每列中最小元素,并依次放入pp所指一维数组中。
  16. openlayers2.13 地图绘点[点可以拖动,并且实时更新后台数据],测距同时更新数据到数据库
  17. python爬取QQ空间好友说说并生成词云
  18. 保护计算机数据库,保护Access2000数据库的安全
  19. Vue报错-npm ERR,missing script: serve npm ERR, A complete log of this run can be found in:
  20. 如何理解答案-Leo读提问的智慧(4)

热门文章

  1. Jquery之ShowLoading遮罩组件
  2. Bulk-RNA-seq流程——从测序数据到count文件(AGSdata)
  3. PCB设计技巧百问:
  4. 游戏设计的236个技巧pdf
  5. 用Python画一个喜羊羊的代码
  6. android中Connection.hangup()和Call.hangup()
  7. 青流计划全面升级,京东物流身体力行“绿色创新”!
  8. 宿舍自制Arduino指纹门禁-ESP8266,AS608,BM2166
  9. java火柴人战争_《火柴人战争:遗产》兵种阵容搭配攻略
  10. Python问卷星批量填写,支持数据自定义分布