量子计算 [4].ext + Long算法
Grover搜索算法详解
Grover搜索算法分为两步: 制备均匀叠加态 和 迭代某个过程, 而迭代可以分为两小步: 作用相位黑盒 和 作用Grover扩散算子.
而Grover算子为 , 其中W为Walsh-Hadamard变换 [或叫H变换也ok].

Walsh-Hadamard变换
H变换是一个广义傅里叶变换, 同时也是计算最简单的广义傅里叶变换, N阶H变换定义为: , N = 2^n, 其中
, n为量子位数量. 不难发现这个H矩阵定义与H门一致. 所以H变换在量子计算表现为把H门作用在全部量子位上. 并且因为H门的逆也为H门, 所以H变换的逆也为H变换.
既然H变换是广义傅里叶变换, 那么不难推测H变换实质上也是在分析频率. 但是看到Grover算子中间的部分, 只与变换后的第1个分量有关, 那么只需要关心变换的第1个分量:
, 可以看到变换的第1个分量与数据的总和有关, 或者说与均值有关.

Grover算子
稍微把Grover算子扔进人肉计算机里可以得到: , 其中
, 在不考虑辐角的情况下, 也就是只有实数时, Grover算子实际上就是以系统的均值取对称 [近似对称]. 原论文里的两个例子:



整个迭代
把正确答案写为, 错误答案写为
, 则定义
和
, 其中M为全部正确答案的总数, N为全部答案的总数 [一般N=2^n, n为量子位数量]. 则均匀叠加态写为
, 其中
.
相位黑盒把所有正确答案的相位翻转, 即
因为Grover搜索算法是从均匀叠加态开始, 所以在算法中任意时刻之间的系数都是一致的, 同理
之间也存在这样的关系. 设在某次迭代前系统状态为
. 作用相位黑盒把正确答案的相位翻转:
. 此时系统的均值为
, 作用Grover算子后系统状态为
可以看到单次迭代的净效应是在 空间里逆时针旋转了2θ. 所以最佳迭代次数 j 应该使得系统状态最接近
, 也就是与
的夹角为π/2, 即
, 其中
为向下取整 [floor].
详细计算过程可以看本文结尾 -- 附1

Long算法
Long算法由龙桂鲁教授提出, 可以以概率1给出正确答案.
在Grover算法里, 迭代次数 j 由系统状态在 空间里转动的角度2θ确定, 但因为j只能为正整数, 并且转动角度2θ不够精细, 导致系统状态几乎不可能刚好等于
, 即不太可能以概率1给出正确结果.
Long算法的篇幅实在过长, 需要深入了解的可以去看看原论文. 这里稍微简述一下.
拓展Grover搜索算法: 相位黑盒从 拓展为
, 即从把正确答案的相位旋转π改为旋转
. Grover算子从
拓展为
, 即从把系统状态沿着均值取对称[近似]变为沿着均值把相位旋转φ. 拓展后为了使算法有意义, 需要满足相位匹配条件
.
在Long算法里, 需要指定迭代次数 j, 然后 求得旋转相位 , 为了确保相位有意义, 迭代次数需要满足
, 可以看到Long算法的迭代次数不可以比Grover算法里的迭代次数少, 当 j 小于等于这个下限时, 旋转相位φ为复数, 则算法失去意义.
修改本篇里的Grover算法为Long算法, 需要注意的是, 旋转门需要在使用前确定, 并且旋转角度是由迭代次数确定, 也就是需要在制作黑盒前就确定迭代次数
接下来修改黑盒s:
为了确保一致性, GroverOperator和RunGroverSearching就没有改名字了. 因为Long算法以概率1给出正确答案, 所以并不需要检查答案, 则主体为
优化输出和结果检查套用本篇里的就好.
G. L. Long (2001)

附1
作用相位黑盒后的系统状态为
则均值为
作用Grover算子为
又因为 , 使用倍角公式
化简得: