Deutsch 算法
问题介绍
Deutsch 问题表述为:给定一个单比特输入、单比特输出的布尔函数,通过尽可能少的查询次数来确定该函数是平衡函数还是常函数。
这种单比特输入、单比特输出的布尔函数有 4 种:
x | ||||
---|---|---|---|---|
0 | 0 | 1 | 0 | 1 |
1 | 0 | 1 | 1 | 0 |
其中,
如果使用经典计算机来解决 Deutsch 问题,那么至少需要查询两次才能确定函数的类型:首先查看输入为 0 时函数的输出,然后查看输入为 1 时的输出。但是在量子计算中,这个问题只需要使用一次查询即可知道结果。原始的 Deutsch 只处理单比特布尔的情形,而 Deutsch-Jozsa(DJ)算法泛化了处理 n 比特输入的布尔函数的方法,DJ 算法通过一次查询就可以解决这个问题。
算法实现
Deutsch 算法的电路实现如下所示:

我们定义了一个酉算子
在第一步应用两个 Hadamard 门后,系统状态为:
然后应用了
注意到对于单比特
这里发生了相位反冲现象,
应用最后一个 Hadamard 门到第一个量子比特,我们得到状态:
我们注意到对于常函数来说
示例代码
在这里我们假设想要查询的函数是
c
import std;
oracle u(1, 1) = [1, 0];
procedure main(){
qbit q[2];
X(q[1]);
H(q);
u(q[0], q[1]);
H(q[0]);
M(q[0]);
}