
1 Deutsch-Jozsa 算法
定义一个函数 𝑓 : {0, 1}
𝑛
→ {0, 1}, 并约定它只能是下面两种类型之一
• 常函数: 对于任意输入 𝑥, 都有 𝑓 (𝑥) = 0 或者 𝑓 (𝑥) = 1
• 平衡函数: 对于一半的输入 𝑥, 有 𝑓 (𝑥) = 0, 另一半的输入 𝑥, 有 𝑓 (𝑥) = 1
希望尽可能少地调用函数 𝑓 , 来判断它是常函数还是平衡函数. 在经典计算中, 最坏情况下需要调用 2
𝑛−1
+
1 次才能确定 𝑓 的类型. 利用 Deutsch-Jozsa 算法, 只需要调用一次量子版本的函数 𝑓 , 就可以确定它的
类型, 线路图如下
.
.
.
.
.
.
.
.
.
|
0
⟩
1
𝐻
𝑈
𝑓
𝐻
|
0
⟩
2
𝐻 𝐻
.
.
.
|
0
⟩
𝑛
𝐻 𝐻
|
1
⟩
𝐻
其中 𝑈
𝑓
是 𝑓 的量子版本, 它的作用是
𝑈
𝑓
|𝑥⟩|𝑦⟩ = |𝑥⟩|𝑦 ⊕ 𝑓 (𝑥)⟩
其中
|
𝑥
⟩
是 𝑛 比特的量子态,
|
𝑦
⟩
是 1 比特的量子态. 系统的初始态为
|𝜓
0
⟩ = |0⟩
⊗𝑛
|1⟩
经过第一组 Hadamard 门之后, 系统的态变为
|𝜓
1
⟩ =
1
√
2
𝑛
2
𝑛
−1
Õ
𝑡=0
|𝑡⟩
⊗
|0⟩ − |1⟩
√
2
=
1
√
2
𝑛+1
2
𝑛
−1
Õ
𝑡=0
(|𝑡⟩ ⊗ |0⟩ − |𝑡⟩ ⊗ |1⟩)
其中左侧的
|
𝑡
⟩
表示 𝑛 比特的量子态处于 𝑡 的二进制表示, 整个左半部分是 𝑓 (𝑥) 所有可能输入 𝑥 的均匀
叠加态. 注意到
𝑈
𝑓
|
𝑥
⟩ |
0
⟩
=
|
𝑥
⟩ |
0
⟩
, 𝑓 (𝑥) = 0
|
𝑥
⟩ |
1
⟩
, 𝑓 (𝑥) = 1
, 𝑈
𝑓
|
𝑥
⟩ |
1
⟩
=
|
𝑥
⟩ |
1
⟩
, 𝑓 (𝑥) = 0
|
𝑥
⟩ |
0
⟩
, 𝑓 (𝑥) = 1
因而
𝑈
𝑓
(|𝑡⟩ ⊗ |0⟩ − |𝑡⟩ ⊗ |1⟩) =
|𝑡⟩ ⊗ |0⟩ − |𝑡⟩ ⊗ |1⟩, 𝑓 (𝑡) = 0
|𝑡⟩ ⊗ |1⟩ − |𝑡⟩ ⊗ |0⟩ = −(|𝑡⟩ ⊗ |0⟩ − | 𝑡⟩ ⊗ |1⟩), 𝑓 (𝑡) = 1