Lewati ke konten utama

Algoritma Simon

Algoritma Simon adalah algoritma kueri kuantum untuk masalah yang dikenal sebagai masalah Simon. Ini adalah masalah janji dengan nuansa serupa masalah Deutsch-Jozsa dan Bernstein-Vazirani, tetapi spesifikasinya berbeda.

Algoritma Simon penting karena memberikan keunggulan eksponensial kuantum atas algoritma klasik (termasuk probabilistik), dan teknik yang digunakannya menginspirasi penemuan Peter Shor tentang algoritma kuantum efisien untuk faktorisasi bilangan bulat.

Masalah Simon

Fungsi input untuk masalah Simon berbentuk

f:ΣnΣmf:\Sigma^n \rightarrow \Sigma^m

untuk bilangan bulat positif nn dan m.m. Kita bisa membatasi perhatian pada kasus m=nm = n demi kesederhanaan, tetapi tidak banyak yang didapat dari membuat asumsi ini — algoritma Simon dan analisisnya pada dasarnya sama dengan cara manapun.

Masalah Simon

Input: fungsi f:ΣnΣmf:\Sigma^n \rightarrow \Sigma^m
Janji: ada string sΣns\in\Sigma^n sedemikian sehingga [f(x)=f(y)][(x=y)(xs=y)][f(x) = f(y)] \Leftrightarrow [(x = y) \vee (x \oplus s = y)] untuk semua x,yΣnx,y\in\Sigma^n
Output: string ss

Kita akan mengurai janjinya untuk lebih memahami apa yang dikatakannya sebentar lagi, tetapi pertama-tama mari kita perjelas bahwa itu mengharuskan ff memiliki struktur yang sangat khusus — sehingga sebagian besar fungsi tidak akan memenuhi janji ini. Juga tepat untuk mengakui bahwa masalah ini tidak dimaksudkan untuk memiliki kepentingan praktis. Sebaliknya, ini adalah masalah agak buatan yang sengaja dibuat mudah untuk komputer kuantum dan sulit untuk komputer klasik.

Ada dua kasus utama: kasus pertama adalah bahwa ss adalah string semua-nol 0n,0^n, dan kasus kedua adalah ss bukan string semua-nol.

  • Kasus 1: s=0n.s=0^n. Jika ss adalah string semua-nol, kita bisa menyederhanakan pernyataan jika-dan-hanya-jika dalam janji sehingga berbunyi [f(x)=f(y)][x=y].[f(x) = f(y)] \Leftrightarrow [x = y]. Ini setara dengan ff sebagai fungsi satu-ke-satu.

  • Kasus 2: s0n.s\neq 0^n. Jika ss bukan string semua-nol, maka janji yang dipenuhi untuk string ini menyiratkan bahwa ff adalah dua-ke-satu, artinya untuk setiap string keluaran yang mungkin dari f,f, ada tepat dua string masukan yang menyebabkan ff mengeluarkan string itu. Selain itu, dua string masukan ini harus berbentuk ww dan wsw \oplus s untuk beberapa string w.w.

Penting untuk disadari bahwa hanya ada satu string ss yang bisa cocok jika janji dipenuhi, sehingga selalu ada jawaban yang unik dan benar untuk fungsi yang memenuhi janji.

Berikut adalah contoh fungsi berbentuk f:Σ3Σ5f:\Sigma^3 \rightarrow \Sigma^5 yang memenuhi janji untuk string s=011.s = 011.

f(000)=10011f(001)=00101f(010)=00101f(011)=10011f(100)=11010f(101)=00001f(110)=00001f(111)=11010\begin{aligned} f(000) & = 10011 \\ f(001) & = 00101 \\ f(010) & = 00101 \\ f(011) & = 10011 \\ f(100) & = 11010 \\ f(101) & = 00001 \\ f(110) & = 00001 \\ f(111) & = 11010 \end{aligned}

Ada 88 string masukan yang berbeda dan 44 string keluaran yang berbeda, masing-masing terjadi dua kali — jadi ini adalah fungsi dua-ke-satu. Selain itu, untuk dua string masukan yang berbeda yang menghasilkan string keluaran yang sama, kita melihat bahwa XOR bitwise dari dua string masukan ini sama dengan 011,011, yang setara dengan mengatakan bahwa salah satunya sama dengan yang lain yang di-XOR dengan s.s.

