问题描述
Deutsch问题:判断函数 f : { 0 , 1 , . . . , 2 n − 1 } → { 0 , 1 } f:\{0,1,..., 2^{n} -1 \}\to\{0,1\} f:{0,1,...,2n−1}→{0,1}是常函数(对所有 x x x, f ( x ) f(x) f(x)是常数)还是平衡函数(恰好对所有 x x x,一半 f ( x ) f(x) f(x)取0,一半 f ( x ) f(x) f(x)取1)。
算法描述
DJ算法对应的量子电路如下:
其中,上面
n
n
n个量子比特存储于查询寄存器,下面一个量子比特存储于答案寄存器。
初始状态:
通过
H
⊗
n
H^{\otimes n}
H⊗n/
H
H
H门:
应用
U
f
U_f
Uf:
通过
H
⊗
n
H^{\otimes n}
H⊗n/
\;\;
门:
测量查询寄存器:
1.若全为0,说明函数
f
f
f 是常函数;
2.否则,说明函数
f
f
f 是平衡函数。
完整算法流程如下:
注意:量子算法通过对函数 f f f一次查询就可以解决Deutsch问题;而与此相比,经典算法需要计算 2 n / 2 + 1 2^n/2+1 2n/2+1次。