Lewati ke konten utama

Memilih jumlah iterasi

Kita telah menetapkan bahwa vektor keadaan register Q\mathsf{Q} dalam algoritma Grover tetap berada dalam subruang dua-dimensi yang dibentangkan oleh A0\vert A_0\rangle dan A1\vert A_1\rangle setelah langkah inisialisasi dilakukan.

Tujuannya adalah menemukan elemen xA1x\in A_1, dan tujuan ini akan tercapai jika kita bisa mendapatkan keadaan A1\vert A_1\rangle — karena jika kita mengukur keadaan ini, kita dijamin mendapatkan hasil pengukuran xA1x\in A_1. Mengingat bahwa keadaan Q\mathsf{Q} setelah tt iterasi pada langkah 2 adalah

Gtu=cos((2t+1)θ)A0+sin((2t+1)θ)A1,G^t \vert u \rangle = \cos\bigl((2t + 1)\theta\bigr) \vert A_0\rangle + \sin\bigl((2t + 1)\theta\bigr) \vert A_1\rangle,

kita harus memilih tt sedemikian sehingga

A1Gtu=sin((2t+1)θ)\langle A_1 \vert G^t \vert u \rangle = \sin((2t + 1)\theta)

sedekat mungkin dengan 11 dalam nilai absolut, untuk memaksimalkan probabilitas mendapatkan xA1x\in A_1 dari pengukuran. Untuk sudut θ(0,2π)\theta \in (0,2\pi) manapun, nilai sin((2t+1)θ)\sin((2t + 1)\theta) berosilasi seiring tt meningkat, meskipun tidak harus periodik — tidak ada jaminan kita akan pernah mendapatkan nilai yang sama dua kali.

Secara alami, selain membuat probabilitas mendapatkan elemen xA1x\in A_1 dari pengukuran besar, kita juga ingin memilih tt sekecil mungkin, karena tt aplikasi operasi GG memerlukan tt kueri ke fungsi ff. Karena kita ingin membuat sin((2t+1)θ)\sin( (2t + 1) \theta) mendekati 11 dalam nilai absolut, cara alami untuk melakukannya adalah memilih tt sehingga

(2t+1)θπ2.(2t + 1) \theta \approx \frac{\pi}{2}.

Memecahkan untuk tt menghasilkan

tπ4θ12.t \approx \frac{\pi}{4\theta} - \frac{1}{2}.

Tentu saja, tt harus bilangan bulat, sehingga kita tidak selalu bisa mencapai nilai ini tepat — tetapi yang bisa kita lakukan adalah mengambil bilangan bulat terdekat dengan nilai ini, yaitu

t=π4θ.t = \Bigl\lfloor \frac{\pi}{4\theta} \Bigr\rfloor.

Ini adalah jumlah iterasi yang direkomendasikan untuk algoritma Grover. Saat kita melanjutkan analisis, kita akan melihat bahwa kedekatan bilangan bulat ini dengan nilai target secara alami mempengaruhi kinerja algoritma.

(Sebagai catatan tambahan, jika nilai target π/(4θ)1/2\pi/(4\theta) - 1/2 kebetulan tepat di tengah antara dua bilangan bulat, ekspresi tt ini adalah yang kita dapatkan dengan membulatkan ke atas. Kita bisa secara alternatif membulatkan ke bawah, yang masuk akal karena berarti satu kueri lebih sedikit — tetapi ini bersifat sekunder dan tidak penting untuk keperluan pelajaran.)

Mengingat bahwa nilai sudut θ\theta diberikan oleh rumus

θ=sin1(A1N),\theta = \sin^{-1}\biggl(\sqrt{\frac{\vert A_1\vert}{N}}\biggr),

kita melihat bahwa jumlah iterasi yang direkomendasikan tt bergantung pada jumlah string di A1A_1. Ini menimbulkan tantangan jika kita tidak tahu berapa banyak solusi yang kita miliki, seperti yang akan kita bahas nanti.

