Deutsch-Jozsa 算法#
背景与理论#
Deutsch-Jozsa 算法(Deutsch & Jozsa, 1992)是量子计算中最早展示相对于经典计算指数加速的算法之一。
给定一个黑盒函数 \(f: \{0,1\}^n \to \{0,1\}\),已知 \(f\) 要么是恒定的(constant,对所有输入返回相同值),要么是均衡的(balanced,对一半输入返回 0,另一半返回 1)。Deutsch-Jozsa 算法仅需一次量子查询即可确定 \(f\) 的类型,而经典确定性算法在最坏情况下需要 \(2^{n-1} + 1\) 次查询。
电路结构#
算法步骤如下:
初始化:将 \(n\) 个数据比特置于 \(|+\rangle\) 态,辅助比特置于 \(|-\rangle\) 态:
Oracle 查询:应用预言机 \(U_f\):
利用相位回踢(phase kickback),效果等价于:
Hadamard 变换:对数据比特施加 \(H^{\otimes n}\):
测量:测量数据比特。若 \(f\) 恒定,输出必为 \(|0\rangle^{\otimes n}\);若 \(f\) 均衡,输出必不为全零。
Oracle 构造#
恒定 Oracle:不施加任何门(输出恒为 0)。
均衡 Oracle:对选定的数据比特施加 CNOT 到辅助比特。当输入中有奇数个目标比特为 1 时,辅助比特翻转。这保证了一半输入映射到 0,一半映射到 1。
代码解析#
deutsch_jozsa_oracle#
from uniqc.algorithmics.circuits import deutsch_jozsa_oracle
# 构建均衡 oracle(3 个数据比特,显式传入比特索引列表)
oracle = deutsch_jozsa_oracle(qubits=[0, 1, 2], balanced=True)
# 构建恒定 oracle
oracle = deutsch_jozsa_oracle(qubits=[0, 1, 2], balanced=False)
参数说明:
qubits: 数据比特索引列表(调用方负责指定),辅助比特自动取max(qubits) + 1balanced:True构建均衡 oracle,False构建恒定 oracletarget_bits: 控制辅助比特翻转的数据比特位置(在qubits列表中的下标),None表示全部数据比特
deutsch_jozsa_circuit#
from uniqc.circuit_builder import Circuit
from uniqc.algorithmics.circuits import deutsch_jozsa_circuit, deutsch_jozsa_oracle
n = 3
oracle = deutsch_jozsa_oracle(qubits=list(range(n)), balanced=True)
c = Circuit()
deutsch_jozsa_circuit(c, oracle, qubits=list(range(n)), ancilla=n)
函数自动完成:
数据比特初始化为 \(|+\rangle\),辅助比特初始化为 \(|-\rangle\)
嵌入 oracle 电路
数据比特施加 Hadamard 门
测量数据比特
判定逻辑#
result = run_simulation(c)
if all_zero_probability > 0.9:
print("CONSTANT")
else:
print("BALANCED")
运行示例#
# 均衡 oracle(默认)
python examples/circuits/deutsch-jozsa.py --n-qubits 3 --oracle-type balanced
# 恒定 oracle
python examples/circuits/deutsch-jozsa.py --n-qubits 3 --oracle-type constant
# 更大比特数
python examples/circuits/deutsch-jozsa.py --n-qubits 5 --oracle-type balanced --shots 8192
预期输出(balanced):
Deutsch-Jozsa Algorithm — 3 data qubits
Oracle type: balanced
Results (top outcomes):
|101⟩ 25.0%
|011⟩ 25.0%
...
→ BALANCED function (non-zero measurements detected)
预期输出(constant):
Deutsch-Jozsa Algorithm — 3 data qubits
Oracle type: constant
Results (top outcomes):
|000⟩ 100.0% ← all zeros
→ CONSTANT function (all measurements = |000⟩)
设计说明#
Oracle 构造:均衡 oracle 通过 CNOT 门实现,结构简单且通用。用户可以通过
target_bits参数自定义哪些数据比特参与控制。辅助比特:使用标准的相位回踢技术,辅助比特初始化为 \(|-\rangle\)。
原地修改:
deutsch_jozsa_circuit直接修改传入的 Circuit 对象,与项目 API 风格一致。确定性结果:Deutsch-Jozsa 算法在无噪声情况下结果是确定性的——恒定函数必然测量到全零。
References#
Deutsch, D. & Jozsa, R. (1992). “Rapid solutions of problems by quantum computation.” Proceedings of the Royal Society of London A, 439, 553–558.
Nielsen, M. A. & Chuang, I. L. (2010). “Quantum Computation and Quantum Information.” Cambridge University Press, Section 1.4.