Estoy bastante confundido acerca de cómo se podría usar el algoritmo de Grover en la práctica y me gustaría pedir ayuda sobre la aclaración a través de un ejemplo.
Supongamos una base de datos de elementos que contiene colores Rojo, Naranja, Amarillo, Verde, Cian, Azul, Indigo y Violeta, y no necesariamente en este orden. Mi objetivo es encontrar Red en la base de datos.
La entrada para el algoritmo de Grover es qubits, donde los 3 qubits codifican los índices del conjunto de datos. Mi confusión viene aquí (podría estar confundido acerca de las premisas, así que más bien decir que la confusión ataca aquí) que, según tengo entendido, el oráculo realmente busca uno de los índices del conjunto de datos (representado por la superposición de los 3 qubits), y además, el oráculo está "codificado" para el índice que debe buscar.
Mis preguntas son:
- ¿Qué me equivoco aquí?
- Si el oráculo realmente está buscando uno de los índices de la base de datos, eso significaría que ya sabemos qué índice estamos buscando, entonces, ¿por qué buscar?
- Dadas las condiciones anteriores con los colores, ¿alguien podría señalarlo si es posible con Grover buscar Rojo en un conjunto de datos no estructurado?
Hay implementaciones para el algoritmo de Grover con un oráculo para buscando | 111>, por ejemplo (o vea una implementación R del mismo oráculo a continuación): /quantum//a/2205
Nuevamente, mi confusión es que, dado que no conozco la posición de elementos en un conjunto de datos, el algoritmo requiere que busque una cadena que codifique la posición de N elementos. ¿Cómo sé qué posición debo buscar cuando el conjunto de datos no está estructurado?
Código 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)