Pertama, mari kita fokus pada situasi di mana ada satu string xx sedemikian sehingga f(x)=1f(x)=1. Cara lain untuk menyatakannya adalah bahwa kita sedang mempertimbangkan contoh masalah Pencarian Unik. Dalam kasus ini kita memiliki

θ=sin1(1N),\theta = \sin^{-1}\biggl( \sqrt{\frac{1}{N}} \biggr),

yang dapat didekati secara nyaman sebagai

θ=sin1(1N)1N\theta = \sin^{-1}\biggl( \sqrt{\frac{1}{N}} \biggr) \approx \sqrt{\frac{1}{N}}

ketika NN menjadi besar. Jika kita substitusi θ=1/N\theta = 1/\sqrt{N} ke dalam ekspresi

t=π4θt = \Bigl\lfloor \frac{\pi}{4\theta} \Bigr\rfloor

kita mendapatkan

t=π4N.t = \Bigl\lfloor \frac{\pi}{4}\sqrt{N} \Bigr\rfloor.

Mengingat bahwa tt bukan hanya jumlah kali operasi GG dilakukan, tetapi juga jumlah kueri ke fungsi ff yang diperlukan oleh algoritma, kita melihat bahwa kita sedang menuju untuk mendapatkan algoritma yang memerlukan kueri O(N)O(\sqrt{N}).

Sekarang kita akan menyelidiki seberapa baik pilihan tt yang direkomendasikan bekerja. Probabilitas bahwa pengukuran akhir menghasilkan solusi unik dapat diekspresikan secara eksplisit sebagai

p(N,1)=sin2((2t+1)θ).p(N,1) = \sin^2 \bigl( (2t + 1) \theta \bigr).

Argumen pertama, N,N, mengacu pada jumlah item yang dicari, dan argumen kedua, yang dalam hal ini adalah 1,1, mengacu pada jumlah solusi. Sedikit kemudian kita akan menggunakan notasi yang sama secara lebih umum, di mana ada beberapa solusi.

Berikut adalah tabel probabilitas keberhasilan untuk nilai N=2nN = 2^n yang meningkat.

Np(N,1)20.500000000041.000000000080.9453125000160.9613189697320.9991823155640.99658568081280.99561986572560.99994704215120.999448026210240.999461244720480.999996847840960.999945346181920.9999157752163840.9999997811327680.9999868295655360.9999882596\begin{array}{ll} N & p(N,1)\\ \hline 2 & 0.5000000000\\ 4 & 1.0000000000\\ 8 & 0.9453125000\\ 16 & 0.9613189697\\ 32 & 0.9991823155\\ 64 & 0.9965856808\\ 128 & 0.9956198657\\ 256 & 0.9999470421\\ 512 & 0.9994480262\\ 1024 & 0.9994612447\\ 2048 & 0.9999968478\\ 4096 & 0.9999453461\\ 8192 & 0.9999157752\\ 16384 & 0.9999997811\\ 32768 & 0.9999868295\\ 65536 & 0.9999882596 \end{array}

Perhatikan bahwa probabilitas ini tidak meningkat secara ketat. Khususnya, kita memiliki anomali menarik ketika N=4N=4, di mana kita mendapatkan solusi dengan kepastian. Namun, dapat dibuktikan secara umum bahwa

p(N,1)11Np(N,1) \geq 1 - \frac{1}{N}

untuk semua NN, sehingga probabilitas keberhasilan mendekati 11 dalam batas ketika NN menjadi besar, seperti yang tampaknya disarankan nilai-nilai di atas. Ini bagus!

