快速傅里叶变换(FFT)和量子傅里叶变换(QFT)

news/2024/7/6 1:10:40 标签: QFT, FFT, 傅里叶变

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

目录

FFT-toc" style="margin-left:0px;">1 FFT

FFT-toc" style="margin-left:40px;">1.1 DFT与FFT

FFT%E5%8E%9F%E7%90%86-toc" style="margin-left:40px;">1.2 FFT原理

FFT%E7%AE%97%E6%B3%95%E5%AE%9E%E7%8E%B0-toc" style="margin-left:40px;">1.3 FFT算法实现

QFT-toc" style="margin-left:0px;">2 QFT

QFT%E5%8E%9F%E7%90%86-toc" style="margin-left:40px;">2.1 QFT原理

2.1.1 计算推倒

2.1.2 量子电路

QFT%E5%B9%BA%E6%AD%A3%E7%9F%A9%E9%98%B5%2F%E9%87%8F%E5%AD%90%E9%97%A8-toc" style="margin-left:80px;">2.1.3 QFT幺正矩阵/量子门

2.2 举例

QFT%E5%92%8CFFT%E5%AF%B9%E6%AF%94-toc" style="margin-left:40px;">2.3 QFTFFT对比

3 代码部分

参考文献与推荐阅读


FFT">1 FFT

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

FFT">1.1 DFT与FFT

 DFTFFT
定义式

时间复杂度

FFT%E5%8E%9F%E7%90%86">1.2 FFT原理

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

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

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

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

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

FFT%E7%AE%97%E6%B3%95%E5%AE%9E%E7%8E%B0">1.3 FFT算法实现

QFT">2 QFT

QFT%E5%8E%9F%E7%90%86">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)。

QFT%E5%B9%BA%E6%AD%A3%E7%9F%A9%E9%98%B5%2F%E9%87%8F%E5%AD%90%E9%97%A8">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}这八种情况出现的概率是一样的。

QFT%E5%92%8CFFT%E5%AF%B9%E6%AF%94">2.3 QFTFFT对比

速度对比为:

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


http://www.niftyadmin.cn/n/772613.html

相关文章

自定義控件

http://www.open-open.com/lib/view/open1328836804515.html

Computational Photography 计算摄影学 思维导图

这篇文章内容是我学习KTH DD2424 Computational Photography这门课时整理的学习笔记。课程的主要内容是图像拼接和3D重建。导图如下: pdf版见我的github。

浮點數轉化8字節的16進制

百度進制轉化工具https://www.baidu.com/s?wd%E8%BF%9B%E5%88%B6%E8%BD%AC%E6%8D%A2%E5%99%A8&rsv_spt1&rsv_iqid0x9933a4e5000011a9&issp1&f3&rsv_bp1&rsv_idx2&ieutf-8&tnbaiduhome_pg&rsv_enter0&oq%E8%BF%9B%E5%88%B6%E8%BD%AC%E…

可视化复习

本文为我在KTH学习Visualization这门课的复习笔记。课程简介链接在这儿。由于本文是在国外发布的,在国内阅读文章时可能会出现没有图片的现象,目前我还没有找到好的解决办法,好像CSDN就是这样。所以解决办法就是翻墙~首先给出之前的笔记链接:…

如何安装IBM QISKit,并实现第一个量子程序Bell State

如何安装IBM QISKit,并实现第一个量子程序Bell StateQISKit tutorial -- Bell StatePart 1: Use remote backendPart 2: Use local simulatorPart 3: Visualization of Quantum Circuit使用平台为Jupyter Notebook。QISKit tutorial – Bell State This project is…

Android-自定義控件使用(方便修改控件的風格,只修改布局文件)

user_control_input.xml 布侷文件 ------------ <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"fill_parent"android:layout_h…

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

使用平台为Jupyter Notebook&#xff0c;Python版本3.6&#xff0c;QISKit版本0.6.0。本文的github链接为: https://github.com/yangjy0826/IBM-QISKit/blob/master/qiskit_QFT.ipynb。 Quantum Fourier Transform This is a tutorial for quantum Fourier transform (QFT), …

android Handler的使用

一Handler的定义: 主要接受子线程发送的数据, 并用此数据配合主线程更新UI. 解释: 当应用程序启动时&#xff0c;Android首先会开启一个主线程 (也就是UI线程) , 主线程为管理界面中的UI控件&#xff0c;进行事件分发, 比如说, 你要是点击一个 Button, Android会分发…