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)
sumber
Jawaban:
Mungkin masalah utama yang Anda miliki adalah memahami database bukan algoritma Grover. Anda dapat melihat penjelasan yang lebih terperinci di bab 6.5 Nielsen & Chuang untuk ini.
Saya juga berpikir bahwa aplikasi yang paling berguna dari algoritma Grover bukanlah aplikasi basis data, tetapi generalisasi sebagai amplifikasi amplitudo (lihat https://arxiv.org/abs/quant-ph/0005055 ) pada algoritma kuantum apa pun.
sumber
Ini sudah sebagian dibahas dalam pertanyaan terkait ini , tetapi saya akan mencoba di sini untuk membahas lebih spesifik beberapa masalah yang Anda angkat.
Dalam kasus seperti itu, algoritme memang tidak terlalu berguna karena jawabannya harus di-hardcode ke dalam oracle, tetapi hal ini tidak harus terjadi secara umum.
sumber