我最近使用 Qiskit 学习量子计算。现在我想知道是否有任何方法可以做到这一点:
例如,我获得一个数组 X,其中每个元素都是其他元素的总和,例如X[0] = y[0][0]+y[0][1]+...+y[0][m]
,X[1] = y[1][0]+y[1][1]+..., ...,
直到X[n]
,X 中的每个元素都是在一次迭代中获得的。任务是找到一定的X[i] == k
。
那我应该在 Grover 的迭代之前完成所有的迭代吗?我读过一些教科书和论文,其中预言是由一些二进制函数将目标状态标记为 1 和条件构建的。据我所知,我现在在 Qiskit 中可以做的是标记指示目标元素位置的索引,例如
from qiskit.circuit.library import Diagonal
from qiskit.quantum_info import Statevector
mark_state = Statevector.from_label('100')
mark_circuit = Diagonal((-1)**mark_state.data) # circuit that induces a -1 phase on the mark_state
那是在Qiskit Terra。Qiskit Aqua 中的另一种方式是调用 Oracle 和 Grover 的 API,但 Oracle 只接受逻辑表达式、真值表和自定义电路:任何人的构造都需要知道确切的 X 和 X[i] 的位置,据我所知。
我想要做的只是说明格罗弗算法的二次优势。如果可能的话,不应该遍历迭代,至少在 oracle 之外,但是如何在代码中实现它呢?