zoukankan      html  css  js  c++  java
  • 量子傅里叶变换

    傅里叶变换

    前文中我们了解了Hadamard变换,本文将要介绍傅里叶变换。

    傅里叶变换的使用方式和Hadamard变换非常类似。

    a图大家应该不陌生了,这个就是我们在简单的量子算法(二):Simon's Algorithm中介绍的Simon‘s algorithm,而b图,只是把这个电路中的Hadamard门变成量子傅里叶,就成了一个可以period finding的电路。而period finding是Shor算法的基础。

    那么傅里叶白变换的矩阵表示长什么样子呢?

    一个N比特的傅里叶是这样的:

    [QFT_N= frac{1}{sqrt N}left[ egin{array}{}{1} &{1}&1&…&1 \ 1&{omega} &{omega^2} &{…} &{omega^{N-1}} \ 1&{omega^2} &{omega^4} &{…} &{omega^{2*(N-1)}} \… \ 1&{omega^{N-1}} &{omega^{(N-1)*2}} &{…} &{omega^{(N-1)*(N-1)}}end{array} ight] ]

    其中 (omega =e^{frac{2 pi i}{N}} =cos frac{2 pi}{N}+i sin frac{2 pi}{N})

    第i行j列的就是 (omega ^{ij}) ,需要注意的是,这里的ij都是从零开始计数。

    说这么麻烦,(omega,omega^2, omega^3,…,omega^{N}) 其实就是 (x^N=1) 的N个解。

    那么这个 $ omega $ 又有什么特殊之处呢?

    如果我们令:
    $x=e^{ heta_1 i} =cos heta_1 +i sin heta_1 $

    $y=e^{ heta_2 i} =cos heta_2 +i sin heta_2 $

    那么,

    [egin{align}x*y&=(cos heta_1 +i sin heta_1)(cos heta_2 +i sin heta_2) \ &= cos heta_1 cos heta_2+ isin heta_1cos heta_2 +icos heta_1sin heta_2 + sin heta_1 sin heta_2 \ &=cos( heta_1+ heta_2)+sin( heta_1+ heta_2) \&=e^{i( heta_1+ heta_2)} end{align} ]

    是以,(omega)的相乘,表达出来是 ( heta) 的相加。

    如果让 ( heta_1= 2 pi /N) ,那么(omega,omega^2, omega^3,…,omega^{N}) 所对应的 ( heta) 就正好是 ( heta_1, heta_1*2, heta_1*3, heta_1*4,…,, heta_1*N)

    正巧是一个圆里等分的几个。

    一些和w有关的有趣事实:

    • (1+omega+omega^2+omega^3+…++omega^{N-1}=0) (因为把他们加在一起相当于是一个圆里的几个等分点加在一起,正好回到了原点)
    • (1+omega^j+omega^{2*j}+omega^{3*j}+…++omega^{(N-1)*j}) 为0 如果 (j eq 0) 为N 如果(j=0)
    • (frac{omega^{nj}-1}{omega^j-1}=0 (j eq0))
    • (omega) 的共轭转置是 (omega^{-1})

    量子傅里叶变换和普通的傅里叶变换有有什么区别呢?

    量子傅里叶变换更快

    简单里离散傅里叶变换,需要的时间是 (N^2)

    快速傅里叶变换的是 (Nlog N)

    而量子傅里叶是 (n^2= log^2N)

    量子变换的两个有趣性质

    量子傅里叶的电路图如下图,输入是 (sum_{i=0}^{N-1} alpha_i |i angle) 输出是 (sum_{i=0}^{N-1} eta_i |i angle)

    Convolution-Multiplication

    如果我们输入的量子态的概率幅为 (alpha_0 , alpha_1, alpha_2, alpha_3,…, alpha_{N-1}) ,输出的量子态的概率幅为 (eta_0 , eta_1, eta_2, eta_3,…, eta_{N-1})

    则,当我们将输入的概率幅变为:(alpha_{N-},alpha_0 , alpha_1, alpha_2, …, alpha_{N-2}) 输出的概率不变。(这里写得是概率,不是概率幅,概率是概率幅的平方)

    why?

    原本的输入他们对应的输出是这样的

    (eta_0=alpha_0+alpha_1+alpha_2+…+alpha_{N-1})

    (eta_1=alpha_0+omegaalpha_1+omega^2alpha_2+…+omega^{N-1}alpha_{N-1})

    (eta_i=sum_j omega^{ij} alpha_j)

    当我们改变的我们输入的顺序后

    [eta_0’=alpha_{N-1}+alpha_0+alpha_1+…+alpha_{N-2} ]

    (egin{align}eta_1'&=alpha_{N-1}+omega alpha_0+ omega^2 alpha_1+omega^3alpha_2+…+omega^{N-1}alpha_{N-2}\ &= omega^{N}alpha_{N-1}+omega alpha_0+ omega^2 alpha_1+omega^3alpha_2+…+omega^{N-1}alpha_{N-2} \ &= omega(alpha_0+omegaalpha_1+omega^2alpha_2+…+omega^{N-1}alpha_{N-1}) \&= omega eta_1 end{align})

    在等式的第二步之所以能直接在(alpha_{N-1})前面加上一个(omega^N) ,是因为 (omega^N=1)

    (eta_1)似乎和(eta_1')长得不一样,他们中间还差了一个(omega),但是前面我们说了,(omega)(x^N=1)的解,则,这两个的平方是一样的,即,他们的概率是一样的。

    概率一样意味着什么?

    意味着,当我们把我的输入数据shift后,我在后面的测量得到每种结果的可能性是一样的。

    periodic function

    傅里叶变换可以改变周期函数的周期,如下图:

    不过比起a图,我们更喜欢b图的周期,只在周期处有值,其余处的概率为0,且所有周期处的概率是相等的。

    那么QFT真的能做到这一点吗?

    证明:

    我的输入是 (sqrt{frac{r}{M}}sum_{j=0}^{frac{M}{r}-1}|j*r angle)

    只有在r的整数倍的地方才有值,所以有概率的只有(|j*r angle) ,因为这些值是平均的,概率的总值为1,一共有值的地方有(M/r)个,所以每个地方的概率都是 (r/M) ,又因为这里是概率幅,所以这里提到前面的是 (sqrt{frac{r}{M}})

    傅里叶矩阵,在前面我们已经提到,在矩阵前有一个系数(sqrt{frac{1}{M}}) ,矩阵里第i行j列的就是 (omega ^{ij})

    如果我们要求 (eta_{k frac{M}{r}}) 的值怎么算?

    M/r是(eta) 的周期,前面的k是第几个周期的计数,(k frac{M}{r})对应的,也就是(omega)的i, (omega)的j是第几列的意思,这里是j*r

    (egin{align}eta_{k frac{M}{r}}=&sqrt{frac{r}{M}} *sqrt{frac{1}{M}} sum_{j=0}^{frac{M}{r}-1} omega^{kfrac{M}{r}j*r}\&= frac{sqrt{r}}{M}sum_{j=0}^{frac{M}{r}-1} omega^{k*M*j} \ &=frac{sqrt{r}}{M}sum_{j=0}^{frac{M}{r}-1} 1^{k*j} \ &= frac{sqrt{r}}{M} *frac{M}{r} \ &= frac{1}{sqrt{r}}end{align})

    M就是先前的N,所以 (omega^M=1)

    综上,我们可知,(eta)在周期处的值都相等。

    那么为什么,其他地方的也都是0呢?

    可以直接去推一推,会抵消,也可以这么想,在周期处的概率为1/r,而周期处一共有r个,由于概率和为1,那么其他地方必然没有概率。

    ps:大家有画示意图比较方便的软件吗?感觉自己ppt绘图能画死在这

    参考资料:

    Quantume Mechanics & Quantume Computation Lecture 9

  • 相关阅读:
    错误日志记录代码
    将数组转换成datatable
    C#类头注释
    判断当前页面是否接收到了Get或者Post请求
    HttpRequestUtil类
    WeChatUtil类
    返回上一页
    更改同步异步
    限制只能输入数字
    判断浏览器及版本
  • 原文地址:https://www.cnblogs.com/zmzzzz/p/11266656.html
Copyright © 2011-2022 走看看