Расширить пространство поиска Гровера
Увеличьте пространство поиска одним кубитом и постройте дополненный оракул, когда $M\geq N/2$. В исходном поиске N=8 и используется Oracle из полной программы ниже: X(1),Z(0),Z(1),X(1).
1. Разберитесь в проблеме.
A. Проверьте, что $\theta=\arcsin(2\sqrt{M(N-M)}/N)$ уменьшается при M от N/2 до N. Постройте зависимость θ(M) для N=2¹⁰.
B. Найдите θ и число итераций R для оракула первой части; объясните результат. Дана формула $R=CI(\arccos\sqrt{M/N}/\theta)$, где CI — ближайшее целое с округлением точных половин вниз, например CI(3.5)=3.
2. Найдите решения первой части.
A. Постройте Oracle_new на 2N=16 состояниях с теми же M решениями. Он должен отмечать строку, только если она является исходным решением и дополнительный бит q равен 0. Автор разрешает одно применение исходного Oracle и элементарные квантовые вентили.
B. Найдите нужное R в новом пространстве.
C. Создайте qc_final с R итерациями Гровера. Диффузор теперь должен действовать на четырёхкубитное пространство.
D. Проверьте найденные решения с помощью исходного Oracle.
Это все подпункты второй части. В первом предложении оригинального Goal случайно написано «more than or equal to the number of total items», но там же стоит $M\geq N/2$, и далее текст прямо говорит о половине; именно эта явно заданная область сохранена.
Исходные определения и заготовки (код сохранён без исполнения):
from qiskit import *
from qiskit.tools.visualization import plot_histogram
from qiskit.quantum_info import Operator, Statevector
from qiskit.tools.monitor import job_monitor
from qiskit.ignis.mitigation.measurement import *
import numpy as np
import matplotlib.pyplot as plt
## Create an Oracle
N = 8 # the number of total items in the search space
m = int(np.log2(N)) # the number of qubits required to construct the search space with N items
myqc = QuantumCircuit(m, name='Oracle')
myqc.x(1)
myqc.z(range(2))
myqc.x(1)
Oracle = myqc.to_gate()
qc = QuantumCircuit(m)
qc.append(Oracle, range(m))
### your code goes here
####
Grover = qc.to_gate()
###### your code goes here
###################
circ.draw()
sim = Aer.get_backend('qasm_simulator')
shots = 20000
####### Your code goes here
## Your code goes here
N = 8
## Your code goes here
## your code goes here
## Your code goes here
## Your code goes here
##########################
qc_final.draw()
count = execute(qc_final, sim ,shots=shots).result().get_counts()
plot_histogram(count)
## your code goes hereСообщить об ошибке
Войти, чтобы отправить материал.