我目前正在尝试对德语算法进行编码,并努力测量如何测量x*Qube。阅读example here有助于但不能解决我的根本问题。
用下面的图解作为我提出的问题的基础,在他们提出第二个Hadamard变换的点上,我仍然把我的信息编码为对应于概率>00>>01>>10>11〉的概率向量。
python - 编码Deutsch算法-LMLPHP
我读过的所有内容都表明,我所做的是取前2个值(它们对应于第一个量子位),然后应用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变换给出相同的答案。我错过了什么?

最佳答案

这些打印功能输出的内容是

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

这确实是正确的。如果我们使用dirac符号编写这些向量,并将2位状态分解,它会给出:
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算法(Wikipedia : Deutsch's algorithm)中预期的那样,我们可以删除(删除)第二个寄存器,并对第一个寄存器应用hadamard。它给出
H ( |0> + |1> ) = |0>对于恒定情况
H ( |0> - |1> ) = |1>对于平衡情况
您犯的错误是,我们需要应用hadamard-then-measure的第一个寄存器与您所称的前两个值不对应。我们需要回到dirac符号,首先将全局状态作为两个寄存器的张量积(kronecker积)进行因子化。

10-07 23:55