Grover’s Algorithm (My Lab)

Installing necessary packages

!pip install -U seaborn==0.10
!pip install -U qiskit==0.19
!pip install -U ipywidgets==7.5.1
from IPython.display import clear_output
clear_output()

Review of Grover’s Algorithm

Graded Exercise 1: Implementing Grover’s Algorithm

1) Phase Oracle

from qiskit.quantum_info import Operator
from qiskit import QuantumCircuit
import numpy as np
def phase_oracle(n, indices_to_mark, name = 'Oracle'):
# create a quantum circuit on n qubits
qc = QuantumCircuit(n, name=name)
### WRITE YOUR CODE BETWEEN THESE LINES - START
oracle_matrix = np.identity(2**n)
for index_to_mark in indices_to_mark:
oracle_matrix[index_to_mark, index_to_mark] = -1
### WRITE YOUR CODE BETWEEN THESE LINES - END
# convert your matrix (called oracle_matrix) into an operator, and
# add it to the quantum circuit
qc.unitary(Operator(oracle_matrix), range(n))

return qc

2.) Diffusion Operator 𝑉

def diffuser(n):

# create a quantum circuit on n qubits
qc = QuantumCircuit(n, name='Diffuser')

### WRITE YOUR CODE BETWEEN THESE LINES - START
qc.h(range(n))
qc.append(phase_oracle(n,[0]),range(n))
qc.h(range(n))
### WRITE YOUR CODE BETWEEN THESE LINES - END

return qc

3.) Putting it all together

def Grover(n, indices_of_marked_elements):

# Create a quantum circuit on n qubits
qc = QuantumCircuit(n, n)

# Determine r
r=int(np.floor(np.pi/4*np.sqrt(2**n/len
(indices_of_marked_elements))))
print(f'{n} qubits, basis states {indices_of_marked_elements}
marked, {r} rounds')

# step 1: apply Hadamard gates on all qubits
qc.h(range(n))

# step 2: apply r rounds of the phase oracle and the diffuser
for _ in range(r):
qc.append(phase_oracle(n, indices_of_marked_elements),
range(n))
qc.append(diffuser(n), range(n))

# step 3: measure all qubits
qc.measure(range(n), range(n))

return qc
mycircuit = Grover(6, [1, 42])
mycircuit.draw(output='text')
from qiskit import Aer, execute
simulator = Aer.get_backend('qasm_simulator')
counts = execute(mycircuit, backend=simulator, shots=1000).result().get_counts(mycircuit)
from qiskit.visualization import plot_histogram
plot_histogram(counts)

Additional reading

--

--

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store