Tapi perhatikan, bagaimanapun, bahwa bahkan batas lemah seperti p(N,1)1/2p(N,1) \geq 1/2 menetapkan kegunaan algoritma Grover. Untuk hasil pengukuran xx apapun yang kita peroleh dari menjalankan prosedur, kita selalu bisa memeriksa apakah f(x)=1f(x) = 1 menggunakan satu kueri ke ff. Dan jika kita gagal mendapatkan string unik xx di mana f(x)=1f(x) = 1 dengan probabilitas paling banyak 1/21/2 dengan menjalankan prosedur sekali, maka setelah mm jalankan independen dari prosedur kita akan gagal mendapatkan string unik xx ini dengan probabilitas paling banyak 2m2^{-m}. Artinya, menggunakan kueri O(mN)O(m \sqrt{N}) ke ff, kita akan mendapatkan solusi unik xx dengan probabilitas setidaknya 12m1 - 2^{-m}. Menggunakan batas yang lebih baik p(N,1)11/Np(N,1) \geq 1 - 1/N mengungkapkan bahwa probabilitas menemukan xA1x\in A_1 menggunakan metode ini sebenarnya setidaknya 1Nm1 - N^{-m}.

Beberapa solusi

Saat jumlah elemen di A1A_1 bervariasi, begitu pula sudut θ\theta, yang bisa memiliki efek signifikan pada probabilitas keberhasilan algoritma. Untuk singkatnya, mari kita tulis s=A1s = \vert A_1 \vert untuk menyatakan jumlah solusi, dan seperti sebelumnya kita akan asumsikan bahwa s1s\geq 1.

Sebagai contoh motivasi, bayangkan kita memiliki s=4s = 4 solusi daripada solusi tunggal, seperti yang kita pertimbangkan di atas. Ini berarti bahwa

θ=sin1(4N),\theta = \sin^{-1}\biggl( \sqrt{\frac{4}{N}} \biggr),

yang kira-kira dua kali lipat sudut yang kita miliki dalam kasus A1=1\vert A_1 \vert = 1 ketika NN besar. Misalkan kita tidak tahu lebih baik, dan memilih nilai tt yang sama seperti dalam pengaturan solusi unik:

t=π4sin1(1/N).t = \Biggl\lfloor \frac{\pi}{4\sin^{-1}\bigl(1/\sqrt{N}\bigr)}\Biggr\rfloor.

Efeknya akan bencana seperti yang diungkapkan tabel probabilitas berikut.

NProbabilitas keberhasilan41.000000000080.5000000000160.2500000000320.0122070313640.02038076891280.01445307582560.00007050585120.001931074110240.002300908320480.000007750640960.000230150281920.0003439882163840.0000007053327680.0000533810655360.0000472907\begin{array}{ll} N & \text{Probabilitas keberhasilan}\\ \hline 4 & 1.0000000000\\ 8 & 0.5000000000\\ 16 & 0.2500000000\\ 32 & 0.0122070313\\ 64 & 0.0203807689\\ 128 & 0.0144530758\\ 256 & 0.0000705058\\ 512 & 0.0019310741\\ 1024 & 0.0023009083\\ 2048 & 0.0000077506\\ 4096 & 0.0002301502\\ 8192 & 0.0003439882\\ 16384 & 0.0000007053\\ 32768 & 0.0000533810\\ 65536 & 0.0000472907 \end{array}

Kali ini probabilitas keberhasilan mendekati 00 saat NN mendekati tak hingga. Ini terjadi karena kita secara efektif berputar dua kali lebih cepat dari yang kita lakukan saat ada solusi unik, sehingga kita melewati target A1\vert A_1\rangle dan mendarat di dekat A0-\vert A_0\rangle.

Namun, jika sebaliknya kita menggunakan pilihan tt yang direkomendasikan, yaitu

t=π4θt = \Bigl\lfloor \frac{\pi}{4\theta}\Bigr\rfloor

untuk

θ=sin1(sN),\theta = \sin^{-1}\biggl( \sqrt{\frac{s}{N}} \biggr),

maka kinerjanya akan lebih baik. Lebih tepatnya, menggunakan pilihan tt ini mengarah pada keberhasilan dengan probabilitas tinggi.

