Skip to content
分享链接
回到顶部

量子傅里叶变换

定义

量子傅里叶变换(Quantum Fourier Transform, QFT)是量子因子分解和众多其他量子算法的关键部分,可以简单的认为它是离散傅里叶变换(Discrete Fourier Transform, DFT)在量子领域的形式。
N=2n,量子傅里叶变换作用在一个量子态 |X=j=0N1xj|j 上并且把它映射到 |Y=k=0N1yk|k

yk=1Nj=0N1xje2πijkN

傅里叶变换的矩阵表示为:

QFT=1N[11111ωω2ωN11ω2ω4ω2(N1)1ωN1ω2(N1)ω(N1)(N1),]

其中, ω=e2πi/N.

从基态的视角来看,QFT 是将计算基映射为频率基的一种操作。从定义上不明显,但是 QFT 也是一个酉变换,因此可以使用量子电路来实现。

电路与实现

由 QFT 的定义可以得知,QFT 将状态 |j 映射到 1Nk=0N1e2πijkN|k,举个例子: QFT|0=12(|0+|1),且 QFT|1=12(|0|1),所以可知,Hadamard 门是在单量子比特时的 QFT。
我们可以用二进制表示法来表示 j,则有 j=j1j2j3jn,另外使用二进制表示小数时,有 0.jljl+1jm=jl/2+jl+1/4++jm/2ml+1,那么对于 QFT 的变换,有

QFTN|j=1Nk=0N1e2πijkN|k=1Nk=0N1e2πij(l=1nkl2l)|k1kn用二进制表示法重写k=k1kn,k/2n=l=1nkl2l=1Nk=0N1l=1ne2πijkl2l|k1kl将总和的指数转化为指数的乘积=1Nl=1n(|0+e2πij2l|1)重新排列求和与乘积,并且做了展开k=0N1=k1=01k2=01kn=01=1N(|0+e2πi0.jn|1)(|0+e2πi0.jn1jn|1)(|0+e2πi0.j1jn|1)

该表示可以转化为量子电路如下:

QFT

用 IsQ 的代码实现如下:

c
import std;

procedure R(int k, qbit q) {
    double phase = pi / 2 ** (k - 1);
    ctrl GPhase(phase, q);
} deriving gate

procedure qft(qbit q[]) {
    int len = q.length;
    for i in len-1:-1:-1 {
        H(q[i]);
        for j in 0:i {
            ctrl R(i-j+1, q[j], q[i]);
        }
    }
    for i in 0:len/2 {
        SWAP(q[i], q[len-i-1]);
    }
}

procedure qft_inv(qbit q[]) {
    int len = q.length;
    for i in 0:len/2 {
        SWAP(q[i], q[len-i-1]);
    }
    for i in 0:len {
        for j in 0:i {
            ctrl inv R(i-j+1, q[j], q[i]);
        }
        H(q[i]);
    }
}

举一个简单的例子,当 n=3 时,QFT 的量子电路如下:

QFT3