Lewati ke konten utama
Proyek ini masih dalam tahap beta. Menemukan bug? Buat isu GitHub. Punya pertanyaan atau ide? Tanya di Discussions — kami sangat menghargai masukan kamu!
Bagaimana kualitas terjemahan di halaman ini?

Pencarian tak terstruktur

Ringkasan​

Kita akan mulai dengan deskripsi masalah yang diselesaikan algoritma Grover. Seperti biasa, kita akan menggunakan Σ={0,1}\Sigma = \{0,1\} untuk menunjukkan alfabet biner sepanjang diskusi ini.

Misalkan

f:Σn→Σf:\Sigma^n \rightarrow \Sigma

adalah fungsi dari string biner dengan panjang nn ke bit. Kita akan berasumsi bahwa kita bisa menghitung fungsi ini secara efisien, tapi selain itu fungsinya sembarang dan kita tidak bisa mengandalkannya memiliki struktur khusus atau implementasi tertentu yang sesuai dengan kebutuhan kita.

Yang dilakukan algoritma Grover adalah mencari string x∈Σnx\in\Sigma^n yang memenuhi f(x)=1f(x) = 1. Kita akan menyebut string seperti ini sebagai solusi untuk masalah pencarian. Jika ada beberapa solusi, maka salah satunya dianggap sebagai output yang benar, dan jika tidak ada solusi, maka jawaban yang benar mengharuskan kita melaporkan bahwa tidak ada solusi.

Tugas ini disebut masalah pencarian tak terstruktur karena kita tidak bisa mengandalkan ff memiliki struktur tertentu untuk memudahkannya. Kita tidak mencari dalam daftar yang terurut, atau dalam struktur data yang dirancang khusus untuk memfasilitasi pencarian, kita pada dasarnya mencari jarum dalam tumpukan jerami.

Secara intuitif, kita mungkin membayangkan bahwa kita memiliki Circuit Boolean yang sangat rumit yang menghitung ff, dan kita bisa dengan mudah menjalankan Circuit ini pada string input yang dipilih jika kita mau. Tapi karena Circuit-nya sangat rumit, mustahil bagi kita memahami Circuit tersebut hanya dengan memeriksanya (selain bahwa kita bisa mengevaluasinya pada string input yang dipilih).

Salah satu cara untuk melakukan tugas pencarian ini secara klasik adalah dengan mengiterasi semua string x∈Σnx\in\Sigma^n, mengevaluasi ff pada setiap satu untuk memeriksa apakah itu solusi atau bukan. Selanjutnya, mari kita tulis

N=2nN = 2^n

demi kepraktisan notasi. Ada NN string dalam Σn\Sigma^n, sehingga mengiterasi semua string tersebut memerlukan NN evaluasi dari ff. Dengan asumsi bahwa kita hanya bisa mengevaluasi ff pada input yang kita pilih, ini adalah yang terbaik yang bisa kita lakukan dengan algoritma deterministik jika kita ingin menjamin keberhasilan. Dengan algoritma probabilistik, kita mungkin berharap menghemat waktu dengan memilih string input ke ff secara acak, tapi kita masih memerlukan O(N)O(N) evaluasi dari ff jika kita ingin metode ini berhasil dengan probabilitas tinggi.

Algoritma Grover menyelesaikan masalah pencarian ini dengan probabilitas tinggi hanya dengan O(N)O(\sqrt{N}) evaluasi dari ff. Untuk memperjelas, evaluasi fungsi ini harus terjadi dalam superposisi, mirip dengan algoritma query yang dibahas di pelajaran Quantum query algorithms, termasuk algoritma Deutsch, algoritma Deutsch-Jozsa, dan algoritma Simon. Tidak seperti algoritma-algoritma itu, algoritma Grover mengambil pendekatan iteratif: mengevaluasi ff pada superposisi string input dan menyelingi evaluasi-evaluasi ini dengan operasi-operasi lain yang memiliki efek menciptakan pola interferensi, menghasilkan solusi dengan probabilitas tinggi (jika ada) setelah O(N)O(\sqrt{N}) iterasi.

Pernyataan masalah formal​

Kita akan memformalisasi masalah yang diselesaikan algoritma Grover menggunakan model komputasi query. Yaitu, kita akan mengasumsikan bahwa kita memiliki akses ke fungsi f:Σn→Σf:\Sigma^n\rightarrow\Sigma melalui Gate query yang didefinisikan dengan cara biasa:

Uf(∣a⟩∣x⟩)=∣a⊕f(x)⟩∣x⟩U_f \bigl( \vert a\rangle \vert x\rangle \bigr) = \vert a \oplus f(x) \rangle \vert x \rangle

untuk setiap x∈Σnx\in\Sigma^n dan a∈Σa\in\Sigma. Ini adalah aksi dari UfU_f pada state basis standar, dan aksinya secara umum ditentukan oleh linearitas.

Seperti yang dibahas di pelajaran Quantum algorithmic foundations, jika kita memiliki Circuit Boolean untuk menghitung ff, kita bisa mengubah deskripsi Circuit Boolean tersebut menjadi Circuit kuantum yang mengimplementasikan UfU_f (menggunakan sejumlah qubit ruang kerja yang memulai dan mengakhiri komputasi dalam state ∣0⟩\vert 0\rangle). Jadi, meskipun kita menggunakan model query untuk memformalisasi masalah yang diselesaikan algoritma Grover, algoritma ini tidak terbatas pada model ini; kita bisa menjalankan algoritma Grover pada fungsi ff mana pun yang kita miliki Circuit Boolean-nya.

Berikut adalah pernyataan masalah secara presisi, yang diberi nama Search karena kita mencari solusi, maksudnya string xx yang membuat ff bernilai 11.

Search

Input: sebuah fungsi f:Σn→Σf:\Sigma^n\rightarrow\Sigma
Output: sebuah string x∈Σnx\in\Sigma^n yang memenuhi f(x)=1f(x) = 1, atau "tidak ada solusi" jika tidak ada string xx seperti itu yang ada

Perhatikan bahwa ini bukan masalah promise — fungsi ff adalah sembarang. Namun, akan sangat membantu untuk mempertimbangkan varian promise berikut dari masalah, di mana kita dijamin bahwa ada tepat satu solusi. Masalah ini muncul sebagai contoh masalah promise di pelajaran Quantum query algorithms.

Unique search

Input: sebuah fungsi berbentuk f:Σn→Σf:\Sigma^n \rightarrow \Sigma
Promise: ada tepat satu string z∈Σnz\in\Sigma^n di mana f(z)=1f(z) = 1, dengan f(x)=0f(x) = 0 untuk semua string x≠zx\neq z
Output: string zz

Perhatikan juga bahwa masalah Or yang disebutkan di pelajaran yang sama erat kaitannya dengan Search. Untuk masalah itu, tujuannya adalah sekadar menentukan ada atau tidaknya solusi, alih-alih benar-benar menemukan solusinya.