Title: Jacob%20D.%20Biamonte
1Grovers Search
Jake Biamonte
Should be one in four search
- Jacob D. Biamonte
- biamonte_at_ieee.org
- Portland Quantum Logic Group
2Karnaugh Maps for quantum operations
H
X
a0 b0
X
H
3Karnaugh Maps for quantum operations
H
X
a b
X
H
folding
1 1
1 0
1 0 0 0
1 1 1 1
1 1 1 1
0 0
1 1 1 1
1 1 0 0
1 1 1 1
0 0
1 1 1 1
10 1 0
10 1 0
1 1 1 1
1 1 0 0
01 0 1
01 0 1
1 1 1 -1
10 -10
10 -10
01 0-1
01 0-1
Hadamard
wire
4Karnaugh Maps for quantum operations
H
X
a b
X
H
folding
1 1
1 0
1 0 0 0
0 0 0 1
1 1 1 1
0 0
0 0
0 0
1 1 1 1
1 1 0 0
0 0 1 0
0 0
1 0
1 1 1 1
0 1
00 1 0
00 1 0
1 0 0 0
0 0 1 0
00 0 1
00 0 1
0 1 1 0
01 0 0
0 0 1 0
0 0 0 1
10 00
10 0 0
10 0 0
01 00
01 0 0
00 0 1
00 1 0
NOT
wire
5Karnaugh Maps for quantum operations
H
X
a b
X
H
mirroring
folding
1 1
1 0
1 0 0 0
0 0 0 1
0 0 1 0
0 0
0 0
0 0
1 1 1 1
1 1 0 0
0 0 1 0
0 0
1 0
0 0
1 1 1 1
0 1
1 0
10 0 0
0 0 0 1
0 0 1 0
01 0 0
00 0 1
00 1 0
6Why is this important?
- This presentation shows clearly how to perform a
so called 1 in 4 search - We start out with the basics
1 in 4 search
7Pick your needle and I will find you a haystack
The point of this slide is to show examples of 4
different oracles. Grovers search can tell
between these oracles in a single iteration,
classically we would need 3 iterations.
8Properties of the oracle
Let f 0,12 ? 0,1 have the property that
there is exactly one x ? 0,12 for which f (x)
1
Goal find x ? 0,12 for which f (x) 1
Classically 3 queries are necessary
Quantumly ?
Only after 3 tests can we determine with
certainty that the oracles is 1 for only a single
input value x
9A 1-4 search can chose between 4 oracles in one
iteration
Black box for 1-4 search
Start by creating phases in superposition of all
inputs to f
Input state to query (?00? ?01? ?10?
?11?)(?0? ?1?)
10Time
?0?
X
f
H
H
X
M
H
?0?
X
X
M
H
H
H
H
H
?1?
M
H
H
This slide illustrates how the state of the
system is changed as it propagates through the
quantum network implementation of Grovers Search
algorithm.
11Time
?0?
X
f
H
H
X
M
H
?0?
X
X
M
H
H
H
H
H
?1?
M
H
H
ab c 0 1
ab c 0 1
ab c 0 1
ab c 0 1
ab c 0 1
ab c 0 1
0.3 0,3
00 01 11 10
0.3 0,3
00 01 11 10
00 01 11 10
00 01 11 10
00 01 11 10
00 01 11 10
0.3 0,3
- 0.3 0,3
0 0
0 0
0.3 0,3
0.3 0,3
0.3 0,3
0.3 0,3
- 0.5 0,5
- 0.5 0,5
0.3 0,3
- 0.3 0,3
- 0.3 0,3
0.3 - 0,3
0 0
0.5 - 0.5
0.3 0,3
0.3 0,3
0.3 0,3
0.3 0,3
0.5 0,5
0 0
12Time
?0?
X
f
H
H
X
M
H
?0?
X
X
M
H
H
H
H
H
?1?
M
H
H
Hadamard of affine function
Ibverters flip between 00 and 11
Inverter flips second bit when first is 1
Hadamard addis in 00 and 11
ab c 0 1
ab c 0 1
ab c 0 1
Ibverters flip between 00 and 11
ab c 0 1
ab c 0 1
ab c 0 1
ab c 0 1
00 01 11 10
00 01 11 10
00 01 11 10
-0.3 0.3
- 0.3 0.3
00 01 11 10
00 01 11 10
00 01 11 10
00 01 11 10
0.3 0,3
- 0.3 0,3
0 0
0 0
0.3 -0.3
0.3 - 0.3
0.3 0,3
0.3 0,3
- 0.5 0,5
- 0.5 0,5
-1
-0.3 0.3
- 0.3 0.3
- 0.3 0,3
0.3 - 0,3
0 0
0.5 - 0.5
0.3 -0.3
0.3 - 0.3
0.3 0,3
0.3 0,3
0.5 0,5
0 0
13Time
?0?
X
f
H
H
X
M
H
?0?
X
X
M
H
H
H
H
H
?1?
M
H
H
??00? ?00? ?01? ?10? ?11?
??01? ?00? ?01? ?10? ?11?
??10? ?00? ?01? ?10? ?11?
??11? ?00? ?01? ?10? ?11?
After Hadamard the solution is known in Hilbert
space by having value -1. But it is hidded from us
The state corresponding to the input to the
oracle that has a output result of 1 is tagged
with a negative 1.
14QuIDDPro Script --- Density states
- grover4.qpbiamonte_at_ieee.orgstate
cb("001")cb("001")'state hadamard(3)stateha
damard(3)'echo("define a needle in a
haystack") Oracle 1 xi (1,1)
------ ------
--()--oracle
cu_gate(sigma_x(1), "c1c2x3", 3)state
oraclestateoracle'echo("apply CPS")state
kron(hadamard(2), identity(1))statekron(hadamard
(2), identity(1))'state kron(sigma_x(2),
identity(1))statekron(sigma_x(2),
identity(1))'state cu_gate(hadamard(1), "x2",
3)statecu_gate(hadamard(1), "x2", 3)'state
cu_gate(sigma_x(1), "c1x2", 3)statecu_gate(sigma
_x(1), "c1x2", 3)'state cu_gate(hadamard(1),
"x2", 3)statecu_gate(hadamard(1), "x2",
3)'state kron(sigma_x(2), identity(1))statekr
on(sigma_x(2), identity(1))'state
hadamard(3)statehadamard(3
15QuIDDPro Script --- State Vector
- state cb("001")state hadamard(3)stateecho
("define a needle in a haystack")
Oracle 1 xi (1,1) ------
------ --()--oracle
cu_gate(sigma_x(1), "c1c2x3", 3)state
oraclestateecho("apply CPS")state
kron(hadamard(2), identity(1))statestate
kron(sigma_x(2), identity(1))statestate
cu_gate(hadamard(1), "x2", 3)statestate
cu_gate(sigma_x(1), "c1x2", 3)statestate
cu_gate(hadamard(1), "x2", 3)statestate
kron(sigma_x(2), identity(1))statestate
hadamard(3)state
16We found Grover!