外观
Note 2. 量子Fourier变换
约 1767 字大约 6 分钟
本章介绍量子傅里叶变换(Quantum Fourier Transformation, QFT)
基本概念与量子线路实现
我们已经很熟悉连续傅里叶变换,其一种版本可以表述为:
F(y)=∫−∞∞f(x)e2πixydx,f(x)=∫−∞∞F(y)e−2πixydy
离散傅里叶变换只需将上面的积分改为求和。N 个离散数的傅里叶变换可以表述为:
yk=N1j=0∑N−1xje2πiNjk,xj=N1k=0∑N−1yke−2πiNjk
量子傅里叶变换(QFT)的作用对象是基矢,例如在 N 维空间中,基矢 {∣j⟩} 的量子傅里叶变换为:
∣j⟩→N1k=0∑N−1∣k⟩e2πiNjk
这是一个幺正变换。对于任意态的变换为:
j=0∑N−1xj∣j⟩→k=0∑N−1∣k⟩(N1j=0∑N−1xje2πiNjk)=k=0∑N−1yk∣k⟩
即其相当于对系数做了离散傅里叶变换。
接下来,我们假设 N=2n,即研究n个qubits的变换。系统基矢可用一个二级制数 j=j1⋯jn 表示。此时有下面的结论:
∣j1⋯jn⟩QFT2n/21(∣0⟩+e2πi0.jn∣1⟩)(∣0⟩+e2πi0.jn−1jn∣1⟩)⋯(∣0⟩+e2πi0.j1j2⋯jn∣1⟩)
上式称为QFT的乘积表示。直接计算可验证:
∣j1⋯jn⟩QFT2n/21{ki=0,1}∑e2πij(2k1+22k2+⋯+2nkn)∣k1⋯kn⟩=2n/21i=1⨂n(∣0⟩+e2πi2ij∣1⟩)=2n/21(∣0⟩+e2πi0.jn∣1⟩)(∣0⟩+e2πi0.jn−1jn∣1⟩)⋯(∣0⟩+e2πi0.j1j2⋯jn∣1⟩)
接下来,我们自然会考虑如何用量子线路实现QFT。首先的思路是设计线路实现变换:
∣j1⟩→∣0⟩+e2πi0.jn∣1⟩,⋯,∣jn⟩→∣0⟩+e2πi0.j1⋯jn∣1⟩
但这是不行的,因为为了实现 jn 的变换,我们需要使用 ∣j1⟩,但其已经在第一步中变换掉了。因此,我们需要将整个过程反过来:
∣j1⟩→∣0⟩+e2πi0.j1⋯jn∣1⟩,⋯,∣jn⟩→∣0⟩+e2πi0.jn∣1⟩
这样,后面的变换才不会用到前面的状态。最后我们再做交换运算:
∣j1⟩↔∣jn⟩,∣j2⟩↔∣jn−1⟩,⋯
线路的实现需要用到旋转算符 Rk=∣0⟩⟨0∣+exp(2πi/2k)∣1⟩⟨1∣,QFT的实现线路如下图所示:

旋转门的叠加提供了变换的相位。同时,由于QFT变换是幺正的,我们将上面的线路反过来,就能实现逆量子傅里叶变换(Inverse QFT)。
对于经典的快速傅里叶变换(FFT),其计算时间步长为 NlogN=n2n ,而上面的QFT线路的门数量是 O(n2),因此其相对于经典傅里叶变换是有优势的。然而,QFT实际上有一些问题,首先,没有有效的方法制备初始的任意态 ∑j=0N−1xj∣j⟩。其次也没办法提取出变换后状态的系数 yk。也就是说,QFT并不能有效的用于求解离散傅里叶变换,但其在一些其他的问题上是有优势的。接下来就来介绍几个应用QFT线路的问题。
相位估计
我们的问题是:已知幺正算符 U 有一个本征态 ∣u⟩,满足
U∣u⟩=e2πiφ∣u⟩
希望对 φ∈[0,1) 做出估计。 我们假设已经有一个Oracle可以制备状态 ∣u⟩,并且可以执行 Controlled-U2j 操作。采用下面的线路:

这里,由于 ∣u⟩ 是 U 的本征态,因此 Controlled-U2j 门的作用只是产生一个相位,其等效于对上方的qubits作用一个相位。此时,注意到上面的输出正是QFT变换后的结果形式,因为假设 φ=0.j1⋯jt,则
20φ=0.j1⋯jt,⋯2t−1φ∼0.jt(整数部分不重要)
因此,我们只需对结果做逆QFT,就能得到 ∣j1⟩,⋯,∣jt⟩。

再重新看这个过程,逆QFT变换的效果可以写为:
2t/21j=0∑2t−1e2πijφ∣j⟩⊗∣u⟩inverse QFTb=0∑2t−12t1j=0∑2t−1e2t2πij(2tφ−b)∣b⟩⊗∣u⟩
前面假设了 2tφ 为整数,因此求和的结果是 δb,2tφ,故逆QFT的结果就是 ∣2tφ⟩⊗∣u⟩,这样就能完美得到 φ。而当 2tφ 并不是整数时,求和将得到一系列 ∣b⟩⊗∣u⟩ 的线性叠加,但其在 b=int2tφ 处有峰值,因此测量时大概率能得到 φ 的一个有限位数估计。因此相位估计并不是一个一定成功的算法。这里给出一个结论:定义 b 的误差为 δ=∣φ−2−tb∣(0≤δ≤2−t),如果我们希望 δ<2−n,且算法的成功概率不低于 1−ϵ,则所需的 t 最小为:
t=n+log(2+2ϵ1)
求阶问题与质因数分解
著名的RSA加密算法的核心在于,经典算法对一个大数分解质因数是困难的。对于分解 N=p×q,现在最先进的经典算法完成的时间为:
2(logN)a,a=31
对于量子计算,其按下面的流程进行:
- 如果 N 为偶数,则直接返回2。
- 确定 N 是否可以写为形式 N=ab,如果是则返回 a。此步可以用经典算法高效完成。
- 随机选取一个 x∈{2,⋯,N−1},如果 GCD(x,N)>1 则返回 x。
- 确定最小的 r>0 使得 xr≡1(modN)。
- 若 r 为偶时,计算 GCD(xr/2−1,N) 与 GCD(xr/2+1,N),检查其中是否包含非平凡结果。如果没有,则返回步骤3。 求最大公约数可以使用经典算法高效完成。因此上面需要量子算法参与的只有步骤4,这一步也称为求阶问题。 求阶问题实际上可以等效为一个相位估计问题。考虑一个幺正算符:
Ux∣y⟩≡∣xymodN⟩