Np(N,4)41.000000000080.5000000000161.0000000000320.9453125000640.96131896971280.99918231552560.99658568085120.995619865710240.999947042120480.999448026240960.999461244781920.9999968478163840.9999453461327680.9999157752655360.9999997811\begin{array}{ll} N & p(N,4)\\ \hline 4 & 1.0000000000\\ 8 & 0.5000000000\\ 16 & 1.0000000000\\ 32 & 0.9453125000\\ 64 & 0.9613189697\\ 128 & 0.9991823155\\ 256 & 0.9965856808\\ 512 & 0.9956198657\\ 1024 & 0.9999470421\\ 2048 & 0.9994480262\\ 4096 & 0.9994612447\\ 8192 & 0.9999968478\\ 16384 & 0.9999453461\\ 32768 & 0.9999157752\\ 65536 & 0.9999997811 \end{array}

Menggeneralisasi apa yang diklaim sebelumnya, dapat dibuktikan bahwa

p(N,s)1sN,p(N,s) \geq 1 - \frac{s}{N},

di mana kita menggunakan notasi yang disarankan sebelumnya: p(N,s)p(N,s) menyatakan probabilitas bahwa algoritma Grover yang dijalankan untuk tt iterasi mengungkapkan solusi ketika ada ss solusi dari NN kemungkinan secara total.

Batas bawah 1s/N1 - s/N pada probabilitas keberhasilan ini sedikit aneh karena lebih banyak solusi berarti batas bawah yang lebih buruk — tetapi dengan asumsi bahwa ss jauh lebih kecil dari NN, kita tetap menyimpulkan bahwa probabilitas keberhasilan cukup tinggi. Seperti sebelumnya, fakta sederhana bahwa p(N,s)p(N,s) cukup besar menyiratkan kegunaan algoritma.

Kebetulan juga berlaku bahwa

p(N,s)sN.p(N,s) \geq \frac{s}{N}.

Batas bawah ini mendeskripsikan probabilitas bahwa string xΣnx\in\Sigma^n yang dipilih secara seragam acak adalah solusi — jadi algoritma Grover selalu setidaknya sebaik tebakan acak. (Faktanya, ketika t=0t=0, algoritma Grover adalah tebakan acak.)

Sekarang mari kita lihat jumlah iterasi (dan karenanya jumlah kueri)

t=π4θ,t = \Bigl\lfloor \frac{\pi}{4\theta}\Bigr\rfloor,

untuk

θ=sin1(sN).\theta = \sin^{-1}\biggl(\sqrt{\frac{s}{N}}\biggr).

Untuk setiap α[0,1]\alpha \in [0,1], berlaku bahwa sin1(α)α\sin^{-1}(\alpha)\geq \alpha, sehingga

θ=sin1(sN)sN.\theta = \sin^{-1}\left(\sqrt{\frac{s}{N}}\right) \geq \sqrt{\frac{s}{N}}.

Ini berarti bahwa

tπ4θπ4Ns.t \leq \frac{\pi}{4\theta} \leq \frac{\pi}{4}\sqrt{\frac{N}{s}}.

Ini diterjemahkan menjadi penghematan dalam jumlah kueri seiring ss meningkat. Khususnya, jumlah kueri yang diperlukan adalah

O(Ns).O\biggl(\sqrt{\frac{N}{s}}\biggr).

Jumlah solusi yang tidak diketahui

Jika jumlah solusi s=A1s = \vert A_1 \vert tidak diketahui, maka diperlukan pendekatan yang berbeda, karena dalam situasi ini kita tidak memiliki pengetahuan tentang ss untuk menginformasikan pilihan tt kita. Sebenarnya ada beberapa pendekatan.

Satu pendekatan sederhana adalah memilih

t{1,,πN/4}t \in \Bigl\{ 1,\ldots,\bigl\lfloor\pi\sqrt{N}/4\bigr\rfloor \Bigr\}

secara seragam acak. Memilih tt dengan cara ini selalu menemukan solusi (dengan asumsi ada) dengan probabilitas lebih dari 40%, meskipun ini tidak jelas dan memerlukan analisis yang tidak akan disertakan di sini. Namun masuk akal, terutama ketika kita memikirkan gambaran geometris: merotasi keadaan Q\mathsf{Q} sejumlah acak kali seperti ini tidak jauh berbeda dari memilih vektor satuan acak dalam ruang yang dibentangkan oleh A0\vert A_0\rangle dan A1\vert A_1\rangle, yang kemungkinan besar koefisien A1\vert A_1\rangle cukup besar. Dengan mengulangi prosedur ini dan memeriksa hasilnya dengan cara yang sama seperti yang dijelaskan sebelumnya, probabilitas menemukan solusi dapat dibuat sangat dekat dengan 11.