Perhatikan bahwa satu-satunya hal yang penting tentang string keluaran yang sebenarnya adalah apakah mereka sama atau berbeda untuk pilihan string masukan yang berbeda. Misalnya, dalam contoh di atas, ada empat string (10011,(10011, 00101,00101, 00001,00001, dan 11010)11010) yang muncul sebagai keluaran f.f. Kita bisa mengganti empat string ini dengan string yang berbeda, selama semuanya berbeda, dan solusi yang benar s=011s = 011 tidak akan berubah.

Deskripsi algoritma

Berikut adalah diagram sirkuit kuantum yang mewakili algoritma Simon.

Algoritma Simon

Untuk lebih jelasnya, ada nn qubit di atas yang dikenai gate Hadamard dan mm qubit di bawah yang langsung masuk ke gate kueri. Tampilannya sangat mirip dengan algoritma yang sudah kita bahas dalam pelajaran, tetapi kali ini tidak ada phase kickback; semua mm qubit bawah masuk ke gate kueri dalam keadaan 0.\vert 0\rangle.

Untuk memecahkan masalah Simon menggunakan sirkuit ini sebenarnya memerlukan beberapa jalankan independen diikuti oleh langkah pemrosesan pasca-klasik, yang akan dijelaskan nanti setelah perilaku sirkuit dianalisis.

Analisis

Analisis algoritma Simon dimulai dengan cara yang sama dengan algoritma Deutsch-Jozsa. Setelah lapisan pertama gate Hadamard dilakukan pada nn qubit atas, keadaannya menjadi

12nxΣn0mx.\frac{1}{\sqrt{2^n}} \sum_{x\in\Sigma^n} \vert 0^m \rangle \vert x\rangle.

Ketika UfU_f dilakukan, keluaran fungsi ff di-XOR ke keadaan semua-nol dari mm qubit bawah, sehingga keadaannya menjadi

12nxΣnf(x)x.\frac{1}{\sqrt{2^n}} \sum_{x\in\Sigma^n} \vert f(x) \rangle \vert x\rangle.

Ketika lapisan kedua gate Hadamard dilakukan, kita mendapatkan keadaan berikut menggunakan rumus yang sama untuk aksi lapisan gate Hadamard seperti sebelumnya.

12nxΣnyΣn(1)xyf(x)y\frac{1}{2^n} \sum_{x\in\Sigma^n} \sum_{y\in\Sigma^n} (-1)^{x\cdot y} \vert f(x) \rangle \vert y\rangle

Pada titik ini, analisis menyimpang dari analisis untuk algoritma-algoritma sebelumnya dalam pelajaran ini.

Kita tertarik pada probabilitas pengukuran menghasilkan setiap string yang mungkin yΣn.y\in\Sigma^n. Melalui aturan untuk menganalisis pengukuran yang dijelaskan dalam pelajaran Beberapa sistem dari kursus Dasar-dasar informasi kuantum, kita menemukan bahwa probabilitas p(y)p(y) untuk mendapatkan string yy sama dengan

p(y)=12nxΣn(1)xyf(x)2.p(y) = \left\|\frac{1}{2^n} \sum_{x\in\Sigma^n} (-1)^{x\cdot y} \vert f(x) \rangle \right\|^2.

Untuk lebih memahami probabilitas ini, kita memerlukan sedikit lebih banyak notasi dan terminologi. Pertama, jangkauan dari fungsi ff adalah himpunan yang berisi semua string keluarannya.

range(f)={f(x):xΣn}\operatorname{range}(f) = \{ f(x) : x\in \Sigma^n \}

Kedua, untuk setiap string zrange(f),z\in\operatorname{range}(f), kita dapat menyatakan himpunan semua string masukan yang menyebabkan fungsi mengevaluasi ke string keluaran zz ini sebagai f1({z}).f^{-1}(\{z\}).

f1({z})={xΣn:f(x)=z}f^{-1}(\{z\}) = \{ x\in\Sigma^n : f(x) = z \}

Himpunan f1({z})f^{-1}(\{z\}) dikenal sebagai preimage dari {z}\{z\} di bawah f.f. Kita bisa mendefinisikan preimage di bawah ff dari himpunan manapun sebagai pengganti {z}\{z\} dengan cara yang analog — itu adalah himpunan semua elemen yang dipetakan ff ke himpunan tersebut. (Notasi ini tidak boleh dikacaukan dengan invers dari fungsi f,f, yang mungkin tidak ada. Fakta bahwa argumen di sisi kiri adalah himpunan {z}\{z\} bukan elemen zz adalah petunjuk yang memungkinkan kita menghindari kebingungan ini.)

