Ich bin ziemlich verwirrt darüber, wie der Algorithmus von Grover in der Praxis eingesetzt werden könnte, und möchte an einem Beispiel um Hilfe bei der Klärung bitten.
Angenommen, eine Element-Datenbank enthält die Farben Rot, Orange, Gelb, Grün, Cyan, Blau, Indigo und Violett und nicht unbedingt in dieser Reihenfolge. Mein Ziel ist es, Rot in der Datenbank zu finden.
Die Eingabe für Grovers Algorithmus ist Qubits, wobei die 3 Qubits die Indizes des Datensatzes codieren. Meine Verwirrung kommt hierher (vielleicht verwirrt über die Prämissen, also sagen wir eher, dass hier Verwirrung herrscht), dass das Orakel meines Wissens tatsächlich nach einem der Indizes des Datensatzes sucht (dargestellt durch die Überlagerung der 3 Qubits). Das Orakel ist "fest codiert", nach welchem Index es suchen soll.
Meine Fragen sind:
- Was mache ich hier falsch?
- Wenn das Orakel wirklich nach einem der Indizes der Datenbank sucht, bedeutet dies, dass wir bereits wissen, nach welchem Index wir suchen. Warum also suchen?
- Könnte jemand in Anbetracht der obigen Bedingungen für die Farben darauf hinweisen, ob es mit Grovers möglich ist, in einem unstrukturierten Datensatz nach Rot zu suchen?
Es gibt Implementierungen für Grover-Algorithmus mit einem Orakel für Suchen nach | 111>, zB (oder einer R - Implementierung des gleichen Orakels siehe unten): /quantum//a/2205
Da ich die Position von Elementen in einem Datensatz nicht kenne , muss ich nach einer Zeichenfolge suchen, die die Position von N Elementen codiert . Woher weiß ich, nach welcher Position ich suchen soll, wenn der Datensatz unstrukturiert ist?
R-Code:
#START
a = TensorProd(TensorProd(Hadamard(I2),Hadamard(I2)),Hadamard(I2))
# 1st CNOT
a1= CNOT3_12(a)
# 2nd composite
# I x I x T1Gate
b = TensorProd(TensorProd(I2,I2),T1Gate(I2))
b1 = DotProduct(b,a1)
c = CNOT3_02(b1)
# 3rd composite
# I x I x TGate
d = TensorProd(TensorProd(I2,I2),TGate(I2))
d1 = DotProduct(d,c)
e = CNOT3_12(d1)
# 4th composite
# I x I x T1Gate
f = TensorProd(TensorProd(I2,I2),T1Gate(I2))
f1 = DotProduct(f,e)
g = CNOT3_02(f1)
#5th composite
# I x T x T
h = TensorProd(TensorProd(I2,TGate(I2)),TGate(I2))
h1 = DotProduct(h,g)
i = CNOT3_01(h1)
#6th composite
j = TensorProd(TensorProd(I2,T1Gate(I2)),I2)
j1 = DotProduct(j,i)
k = CNOT3_01(j1)
#7th composite
l = TensorProd(TensorProd(TGate(I2),I2),I2)
l1 = DotProduct(l,k)
#8th composite
n = TensorProd(TensorProd(Hadamard(I2),Hadamard(I2)),Hadamard(I2))
n1 = DotProduct(n,l1)
n2 = TensorProd(TensorProd(PauliX(I2),PauliX(I2)),PauliX(I2))
a = DotProduct(n2,n1)
#repeat the same from 2st not gate
a1= CNOT3_12(a)
# 2nd composite
# I x I x T1Gate
b = TensorProd(TensorProd(I2,I2),T1Gate(I2))
b1 = DotProduct(b,a1)
c = CNOT3_02(b1)
# 3rd composite
# I x I x TGate
d = TensorProd(TensorProd(I2,I2),TGate(I2))
d1 = DotProduct(d,c)
e = CNOT3_12(d1)
# 4th composite
# I x I x T1Gate
f = TensorProd(TensorProd(I2,I2),T1Gate(I2))
f1 = DotProduct(f,e)
g = CNOT3_02(f1)
#5th composite
# I x T x T
h = TensorProd(TensorProd(I2,TGate(I2)),TGate(I2))
h1 = DotProduct(h,g)
i = CNOT3_01(h1)
#6th composite
j = TensorProd(TensorProd(I2,T1Gate(I2)),I2)
j1 = DotProduct(j,i)
k = CNOT3_01(j1)
#7th composite
l = TensorProd(TensorProd(TGate(I2),I2),I2)
l1 = DotProduct(l,k)
#8th composite
n = TensorProd(TensorProd(PauliX(I2),PauliX(I2)),PauliX(I2))
n1 = DotProduct(n,l1)
n2 = TensorProd(TensorProd(Hadamard(I2),Hadamard(I2)),Hadamard(I2))
n3 = DotProduct(n2,n1)
result=measurement(n3)
plotMeasurement(result)