Я досить розгублений щодо того, як алгоритм Гровера може бути використаний на практиці, і я хотів би попросити довідки щодо уточнення через приклад.
Припустимо, база даних елементів яка містить кольори Червоний, Помаранчевий, Жовтий, Зелений, Блакитний, Синій, Індиго та Фіолетовий, і не обов'язково в цьому порядку. Моя мета - знайти Red в базі даних.
Вхідним алгоритмом Гровера є кубіти, де 3 кубіти кодують індекси набору даних. Моя плутанина приходить сюди (може бути, плутати щодо приміщень, тож, скажімо, тут відбувається плутанина), що, як я розумію, оракул насправді шукає один з індексів набору даних (представлений суперпозицією трьох кубітів), і, крім того, оракул є "жорстким кодом", для якого індексу його слід шукати.
Мої запитання:
- Що я тут помиляюся?
- Якщо оракул дійсно шукає один з індексів бази даних, це означає, що ми вже знаємо, який індекс ми шукаємо, тож навіщо шукати?
- Враховуючи вищезазначені умови з кольорами, чи може хтось вказати, чи можна з Гровером шукати Red у неструктурованому наборі даних?
Існують реалізації алгоритму Гровера з оракулом для шукають | 111>, наприклад (або див. R-реалізацію того ж оракула нижче): /quantum//a/2205
Знову ж таки, моя плутанина полягає в тому, що я не знаю положення елементів у наборі даних, алгоритм вимагає від мене пошуку рядка, що кодує положення N елементів. Як я можу знати, яку позицію слід шукати, коли набір даних неструктурований?
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)