Menggunakan notasi ini, kita bisa memisahkan jumlahan dalam ekspresi kita untuk probabilitas di atas untuk mendapatkan

p(y)=12nzrange(f)(xf1({z})(1)xy)z2.p(y) = \left\| \frac{1}{2^n} \sum_{z\in\operatorname{range}(f)} \Biggl(\sum_{x\in f^{-1}(\{z\})} (-1)^{x\cdot y}\Biggr) \vert z \rangle \right\|^2.

Setiap string xΣnx\in\Sigma^n direpresentasikan tepat sekali oleh dua penjumlahan — kita pada dasarnya hanya menempatkan string-string ini ke dalam ember terpisah tergantung pada string keluaran mana z=f(x)z = f(x) yang mereka hasilkan saat kita mengevaluasi fungsi f,f, kemudian menjumlahkan secara terpisah atas semua ember.

Kita sekarang bisa mengevaluasi kuadrat norma Euclidean untuk mendapatkan

p(y)=122nzrange(f)xf1({z})(1)xy2.p(y) = \frac{1}{2^{2n}} \sum_{z\in\operatorname{range}(f)} \left\vert \sum_{x\in f^{-1}(\{z\})} (-1)^{x\cdot y} \right\vert^2.

Untuk menyederhanakan probabilitas ini lebih lanjut, mari kita lihat nilai

xf1({z})(1)xy2(1)\left\vert \sum_{x\in f^{-1}(\{z\})} (-1)^{x\cdot y} \right\vert^2 \tag{1}

untuk pilihan arbitrer dari zrange(f).z\in\operatorname{range}(f).

Jika ternyata s=0n,s = 0^n, maka ff adalah fungsi satu-ke-satu dan selalu ada hanya satu elemen xf1({z}),x\in f^{-1}(\{z\}), untuk setiap zrange(f).z\in\operatorname{range}(f). Nilai ekspresi (1)(1) adalah 11 dalam kasus ini.

Jika, di sisi lain, s0n,s\neq 0^n, maka ada tepat dua string dalam himpunan f1({z}).f^{-1}(\{z\}). Lebih tepatnya, jika kita memilih wf1({z})w\in f^{-1}(\{z\}) sebagai salah satu dari dua string ini, maka string lainnya harus wsw \oplus s berdasarkan janji dalam masalah Simon. Menggunakan observasi ini kita bisa menyederhanakan (1)(1) sebagai berikut.

