以 NOT 门为 oracle 的 Deutsch 算法

Deutsch algorithm with NOT gate as oracle

我尝试使用 qiskit 实现 Deutsch 算法。以下是一段代码。

circ = QuantumCircuit(2, 2)  # |q_1q_0>
circ.x(0)
circ.h([0,1])

# Oracle
circ.barrier()
circ.x(1)
circ.barrier()

circ.h(0)
circ.measure([0,1], [0,1])

backend_sim = Aer.get_backend('qasm_simulator')
job = execute(circ, backend_sim, shots=1024)
result = job.result()

counts = result.get_counts(circ)
print(counts)

enter image description here

我预计第一个经典位是0(即那个oracle对应的函数是常量函数)。但是,输出如下。

{'11': 496, '01': 528}

为什么输出暗示函数是平衡函数?

Deutsch 算法将 X 门应用于您用于相位反冲技巧的量子位,以在应用 oracle 之前将其准备在 |-⟩ 状态。您的实现改为将其应用于“数据”量子位,因此算法的综合效果(在 H 门抵消之后)只是准备处于 |1⟩ 状态的数据量子位。