量子计数 [5+4i] -- 量子计数
已知有一个函数 a, 求使得 f 输出1的输入总数.
求解这个问题的算法叫做量子计数(Quantum Counting). 实际上这个算法是Grover算法和相位估计的结合应用. 所以这里也不详细叙述了.

在Grover算法的附章里, 详细讨论了在n个量子位系统里, 单次迭代过程对态的变换为 , 其中
为Grover扩散算子,
为量子相位黑盒版的未知函数f,
为均匀叠加态
在空间
与
的夹角,
为全部使未知函数f输出为1的态的叠加,
为全部使未知函数f输出为0的态的叠加,
为全部
的数量,
为全部态的数量.
不难知道, 单次迭代的特征态与特征值为 ,
;
,
. 使用相位估计可以求出θ, 进而求出M, 即使未知函数 f 输出为1的输入数量.
因为特征态乘上一个非零系数也是特征态, 所以和
也分别是单次迭代的特征态. 这两个态的叠加态为
=
, 也就是说特征态的叠加刚好为容易制备的均匀叠加态
.
使用相位估计对Grover算法里的单次迭代分析, 测量结果得到 和
, 即
, 又因为
, 得
, 最后求得
.

由相位估计的误差分析不难知道, 最佳测量值与实际值
之间存在误差
, 其中m是用于相位估计的量子位数量. 求解误差为
=
=
, 因为
和
* , 所以
, 即
.
因为测量计算后的结果很可能为小数, 所以需要进行四舍五入. 为了得到准确的M, 自然有条件
, 即
. 一般情况下
, 有
. 特别地, 使用
, 在
时误差
取极大值
, 即
.
* 对于|ΔM/N|=|sin(π(φ+Δφ))+sin(πφ)||sin(π(φ+Δφ))-sin(πφ)|, 确实有|sin(π(φ+Δφ))-sin(πφ)|<=π|Δφ|, 但|sin(π(φ+Δφ))+sin(πφ)|<=|2sin(πφ)+πΔφ|在Δφ<0时不一定成立. 实际上这步不是很严谨, 但是教材都这样写, 而且对后续推导没有太大影响, 就这样子吧.

下面以之前用作Grover算法的例子 -- 图形着色问题实际操作一下, 因为大部分代码都在之前演示过, 这里只给出关键代码.
需要注意的是, 上面讨论的Grover扩散算子定义为, 但实际上比较常用的版本为
, 可以看到两个版本相差了一个相位π, 测量后计算M需要注意一下这个差异.
需要注意的是, 尽管运行精度已经足够测量出准确结果, 但是相位估计算法依然有可能给出偏差比较大的结果从而造成很大的误差. 上述代码里的图为4个顶点, 并且4个顶点之间全部连接, 只有4个顶点都为不同颜色才是正确的着色方案, 即总共正确答案数量为 4! = 24 个.
在实际使用中, 量子计数常搭配Grover算法一起使用, 而Grover算法并不需要准确的M, 并且如果M远远小于N时, 相位估计精度m=n+2实在是overkill. 所以m=n+2总共还是拿来玩玩就好, 计算速度实在是硬伤.

你以为我又要推销瑟图群和垃圾库了? 我这次就不推了 (
一晚上赶出来的专栏, 困shi了. 封面随便在瑟图库里找了一张图, 用latex做封面其实也很花时间好吧.