xf1({z})(1)xy2=(1)wy+(1)(ws)y2=(1)wy(1+(1)sy)2=1+(1)ys2={4ys=00ys=1\begin{aligned} \left\vert \sum_{x\in f^{-1}(\{z\})} (-1)^{x\cdot y} \right\vert^2 & = \Bigl\vert (-1)^{w\cdot y} + (-1)^{(w\oplus s)\cdot y} \Bigr\vert^2 \\ & = \Bigl\vert (-1)^{w\cdot y} \Bigl(1 + (-1)^{s\cdot y}\Bigr) \Bigr\vert^2 \\ & = \Bigl\vert 1 + (-1)^{y\cdot s} \Bigr\vert^2 \\ & = \begin{cases} 4 & y \cdot s = 0\\[1mm] 0 & y \cdot s = 1 \end{cases} \end{aligned}

Jadi, ternyata nilai (1)(1) tidak bergantung pada pilihan spesifik zrange(f)z\in\operatorname{range}(f) dalam kedua kasus.

Kita sekarang bisa menyelesaikan analisis dengan melihat dua kasus yang sama seperti sebelumnya secara terpisah.

  • Kasus 1: s=0n.s = 0^n. Dalam kasus ini fungsi ff adalah satu-ke-satu, sehingga ada 2n2^n string zrange(f),z\in\operatorname{range}(f), dan kita mendapatkan

    p(y)=122n2n=12n.p(y) = \frac{1}{2^{2n}} \cdot 2^n = \frac{1}{2^n}.

    Dengan kata lain, pengukuran menghasilkan string yΣny\in\Sigma^n yang dipilih secara seragam acak.

  • Kasus 2: s0n.s \neq 0^n. Dalam kasus ini ff adalah dua-ke-satu, sehingga ada 2n12^{n-1} elemen dalam range(f).\operatorname{range}(f). Menggunakan rumus dari atas kita menyimpulkan bahwa probabilitas mengukur setiap yΣny\in\Sigma^n adalah

    p(y)=122nzrange(f)xf1({z})(1)xy2={12n1ys=00ys=1p(y) = \frac{1}{2^{2n}} \sum_{z\in\operatorname{range}(f)} \Biggl\vert \sum_{x\in f^{-1}(\{z\})} (-1)^{x\cdot y} \Biggr\vert^2 = \begin{cases} \frac{1}{2^{n-1}} & y \cdot s = 0\\[1mm] 0 & y \cdot s = 1 \end{cases}

    Dengan kata lain, kita mendapatkan string yang dipilih secara seragam acak dari himpunan {yΣn:ys=0},\{y\in\Sigma^n : y \cdot s = 0\}, yang berisi 2n12^{n-1} string. (Karena s0n,s\neq 0^n, tepat setengah dari string biner dengan panjang nn memiliki hasil kali titik biner 11 dengan ss dan yang lain memiliki hasil kali titik biner 00 dengan s,s, seperti yang sudah kita amati dalam analisis algoritma Deutsch-Jozsa untuk masalah Bernstein-Vazirani.)

Pemrosesan pasca-klasik

Kita sekarang tahu apa probabilitas untuk kemungkinan hasil pengukuran ketika kita menjalankan sirkuit kuantum untuk algoritma Simon. Apakah ini cukup informasi untuk menentukan ss?

Jawabannya ya, asalkan kita bersedia mengulangi prosesnya beberapa kali dan menerima bahwa itu bisa gagal dengan beberapa probabilitas, yang bisa kita buat sangat kecil dengan menjalankan sirkuit cukup banyak kali. Ide dasarnya adalah bahwa setiap eksekusi sirkuit memberi kita bukti statistik tentang s,s, dan kita bisa menggunakan bukti itu untuk menemukan ss dengan probabilitas sangat tinggi jika kita menjalankan sirkuit cukup banyak kali.

Misalkan kita menjalankan sirkuit secara independen kk kali, untuk k=n+10.k = n + 10. Tidak ada yang istimewa tentang jumlah iterasi khusus ini — kita bisa mengambil kk lebih besar (atau lebih kecil) tergantung pada probabilitas kegagalan yang bersedia kita toleransi, seperti yang akan kita lihat. Memilih k=n+10k = n + 10 akan memastikan bahwa kita memiliki lebih dari 99.999.9% kesempatan untuk memulihkan s.s.

Dengan menjalankan sirkuit kk kali, kita mendapatkan string y1,...,ykΣn.y^1,...,y^{k} \in \Sigma^n. Untuk lebih jelasnya, superskrip di sini adalah bagian dari nama string-string ini, bukan eksponen atau indeks ke bit mereka, jadi kita memiliki

y1=yn11y01y2=yn12y02    yk=yn1ky0k\begin{aligned} y^1 & = y^1_{n-1} \cdots y^1_{0}\\[1mm] y^2 & = y^2_{n-1} \cdots y^2_{0}\\[1mm] & \;\; \vdots\\[1mm] y^{k} & = y^{k}_{n-1} \cdots y^{k}_{0} \end{aligned}

Kita sekarang membentuk matriks MM yang memiliki kk baris dan nn kolom dengan mengambil bit-bit string ini sebagai entri bernilai biner.

M=(yn11y01yn12y02yn1ky0k)M = \begin{pmatrix} y^1_{n-1} & \cdots & y^1_{0}\\[1mm] y^2_{n-1} & \cdots & y^2_{0}\\[1mm] \vdots & \ddots & \vdots \\[1mm] y^{k}_{n-1} & \cdots & y^{k}_{0} \end{pmatrix}

Sekarang, kita tidak tahu apa ss pada titik ini — tujuan kita adalah menemukan string ini. Tetapi bayangkan sebentar bahwa kita tahu string s,s, dan kita membentuk vektor kolom vv dari bit-bit string s=sn1s0s = s_{n-1} \cdots s_0 sebagai berikut.

v=(sn1s0)v = \begin{pmatrix} s_{n-1}\\ \vdots\\ s_0 \end{pmatrix}

Jika kita melakukan perkalian matriks-vektor MvM v modulo 22 — artinya kita melakukan perkalian seperti biasa kemudian mengambil sisa entri hasilnya setelah dibagi 22 — kita mendapatkan vektor semua-nol.

Mv=(y1sy2syks)=(000)M v = \begin{pmatrix} y^1 \cdot s\\ y^2 \cdot s\\ \vdots\\[1mm] y^{k} \cdot s \end{pmatrix} = \begin{pmatrix} 0\\ 0\\ \vdots\\[1mm] 0 \end{pmatrix}

Artinya, diperlakukan sebagai vektor kolom vv seperti yang baru saja dijelaskan, string ss akan selalu menjadi elemen dari ruang nol matriks M,M, asalkan kita melakukan aritmetika modulo 2.2. Ini berlaku baik dalam kasus s=0ns = 0^n maupun s0n.s\neq 0^n. Lebih tepatnya, vektor semua-nol selalu ada dalam ruang nol M,M, dan bergabung dengan vektor yang entrinya adalah bit-bit ss dalam kasus s0n.s\neq 0^n.

Pertanyaan yang tersisa adalah apakah akan ada vektor lain dalam ruang nol MM selain yang bersesuaian dengan 0n0^n dan s.s. Jawabannya adalah ini menjadi semakin tidak mungkin seiring kk meningkat — dan jika kita memilih k=n+10,k = n + 10, ruang nol MM tidak akan berisi vektor lain selain yang bersesuaian dengan 0n0^n dan ss dengan lebih dari 99.999.9% kesempatan. Lebih umum, jika kita mengganti k=n+10k = n + 10 dengan k=n+rk = n + r untuk pilihan bilangan bulat positif rr yang arbitrer, probabilitas bahwa vektor yang bersesuaian dengan 0n0^n dan ss sendirian dalam ruang nol MM adalah setidaknya 12r.1 - 2^{-r}.

Menggunakan aljabar linear, memungkinkan untuk secara efisien menghitung deskripsi ruang nol MM modulo 2.2. Secara khusus, ini bisa dilakukan menggunakan eliminasi Gaussian, yang bekerja dengan cara yang sama ketika aritmetika dilakukan modulo 22 seperti halnya dengan bilangan nyata atau kompleks. Selama vektor yang bersesuaian dengan 0n0^n dan ss sendirian dalam ruang nol M,M, yang terjadi dengan probabilitas tinggi, kita dapat menyimpulkan ss dari hasil komputasi ini.

Kesulitan klasik

Berapa banyak kueri yang diperlukan algoritma kueri klasik untuk memecahkan masalah Simon? Jawabannya adalah: banyak, pada umumnya.

Ada pernyataan yang berbeda dan tepat yang dapat dibuat tentang kesulitan klasik masalah ini, dan berikut adalah satu di antaranya. Jika kita memiliki algoritma kueri probabilistik manapun, dan algoritma itu membuat kurang dari 2n/2112^{n/2 - 1} - 1 kueri, yang merupakan jumlah kueri yang eksponensial dalam n,n, maka algoritma itu akan gagal memecahkan masalah Simon dengan probabilitas setidaknya 1/2.1/2.

Kadang-kadang, membuktikan hasil impossibilitas seperti ini bisa sangat menantang, tetapi ini tidak terlalu sulit untuk dibuktikan melalui analisis probabilistik elementer. Di sini, bagaimanapun, kita hanya akan secara singkat memeriksa intuisi dasar di baliknya.

Kita mencoba menemukan string tersembunyi s,s, tetapi selama kita tidak melakukan kueri ke fungsi pada dua string yang memiliki nilai keluaran yang sama, kita akan mendapatkan informasi yang sangat terbatas tentang s.s. Secara intuitif, yang akan kita pelajari hanyalah bahwa string tersembunyi ss bukan XOR eksklusif dari dua string berbeda yang telah kita kueri. Dan jika kita melakukan kueri kurang dari 2n/2112^{n/2 - 1} - 1 string, masih akan ada banyak pilihan untuk ss yang belum kita singkirkan karena tidak ada cukup pasang string untuk melakukannya. Ini bukan bukti formal, ini hanya ide dasarnya.

Jadi, singkatnya, algoritma Simon memberikan kita keunggulan yang mencolok dari kuantum atas algoritma klasik dalam model kueri. Khususnya, algoritma Simon memecahkan masalah Simon dengan jumlah kueri yang linear dalam jumlah bit masukan nn dari fungsi kita, sedangkan algoritma klasik manapun, bahkan jika itu probabilistik, perlu membuat jumlah kueri yang eksponensial dalam nn untuk memecahkan masalah Simon dengan probabilitas keberhasilan yang wajar.

Source: IBM Quantum docs — updated 15 Jan 2026
English version on doQumentation — updated 7 Mei 2026
This translation based on the English version of approx. 27 Mar 2026