Алгоритм Гровера: приклад із реального життя?


13

Я досить розгублений щодо того, як алгоритм Гровера може бути використаний на практиці, і я хотів би попросити довідки щодо уточнення через приклад.

Припустимо, база даних елементів яка містить кольори Червоний, Помаранчевий, Жовтий, Зелений, Блакитний, Синій, Індиго та Фіолетовий, і не обов'язково в цьому порядку. Моя мета - знайти Red в базі даних.N=8

Вхідним алгоритмом Гровера є кубіти, де 3 кубіти кодують індекси набору даних. Моя плутанина приходить сюди (може бути, плутати щодо приміщень, тож, скажімо, тут відбувається плутанина), що, як я розумію, оракул насправді шукає один з індексів набору даних (представлений суперпозицією трьох кубітів), і, крім того, оракул є "жорстким кодом", для якого індексу його слід шукати.n=log2(N=8)=3

Мої запитання:

  • Що я тут помиляюся?
  • Якщо оракул дійсно шукає один з індексів бази даних, це означає, що ми вже знаємо, який індекс ми шукаємо, тож навіщо шукати?
  • Враховуючи вищезазначені умови з кольорами, чи може хтось вказати, чи можна з Гровером шукати Red у неструктурованому наборі даних?

Існують реалізації алгоритму Гровера з оракулом для шукають | 111>, наприклад (або див. R-реалізацію того ж оракула нижче): /quantum//a/2205n=3Oracle для 111

Знову ж таки, моя плутанина полягає в тому, що я не знаю положення елементів у наборі даних, алгоритм вимагає від мене пошуку рядка, що кодує положення N елементів. Як я можу знати, яку позицію слід шукати, коли набір даних неструктурований?NN

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)

Зображення2



також пов'язані з: quantumcomputing.stackexchange.com/q/175/55
glS

Відповіді:


5

|xaddress|0value|xaddress|load(x)0value=|xaddress|load(x)value.

Haddressn|0address|0value=12n/2x=02n1|xaddress|0value
apply load12n/2x=02n1|xaddress|load(x)value
O(N)x
|xaddress|load(x)value.

Можливо, головна проблема у вас полягає в розумінні бази даних, а не в алгоритмі Grover. Більш детальне пояснення ви можете побачити в главі 6.5 Нільсен та Чуанг для цього.

Я також думаю, що найкориснішим застосуванням алгоритму Гровера є не додаток до бази даних, а його узагальнення як амплітудне підсилення (див. Https://arxiv.org/abs/quant-ph/0005055 ) на будь-якому квантовому алгоритмі.


k|k|skksk=+1sk.
glS


4

Це вже частково обговорено в цьому пов'язаному питанні , але я спробую тут розглянути більш конкретно деякі проблеми, які ви виникаєте.

|i(1)f(xi)|i,
ixii

f(xi)xixixiPP

fxiixi

xi=ixi

У такому випадку алгоритм справді не особливо корисний, оскільки відповідь має бути жорстко введено в оракул, але це взагалі не повинно бути.


Дякую за вашу відповідь! Можливо, чи можна було б навести приклад із реального життя, коли Гровер «корисний», застосований до якихось реальних даних з огляду на представлений оракул? Наприклад, як це буде працювати з 8-елементною базою даних з праймерами та не-праймерами?
01000001

1
ffx
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.