格罗弗算法#

Grover算法和辅助函数。

待办事项:

  • W门构造(或者可能是-W门,基于默敏的书)

  • 推广一个未知函数的算法,该函数在多个量子比特状态下返回1,而不仅仅是一个。

  • 在OracleGate中实现“表示”

class sympy.physics.quantum.grover.OracleGate(*args, **kwargs)[源代码]#

黑匣子门。

门通过翻转量子比特的符号来标记未知函数的所需量子位。未知函数在找到所需的量子位时返回true,否则返回false。

参数:

量子比特 :内景

量子位的数目。

神谕 :可调用

在计算基础上返回布尔值的可调用函数。

实例

应用一个可以翻转 |2> 在不同的量子位上:

>>> from sympy.physics.quantum.qubit import IntQubit
>>> from sympy.physics.quantum.qapply import qapply
>>> from sympy.physics.quantum.grover import OracleGate
>>> f = lambda qubits: qubits == IntQubit(2)
>>> v = OracleGate(2, f)
>>> qapply(v*IntQubit(2))
-|2>
>>> qapply(v*IntQubit(3))
|3>
property search_function#

一个未知的函数,它帮助找到人们所追求的量子位。

property targets#

目标量子位的元组。

class sympy.physics.quantum.grover.WGate(*args, **kwargs)[源代码]#

Grover算法中的一般n比特W门。

门执行操作 2|phi><phi| - 1 在一些量子位上。 |phi> = (tensor product of n Hadamards)*(|0> with n qubits)

参数:

纳比特 :内景

要操作的量子位数

sympy.physics.quantum.grover.apply_grover(oracle, nqubits, iterations=None)[源代码]#

应用grover算法。

参数:

神谕 :可调用

未知的可调用函数,当应用于所需的量子位时返回true,否则返回false。

返回:

状态 :表达式

Grover算法迭代后的结果状态。

实例

将grover算法应用于2个量子比特的偶数叠加:

>>> from sympy.physics.quantum.qapply import qapply
>>> from sympy.physics.quantum.qubit import IntQubit
>>> from sympy.physics.quantum.grover import apply_grover
>>> f = lambda qubits: qubits == IntQubit(2)
>>> qapply(apply_grover(f, 2))
|2>
sympy.physics.quantum.grover.grover_iteration(qstate, oracle)[源代码]#

应用Oracle和wgate的一个应用程序WV。

参数:

Q状态 :量子比特

量子位元的叠加。

神谕 :OracleGate公司

一种黑盒运算符,它翻转所需基量子比特的符号。

返回:

量子位元 :应用甲骨文和W门后的量子位。

实例

要执行grover的一个阶段的迭代:

>>> from sympy.physics.quantum.qapply import qapply
>>> from sympy.physics.quantum.qubit import IntQubit
>>> from sympy.physics.quantum.grover import OracleGate
>>> from sympy.physics.quantum.grover import superposition_basis
>>> from sympy.physics.quantum.grover import grover_iteration
>>> numqubits = 2
>>> basis_states = superposition_basis(numqubits)
>>> f = lambda qubits: qubits == IntQubit(2)
>>> v = OracleGate(numqubits, f)
>>> qapply(grover_iteration(basis_states, v))
|2>
sympy.physics.quantum.grover.superposition_basis(nqubits)[源代码]#

创建计算基础的相等叠加。

参数:

纳比特 :内景

量子位的数目。

返回:

状态 :量子比特

计算基与nvbits的相等叠加。

实例

创造两个量子位元的相等叠加:

>>> from sympy.physics.quantum.grover import superposition_basis
>>> superposition_basis(2)
|0>/2 + |1>/2 + |2>/2 + |3>/2