Apakah oracle dalam algoritma Grover perlu memuat informasi tentang keseluruhan basis data?


8

Algoritma Grover sering digambarkan sebagai cara untuk mencari database di O(N)waktu. Untuk menggunakannya kita perlu gerbang oracle yang mewakili beberapa fungsifsehinggaadalah jawabannya. Tetapi bagaimana Anda benar-benar membuat "database oracle" seperti itu?f1(1)

Misalkan saya memiliki sebuah array nomor yang berisi tepat sekali dan saya harus mencari index 's. Pada komputer klasik, saya akan memuat array ke dalam memori dan mengulanginya sampai saya menemukan .w w wawww

Sebagai contoh, jika dan , saya berharap mendapatkan 2 sebagai jawabannya (atau 3 dalam 1-pengindeksan).w = 0a=[3,2,0,1,2,3]w=0

Bagaimana cara mewakili array ini di komputer kuantum dan membuat gerbang yang mengembalikan untuk beberapa ? xaxx

Secara khusus, apakah Anda perlu memiliki keseluruhan "basis data" dalam memori kuantum (dengan asumsi ada beberapa cara untuk mengakses register klasik dari gerbang kuantum)?


Jawaban:


5

Tidak.

" Peramal " dalam algoritma Grover adalah fungsi yang, mengingat elemen apa pun , memeriksa apakah adalah elemen yang kita cari, katakanlah . Untuk melakukan ini, oracle tidak memerlukan pengetahuan tentang semua elemen yang ada di database .x k x target x jxkxkxtargetxj

Mungkin membantu untuk mempertimbangkan contoh yang lebih konkret. Katakanlah Anda memiliki basis data nomor telepon empat digit, dengan menunjukkan elemen -th dalam database ini. Anda tertarik untuk mengetahui posisi apa dalam database yang sesuai dengan elemen . Mari kita asumsikan bahwa elemen 10000 dari database adalah satu-satunya elemen seperti itu, yaitu, dan untuk semua .x k k 1234 x 10000 = 1234 x k123420000xkk1234x10000=1234xk1234k10000

Dalam kasus klasik, menjadi basis data tidak disortir, tidak ada cara yang lebih baik daripada menelusuri setiap elemen dalam database, memeriksa masing-masing terhadap target . Untuk melakukan ini, Anda hanya perlu memiliki algoritma yang, diberikan , mengembalikan jika dan sebaliknya. Cara yang setara untuk menyatakan masalah ini adalah dengan mengatakan bahwa kami menginginkan algoritme yang, mengingat daftar pasangan , mengembalikan pasangan sedemikian rupa sehingga adalah yang kita inginkan. Jadi, dalam kasus kami, kami menginginkan algoritma yang memberikan pengembalian1234xkyesxk=1234 { ( k , x k ) } 20000 k = 1 x k { ( k , x k ) } 20000 k = 1 ( 10000 , x 10000 = 1234 ) x kno{(k,xk)}k=120000xk{(k,xk)}k=120000(10000,x10000=1234). Perhatikan bahwa ini berarti bahwa fungsi yang memeriksa setiap pasangan hanya memeriksa fitur-fitur bagian dari negara bagian , yaitu bagian . Memang, jika ini bukan masalahnya, semuanya akan sia-sia karena kami tidak akan memulihkan informasi apa pun.xk

Kerangka terakhir masalah ini adalah salah satu yang harus diingat saat memikirkan algoritma Grover.

Dalam kasus kuantum, pasangan menjadi status kuantum (atau hanya bagaimana biasanya dilambangkan), dan fungsi oracle hanya memeriksa bagian informasi yang disimpan dalam cocok dengan target . Output dari prosedur adalah status . Sekarang, bagian dari keadaan ini kita sudah tahu , karena telah di-hardcode dalam oracle: kita tahu bahwa bagian kedua dari informasi yang dikodekan dalam adalah(k,xk)|ψk|k|ψk|ψ10000|ψ100001234, karena itulah yang kami cari di tempat pertama, dan merupakan informasi yang dikodekan ke dalam oracle itu sendiri. Namun , status juga membawa informasi tambahan , yaitu posisi dalam database: . Informasi ini tidak digunakan untuk membangun oracle , dan merupakan informasi yang kami peroleh dengan menjalankan algoritma.|ψ10000 10000

Akhirnya, perhatikan bahwa oracle tidak tahu apa-apa tentang isi dari database lengkap. Ini hanya mengimplementasikan sebuah fungsi yang memeriksa kondisi tunggal terhadap targetnya. Namun, fakta bahwa gerbang ini bekerja secara koheren berarti bahwa seseorang dapat memasukkan fungsi pemeriksa ini sebagai superposisi dari banyak (mungkin semua) elemen dari database, dan mendapatkan output yang berisi beberapa informasi global tentang semua elemen dalam database.|ψk


1

Anda akan membangun fungsi sehingga pertama kali mengakses item ke- dari array Anda dan kemudian membandingkannya dengan . Implementasi aktual mungkin mengakses array yang dikodekan dalam qubit input (parameter) tambahan seolah-olah itu bit.f ( x ) x wff(x)xw


Apakah ada cara untuk mewakilinya di sirkuit atau matriks operator atau bentuk lain yang lebih konkret? Saya agak bingung bagaimana Anda membuatnya mengakses input tertentu.
Norrius

Karena inputnya adalah informasi klasik (bit daripada qubit, hanya disandikan sebagai qubit), orang dapat dengan mudah "menyalin" mereka dengan CNOT. Itu bukan salinan yang sebenarnya tetapi yang terjerat, tapi itu cukup baik untuk ini. Penting untuk mengompilasi salinan (lagi dengan CNOT) atau algoritma Grover tidak akan berfungsi.
piramida
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.