以 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⟩ 状态的数据量子位。
我尝试使用 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⟩ 状态的数据量子位。