格罗弗算法#
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>