Алгоритм Гровера: пример из реальной жизни?


13

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

Давайте предположим, что база данных N=8 элементов содержит цвета Красный, Оранжевый, Желтый, Зеленый, Голубой, Синий, Индиго и Фиолетовый, и не обязательно в этом порядке. Моя цель - найти Red в базе данных.

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

Мои вопросы:

  • Что я тут не так делаю?
  • Если оракул действительно ищет один из индексов базы данных, это означает, что мы уже знаем, какой индекс мы ищем, так зачем искать?
  • Учитывая вышеприведенные условия с цветами, кто-то может указать на это, если это возможно с помощью Гровера искать красный в неструктурированном наборе данных?

Существуют реализации для алгоритма Гровера с оракулом для ищет | 111>, например (или см. Реализацию R того же оракула 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)

Image2



также связано с: Quantcomputing.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.

Возможно, основная проблема у вас в понимании базы данных, а не алгоритма Гровера. Более подробное объяснение вы можете найти в главе 6.5 Nielsen & Chuang.

Я также думаю, что наиболее полезным применением алгоритма Гровера является не приложение базы данных, а его обобщения как амплитуда амплитуды (см. 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.