Sono abbastanza confuso su come l'algoritmo di Grover potrebbe essere utilizzato in pratica e vorrei chiedere aiuto per chiarimenti attraverso un esempio.
Supponiamo che database di elementi contenga i colori Rosso, Arancione, Giallo, Verde, Ciano, Blu, Indaco e Viola, e non necessariamente in questo ordine. Il mio obiettivo è trovare Red nel database.
L'input per l'algoritmo di Grover è qubit, in cui i 3 qubit codificano gli indici del set di dati. La mia confusione viene qui (potrebbe essere confusa sulle premesse, quindi piuttosto dire scioperi di confusione qui) che, a quanto ho capito, l'oracolo in realtà cerca uno degli indici del set di dati (rappresentato dalla sovrapposizione dei 3 qubit), e inoltre, l'oracolo è "hardcoded" per quale indice dovrebbe cercare.
Le mie domande sono:
- Cosa mi sbaglio qui?
- Se l'oracolo sta davvero cercando uno degli indici del database, ciò significherebbe che sappiamo già quale indice stiamo cercando, quindi perché cercare?
- Date le condizioni di cui sopra con i colori, qualcuno potrebbe evidenziarlo se è possibile con Grover's cercare Red in un set di dati non strutturato?
Esistono implementazioni per l'algoritmo di Grover con un oracolo per cerca | 111>, ad esempio (o vedi un'implementazione R dello stesso oracolo di seguito): /quantum//a/2205
Ancora una volta, la mia confusione è che, dato che non conosco la posizione di elementi in un set di dati, l'algoritmo mi richiede di cercare una stringa che codifica la posizione di N elementi. Come faccio a sapere quale posizione dovrei cercare quando il set di dati non è strutturato?
Codice R:
#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)