Groverのアルゴリズムが実際にどのように使用されるかについて私はかなり混乱しているので、例を通して説明の助けを求めたいです。
赤、オレンジ、黄色、緑、シアン、青、インディゴ、バイオレットの色を含む要素のデータベースを想定します。この順序である必要はありません。私の目標は、データベースで赤を見つけることです。
Groverのアルゴリズムの入力は、キュビットです。3キュビットは、データセットのインデックスをエンコードします。私の混乱はここにあります(前提について混乱している可能性がありますので、ここで混乱が起こると言ってください)、理解しているように、オラクルは実際にデータセットのインデックスの1つを検索しますオラクルは、どのインデックスを探す必要があるかについて「ハードコード」されています。
私の質問は:
- ここで何が間違っていますか?
- オラクルがデータベースのインデックスの1つを本当に探している場合、それは、どのインデックスを探しているかをすでに知っていることを意味します。
- 色に関する上記の条件が与えられた場合、Grover'sで非構造化データセットで赤を探すことが可能であれば、誰かがそれを指摘できますか?
たとえば、111を検索するオラクルを使用したGroverのアルゴリズムの実装があります(または、以下の同じオラクルのR実装を参照してください):https : //quantumcomputing.stackexchange.com/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)