Algoritma Grover digunakan, antara lain, untuk mencari item dalam daftar item yang tidak terurut panjangnya . Meskipun ada banyak pertanyaan di sini mengenai topik ini, saya masih merindukan intinya.
Mencari dalam daftar, cara klasik
Biasanya, saya akan merancang fungsi pencarian dengan cara ini
Jadi saya memberikan daftar dan item yang diinginkan sebagai input, dan saya menerima posisi dari item dalam daftar sebagai keluaran. Saya pikir saya sudah mengerti bahwa informasi tentang \ mathbf {y} tertanam dalam algoritma melalui gerbang oracle O , jadi fungsi kita menjadi
\ mathrm {search} _ \ mathbf {y} ([\ mathbf {x} _1, \ mathbf {x} _2, ..., \ mathbf {x} _n]) = i \ in \ mathbb {N} \ quad \ text {sedemikian rupa} \ mathbf {x} _i = \ mathbf {y}
Mari kita buat contoh praktis. Pertimbangkan mencari kartu as sekop 1 \ sekop
Daftar panjang adalah \ mathbf {x} _7 = 6 \ Clubsuit] .
Elemen yang dicari adalah . Saya harus mendapatkan . Setiap kartu dapat dikodekan dengan bit, daftar ini memiliki elemen sehingga kita membutuhkan bit untuk menyandikan daftar. Dalam hal ini, oracle akan mengimplementasikan fungsi:
Namun, input dari algoritma Grover bukanlah keadaan qubit.
(NB: Gambar deck dikocok diambil dari sini )
Grover dan oracle-nya
Beberapa sumber (mis. Di sini - dijelaskan secara grafis) mengatakan bahwa input dari algoritma berbeda: input adalah keadaan yang diambil dari ruang pencarian mana adalah jumlah elemen dari daftar. Setiap angka sesuai dengan posisi elemen dalam daftar.
Input sekarang menjadi vektor qubit , yang harus menjadi superposisi semua item di ruang pencarian .
Kita tahu
- sesuai dengan ;
- sesuai dengan ;
- sesuai dengan ;
- sesuai dengan yang merupakan elemen yang diinginkan;
- dan seterusnya...
Dalam hal ini kita memiliki
Tetapi dalam kasus ini, oracle kita harus mengimplementasikan fungsi
Membangun oracle mengharuskan kita untuk mengetahui bahwa ada di posisi 5. Apa gunanya menjalankan algoritma jika kita sudah mencari elemen untuk membangun oracle?