4

我目前正在尝试编写 Deutsch 算法并努力解决如何测量 |x> 量子位。阅读此处的示例有所帮助,但并没有解决我的基本问题。

使用下图作为提出我遇到的问题的基础,在他们提出第二次 Hadamard 变换时,我仍然将我的信息编码为对应于 |00>、|01>、| 的概率向量。 10> 和 |11>。

Deutsch 算法图

我读过的所有内容都表明我所做的只是取前两个值(因为它们对应于第一个量子位)并应用 Hadamard 变换,然后查看它是零还是一,但这似乎不起作用。有没有人实现了这一点并对如何实际实现这一点有任何建议?我目前正在使用 Numpy 在 Python 中进行编码,以下是我所拥有的:

x = np.array([[1], [0]])
y = np.array([[0], [1]])
h = calc_hadamard(1)

phi2 = np.kron(h.dot(x), h.dot(y))

constantF = np.array([[1, 0, 0, 0],
                      [0, 1, 0, 0],
                      [0, 0, 1, 0],
                      [0, 0, 0, 1]])

balancedF = np.array([[1, 0, 0, 0],
                      [0, 1, 0, 0],
                      [0, 0, 0, 1],
                      [0, 0, 1, 0]])

print(constantF.dot(phi2))
print(balancedF.dot(phi2))

这些打印功能的输出在哪里

  • (0.5, -0.5, 0.5, -0.5),和
  • (0.5, -0.5, -0.5, 0.5)

正如希望显而易见的那样,这是预期的结果,但是对前两个值执行后续的 Hadamard 变换会给出相同的答案。我在这里想念什么?

4

2 回答 2

3

我读过的所有内容都表明我所做的只是取前两个值(因为它们对应于第一个量子位)并应用 Hadamard 变换,

不,那不是你要做的。您必须对顶对和底对应用 Hadamard 操作。等效地,您必须扩展 1-qubit Hadamard 矩阵以应用于 2-qubit 系统,方法是将其与另一个 qubit 的恒等运算一起张量:

phi3 = constantF.dot(phi2)  # or balancedF
h_on_1_for_2 = np.kron(np.eye(2), h)
phi4 = np.dot(h_on_1_for_2, phi3)
于 2017-11-22T02:28:39.953 回答
2

这些打印功能的输出在哪里

(0.5, -0.5, 0.5, -0.5), and
(0.5, -0.5, -0.5, 0.5)

这确实是正确的。如果我们使用狄拉克符号编写这些向量并分解 2-qubit 状态,它会给出:

  • 1/2 ( |00> - |01> + |10> - |11> ) = 1/2 ( |0> + |1> ) ( |0> - |1> )对于恒定的情况
  • 1/2 ( |00> - |01> - |10> + |11> ) = 1/2 ( |0> - |1> ) ( |0> - |1> )对于平衡的情况

正如在 Deutsch 算法(维基百科:Deutsch's algorithm)中所预期的那样,我们可以将第二个寄存器删除(删除)并将 Hadamard 应用于第一个。它给

  • H ( |0> + |1> ) = |0>对于恒定的情况
  • H ( |0> - |1> ) = |1>对于平衡的情况

您犯的错误是我们需要应用 Hadamard 然后测量的第一个寄存器与您所说的前两个值不对应。我们需要回到狄拉克符号,并首先将全局状态分解为 2 个寄存器的张量积(Kronecker 积)。

于 2018-08-24T10:22:55.197 回答