Ada metode yang lebih baik yang menemukan solusi ketika ada satu menggunakan kueri O(N/s)O(\sqrt{N/s}), bahkan ketika jumlah solusi ss tidak diketahui, dan memerlukan kueri O(N)O(\sqrt{N}) untuk menentukan bahwa tidak ada solusi ketika s=0s=0.

Ide dasarnya adalah memilih tt secara seragam acak dari himpunan {1,,T}\{1,\ldots,T\} secara iteratif, untuk nilai TT yang meningkat. Khususnya, kita bisa mulai dengan T=1T = 1 dan meningkatkannya secara eksponensial, selalu menghentikan proses segera setelah solusi ditemukan dan membatasi TT agar tidak membuang kueri ketika tidak ada solusi. Prosesnya memanfaatkan fakta bahwa lebih sedikit kueri diperlukan ketika lebih banyak solusi ada. Namun diperlukan kehati-hatian, untuk menyeimbangkan laju pertumbuhan TT dengan probabilitas keberhasilan setiap iterasi. (Mengambil T54TT \leftarrow \lceil \frac{5}{4}T\rceil misalnya, bekerja, seperti yang diungkapkan analisis. Menggandakan TT, bagaimanapun, tidak — ini ternyata terlalu cepat peningkatannya.)

Kasus trivial

Sepanjang analisis yang baru saja kita lakukan, kita telah mengasumsikan bahwa jumlah solusi bukan nol. Memang, dengan mengacu pada vektor

A0=1A0xA0xA1=1A1xA1x\begin{aligned} \vert A_0\rangle &= \frac{1}{\sqrt{\vert A_0\vert}} \sum_{x\in A_0} \vert x\rangle \\ \vert A_1\rangle &= \frac{1}{\sqrt{\vert A_1\vert}} \sum_{x\in A_1} \vert x\rangle \end{aligned}

kita secara implisit telah mengasumsikan bahwa A0A_0 dan A1A_1 keduanya tidak kosong. Di sini kita akan secara singkat mempertimbangkan apa yang terjadi ketika salah satu dari himpunan ini kosong.

Sebelum kita repot-repot menganalisis, mari kita amati hal yang jelas: jika setiap string xΣnx\in\Sigma^n adalah solusi, maka kita akan melihat solusi ketika kita mengukur; dan ketika tidak ada solusi, kita tidak akan melihat satu pun. Dalam arti tertentu tidak perlu lebih jauh dari ini.

Namun, kita bisa dengan cepat memverifikasi matematika untuk kasus-kasus trivial ini. Situasi di mana salah satu dari A0A_0 dan A1A_1 kosong terjadi ketika ff konstan; A1A_1 kosong ketika f(x)=0f(x) = 0 untuk setiap xΣn,x\in\Sigma^n, dan A0A_0 kosong ketika f(x)=1f(x) = 1 untuk setiap xΣn.x\in\Sigma^n. Ini berarti bahwa

Zfu=±u,Z_f \vert u\rangle = \pm \vert u\rangle,

dan oleh karena itu

Gu=(2uuI)Zfu=±(2uuI)u=±u.\begin{aligned} G \vert u \rangle & = \bigl( 2 \vert u\rangle \langle u \vert - \mathbb{I}\bigr) Z_f\vert u\rangle \\ & = \pm \bigl( 2 \vert u\rangle \langle u \vert - \mathbb{I}\bigr) \vert u\rangle \\ & = \pm \vert u\rangle. \end{aligned}

Jadi, terlepas dari jumlah iterasi tt yang kita lakukan dalam kasus-kasus ini, pengukuran akan selalu mengungkapkan string acak seragam xΣnx\in\Sigma^n.