Quantum Counting Algorithm
April 7, 2024
[1]: from qiskit import QuantumCircuit, transpile
from qiskit.circuit.library import QFT
from qiskit_aer import Aer
from qiskit.visualization import plot_histogram
0.1 Quantum Counting Algorithm
[2]: def grover_operator(n_iterations):
"""Grover iteration circuit for oracle with 5/16 solutions
Args:
n_iterations (int): number of times to repeat the circuit
Returns:
Gate that implements n_iterations of the Grover operator
"""
from qiskit.circuit.library import Diagonal, GroverOperator
oracle = Diagonal([1,1,-1,1,1,1,1,-1,1,1,-1,-1,1,1,-1,1])
grover_it = GroverOperator(oracle).repeat(n_iterations).to_gate()
grover_it.label = f"Grover$^{n_iterations}$"
return grover_it
qft_dagger = QFT(4, inverse=True).to_gate()
qft_dagger.label = "QFT†"
[3]: # Create QuantumCircuit
t = 4 # no. of counting qubits
n = 4 # no. of searching qubits
qc = QuantumCircuit(n+t, t) # Circuit with n+t qubits and t classical bits
# Initialize all qubits to |+>
for qubit in range(t+n):
qc.h(qubit)
# Begin controlled Grover iterations
n_iterations = 1
for qubit in range(t):
cgrit = grover_operator(n_iterations).control()
qc.append(cgrit, [qubit] + list(range(t, n+t)))
1
April 7, 2024
[1]: from qiskit import QuantumCircuit, transpile
from qiskit.circuit.library import QFT
from qiskit_aer import Aer
from qiskit.visualization import plot_histogram
0.1 Quantum Counting Algorithm
[2]: def grover_operator(n_iterations):
"""Grover iteration circuit for oracle with 5/16 solutions
Args:
n_iterations (int): number of times to repeat the circuit
Returns:
Gate that implements n_iterations of the Grover operator
"""
from qiskit.circuit.library import Diagonal, GroverOperator
oracle = Diagonal([1,1,-1,1,1,1,1,-1,1,1,-1,-1,1,1,-1,1])
grover_it = GroverOperator(oracle).repeat(n_iterations).to_gate()
grover_it.label = f"Grover$^{n_iterations}$"
return grover_it
qft_dagger = QFT(4, inverse=True).to_gate()
qft_dagger.label = "QFT†"
[3]: # Create QuantumCircuit
t = 4 # no. of counting qubits
n = 4 # no. of searching qubits
qc = QuantumCircuit(n+t, t) # Circuit with n+t qubits and t classical bits
# Initialize all qubits to |+>
for qubit in range(t+n):
qc.h(qubit)
# Begin controlled Grover iterations
n_iterations = 1
for qubit in range(t):
cgrit = grover_operator(n_iterations).control()
qc.append(cgrit, [qubit] + list(range(t, n+t)))
1