Saya cukup bingung tentang bagaimana algoritma Grover dapat digunakan dalam praktek dan saya ingin meminta bantuan klarifikasi melalui contoh.
Mari kita asumsikan database elemen yang berisi warna Merah, Oranye, Kuning, Hijau, Cyan, Biru, Indigo dan Violet, dan tidak harus dalam urutan ini. Tujuan saya adalah menemukan Merah di basis data.
Input untuk algoritma Grover adalah qubit, di mana 3 qubit mengkodekan indeks dataset. Kebingungan saya datang ke sini (mungkin bingung tentang premisnya sehingga lebih tepatnya mengatakan kebingungan menyerang di sini) bahwa, seperti yang saya pahami, oracle sebenarnya mencari salah satu indeks dataset (diwakili oleh superposisi dari 3 qubit), dan lebih jauh lagi, oracle "hardcoded" untuk indeks mana yang harus dicari.
Pertanyaan saya adalah:
- Apa yang salah di sini?
- Jika oracle benar-benar mencari salah satu indeks dari database, itu berarti kita sudah tahu indeks mana yang kita cari, jadi mengapa mencari?
- Dengan kondisi di atas dengan warna, dapatkah seseorang menunjukkannya jika memungkinkan dengan Grover untuk mencari Red dalam dataset yang tidak terstruktur?
Ada implementasi untuk algoritma Grover dengan oracle untuk mencari | 111>, misalnya (atau lihat implementasi R dari oracle yang sama di bawah): /quantum//a/2205
Sekali lagi, kebingungan saya adalah, mengingat saya tidak tahu posisi elemen dalam dataset, algoritma mengharuskan saya untuk mencari string yang mengkodekan posisi elemen N. Bagaimana saya tahu posisi mana yang harus saya cari ketika dataset tidak terstruktur?
Kode 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)