Groverのアルゴリズム:実際の例ですか?


13

Groverのアルゴリズムが実際にどのように使用されるかについて私はかなり混乱しているので、例を通して説明の助けを求めたいです。

赤、オレンジ、黄色、緑、シアン、青、インディゴ、バイオレットの色を含むN=8要素のデータベースを想定します。この順序である必要はありません。私の目標は、データベースで赤を見つけることです。

Groverのアルゴリズムの入力は、キュビットです。3キュビットは、データセットのインデックスをエンコードします。私の混乱はここにあります(前提について混乱している可能性がありますので、ここで混乱が起こると言ってください)、理解しているように、オラクルは実際にデータセットのインデックスの1つを検索しますオラクルは、どのインデックスを探す必要があるかについて「ハードコード」されています。n=ログ2N=8=3

私の質問は:

  • ここで何が間違っていますか?
  • オラクルがデータベースのインデックスの1つを本当に探している場合、それは、どのインデックスを探しているかをすでに知っていることを意味します。
  • 色に関する上記の条件が与えられた場合、Grover'sで非構造化データセットで赤を探すことが可能であれば、誰かがそれを指摘できますか?

たとえば、111を検索するオラクルを使用したGroverのアルゴリズムの実装があります(または、以下の同じオラクルのR実装を参照してください):https : //quantumcomputing.stackexchange.com/a/2205n=3111のOracle

繰り返しますが、データセット内の要素の位置がわからない場合、このアルゴリズムでは、要素の位置をエンコードする文字列を検索する必要があります。データセットが構造化されていないときにどの位置を探すべきかをどのように知るのですか?NNN

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



回答:


5

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

Haddressn|0address|0value=12n/2x=02n1|xaddress|0value
apply load12n/2バツ=02n1|バツ住所|負荷バツ
ONバツ
|バツ住所|負荷バツ

多分あなたが持っている主な問題は、Groverアルゴリズムではなくデータベースを理解することにあります。詳細については、6.5章Nielsen&Chuangを参照してください。

また、Groverアルゴリズムの最も有用なアプリケーションはデータベースアプリケーションではなく、任意の量子アルゴリズムでの振幅増幅(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ブール式を満足
glS
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.