前言
因为量子计算的并行性, 搜索问题, 比如说数据库搜索, 最短路径问题, 加密问题, 图形着色问题等, 都被视为可以做到量子加速.
Grover 算法,有时也称为量子搜索算法(quantum search algorithm),指一种在量子计算机上运行的非结构化搜索算法,是量子计算的典型算法之一。
算法原理
Grover算法是通用的搜索算法, 通用的意思是, 搜索过程与具体问题无关, 只要满足: 每次执行某个黑盒所有正确答案的相位都被翻转, Grover算法就搜索出黑盒里的"正确"答案.
Grover算法需要反复计算某个过程, 每迭代一次(某种程度内), 测量得到正确答案就会增长. 单次迭代包含两步: 1) 应用黑盒; 2) 应用Grover扩散算子(Grover diffusion operator). 黑盒把正确答案的相位进行翻转, Grover算子把正确答案的出现概率增大, 并减少错误答案的出现概率.
Grover算子表示为
def GroverOperator(register: Qubits) -> None:
# Hadamard Transform
ApplyToEach(Builtin.H, register)
# 翻转全部量子位的状态
ApplyToEach(Builtin.X, register)
# I - 2|1^n❭❬1^n|
Controlled(Builtin.Z, register[:-1], register[-1])
# 翻转全部量子位的状态, 应用Hadamard变换的逆
ApplyToE