Lewati ke konten utama

Komputasi klasik di komputer kuantum

Sekarang kita akan beralih ke implementasi algoritma klasik di komputer kuantum. Kita akan lihat bahwa komputasi apa pun yang bisa dilakukan dengan sirkuit Boolean klasik juga bisa dilakukan oleh sirkuit kuantum dengan biaya komputasi asimtotik yang serupa. Selain itu, ini bisa dilakukan dengan cara yang "bersih" seperti yang akan dijelaskan segera, yang merupakan syarat penting agar komputasi ini bisa digunakan sebagai subrutin dalam komputasi kuantum yang lebih besar.

Mensimulasikan sirkuit Boolean dengan sirkuit kuantum​

Sirkuit Boolean terdiri dari gate AND, OR, NOT, dan FANOUT. Untuk mensimulasikan sirkuit Boolean dengan sirkuit kuantum, kita mulai dengan menunjukkan cara setiap dari keempat gate ini bisa disimulasikan oleh gate kuantum. Setelah itu selesai, mengonversi sirkuit Boolean tertentu ke sirkuit kuantum tinggal mensimulasikan satu gate dalam satu waktu. Kita hanya perlu gate NOT, gate controlled-NOT, dan gate Toffoli untuk melakukan ini, yang semuanya adalah operasi deterministik sekaligus operasi uniter.

Gate Toffoli​

Gate Toffoli bisa juga dideskripsikan sebagai gate controlled-controlled-NOT, yang aksinya pada status basis standar ditunjukkan pada gambar berikut.

Gate Toffoli

Mengingat bahwa kita menggunakan konvensi pengurutan Qiskit, di mana qubit diurutkan dengan signifikansi yang meningkat dari atas ke bawah, representasi matriks gate ini adalah sebagai berikut.

(1000000001000000001000000000000100001000000001000000001000010000)\begin{pmatrix} 1 & 0 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 1 & 0 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 1 & 0 & 0 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 0 & 1 \\ 0 & 0 & 0 & 0 & 1 & 0 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 1 & 0 & 0 \\ 0 & 0 & 0 & 0 & 0 & 0 & 1 & 0 \\ 0 & 0 & 0 & 1 & 0 & 0 & 0 & 0 \end{pmatrix}

Cara lain untuk memikirkan gate Toffoli adalah bahwa gate ini pada dasarnya merupakan query gate untuk fungsi AND, dalam arti bahwa gate ini mengikuti pola yang kita lihat di pelajaran sebelumnya untuk implementasi query gate uniter dari fungsi sembarang yang memiliki input dan output berupa string biner.

Gate Toffoli tidak termasuk dalam set gate default yang dibahas sebelumnya di pelajaran ini, tetapi memungkinkan untuk membangun gate Toffoli dari gate H,H, T,T, T†,T^{\dagger}, dan CNOT sebagai berikut.

Sirkuit kuantum untuk gate Toffoli

Mensimulasikan gate Boolean dengan gate Toffoli, controlled-NOT, dan NOT​

Satu gate Toffoli, yang digunakan bersama dengan beberapa gate NOT, bisa mengimplementasikan gate AND dan OR, dan gate FANOUT bisa dengan mudah diimplementasikan menggunakan gate controlled-NOT, seperti yang disarankan oleh diagram berikut.

Mensimulasikan gate AND dan OR dengan gate Toffoli

Dalam ketiga kasus tersebut, qubit tempat gate AND, OR, dan FANOUT bekerja masuk dari kiri sebagai input, dan kita juga memerlukan satu qubit workspace yang diinisialisasi ke status nol untuk masing-masing gate. Qubit workspace ini muncul di dalam kotak yang mewakili implementasi gate untuk menunjukkan bahwa qubit ini baru, dan oleh karena itu merupakan bagian dari biaya implementasi ini.

Untuk gate AND dan OR, kita juga memiliki dua qubit yang tersisa, selain qubit output. Misalnya, di dalam kotak dalam diagram yang mewakili simulasi gate AND, dua qubit teratas dibiarkan dalam status ∣a⟩\vert a\rangle dan ∣b⟩.\vert b\rangle. Qubit ini diilustrasikan sebagai tetap berada di dalam kotak karena tidak lagi dibutuhkan dan bukan bagian dari output. Qubit ini bisa diabaikan untuk sementara, meskipun kita akan memperhatikannya kembali sebentar lagi.

Gate Boolean yang tersisa, gate NOT, sudah termasuk dalam set gate kuantum default kita, jadi kita tidak memerlukan simulasi untuk yang satu ini.

Simulasi gate demi gate dari sirkuit Boolean​

Sekarang misalkan kita memiliki sirkuit Boolean biasa bernama C,C, yang terdiri dari gate AND, OR, NOT, dan FANOUT, dan memiliki nn bit input dan mm bit output. Misalkan t=size⁑(C)t = \operatorname{size}(C) adalah jumlah gate dalam C,C, dan kita beri nama ff pada fungsi yang dihitung oleh C,C, yang berbentuk

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

untuk Ξ£={0,1}.\Sigma = \{0,1\}.

Sekarang pertimbangkan apa yang terjadi ketika kita melewati gate AND, OR, dan FANOUT dari CC satu per satu, mengganti masing-masing dengan simulasi yang sesuai yang dijelaskan di atas, termasuk penambahan qubit workspace yang diperlukan. Kita beri nama sirkuit yang dihasilkan R,R, dan kita urutkan qubit dari RR sehingga nn bit input dari CC bersesuaian dengan nn qubit teratas dari RR dan qubit workspace ada di bawah.

Simulasi sirkuit reversibel

Di sini, kk adalah jumlah qubit workspace yang diperlukan β€” satu untuk setiap gate AND, OR, dan FANOUT dari CC β€” dan gg adalah fungsi berbentuk g:Ξ£nβ†’Ξ£n+kβˆ’mg:\Sigma^n \rightarrow \Sigma^{n+k-m} yang mendeskripsikan status qubit sisa yang dibuat oleh simulasi gate setelah RR dijalankan. Dalam gambar, qubit yang bersesuaian dengan output f(x)f(x) ada di atas dan qubit sisa yang tersimpan g(x)g(x) ada di bawah. Kita bisa memaksanya terjadi seperti ini jika mau dengan mengatur ulang qubit menggunakan gate SWAP, yang bisa diimplementasikan dengan tiga gate controlled-NOT seperti ini:

Menukar dengan gate cNOT

Seperti yang akan kita lihat di bagian berikutnya, sebenarnya tidak terlalu penting untuk mengatur ulang qubit output seperti ini, tetapi cukup mudah dilakukan jika kita mau.

Fungsi gg yang mendeskripsikan status klasik qubit sisa ditentukan oleh sirkuit C,C, tetapi kita sebenarnya tidak perlu terlalu khawatir tentangnya; kita tidak peduli secara spesifik tentang status qubit ini saat komputasi selesai. Huruf gg datang setelah f,f, jadi ini adalah nama yang masuk akal untuk fungsi ini karena alasan itu, tetapi ada alasan yang lebih baik untuk memilih nama gg β€” singkatan dari garbage (sampah).

Membersihkan sampah​

Jika satu-satunya minat kita adalah mengevaluasi fungsi ff yang dihitung oleh sirkuit Boolean CC tertentu dengan sirkuit kuantum, kita tidak perlu melanjutkan lebih jauh dari simulasi gate demi gate yang baru saja dijelaskan. Ini berarti bahwa, selain output fungsi, kita akan memiliki banyak sampah yang tersisa.

Namun, ini tidak cukup baik jika kita ingin melakukan komputasi klasik sebagai subrutin dalam komputasi kuantum yang lebih besar, karena qubit sampah tersebut akan menimbulkan masalah. Fenomena interferensi sangat penting bagi algoritma kuantum, dan qubit sampah bisa merusak pola interferensi yang dibutuhkan agar algoritma kuantum bekerja.

Untungnya, membersihkan sampah tidak sulit. Kuncinya adalah memanfaatkan fakta bahwa karena RR adalah sirkuit kuantum, kita bisa menjalankannya secara terbalik, cukup dengan mengganti setiap gate dengan inversnya dan menerapkannya dalam urutan terbalik, sehingga mendapatkan sirkuit kuantum untuk operasi R†.R^{\dagger}. Gate Toffoli, gate CNOT, dan gate NOT sebenarnya merupakan invers dari dirinya sendiri, sehingga menjalankan RR secara terbalik sebenarnya hanya soal menerapkan gate dalam urutan terbalik β€” tetapi secara lebih umum sirkuit kuantum mana pun bisa dibalik seperti yang baru saja dijelaskan.

Secara khusus, yang bisa kita lakukan adalah menambahkan mm qubit lagi (mengingat bahwa fungsi ff memiliki mm bit output), menggunakan gate CNOT untuk menyalin output dari RR ke qubit ini, dan membalik RR untuk membersihkan sampah. Gambar berikut mengilustrasikan sirkuit yang dihasilkan dan mendeskripsikan aksinya pada status basis standar.

Komputasi bebas sampah

Jika kita menaruh kotak di seluruh sirkuit dan menyebutnya Q,Q, tampilannya seperti ini:

Simulasi sebagai query gate

Mengingat bahwa CC memiliki tt gate, sirkuit QQ akan memiliki O(t)O(t) gate.

Jika kita mengabaikan kk qubit workspace tambahan, yang kita miliki adalah sirkuit QQ yang berfungsi persis seperti query gate untuk fungsi f.f. Jika kita hanya ingin menghitung fungsi ff pada string xx tertentu, kita bisa mengatur y=0my = 0^m dan nilai f(x)f(x) yang dihasilkan akan muncul pada mm qubit terbawah β€” atau kita bisa memasukkan status yang berbeda ke mm qubit terbawah jika mau (mungkin untuk memanfaatkan phase kickback, seperti dalam algoritma Deutsch atau Deutsch-Jozsa).

Ini berarti bahwa untuk algoritma query mana pun, jika kita memiliki sirkuit Boolean yang menghitung fungsi input, kita bisa mengganti setiap query gate dengan implementasi sirkuitnya, dan algoritma query akan berfungsi dengan benar.

Perlu dicatat bahwa qubit workspace diperlukan untuk membuat proses ini berjalan, tetapi qubit tersebut dikembalikan ke status awalnya setelah sirkuit gabungan dieksekusi. Ini memungkinkan qubit ini digunakan kembali sebagai qubit workspace untuk tujuan lain. Ada juga strategi yang diketahui untuk mengurangi jumlah qubit workspace yang diperlukan (yang memerlukan biaya membuat sirkuit lebih besar), tetapi kita tidak akan membahas strategi tersebut di sini.

Mengimplementasikan fungsi invertibel​

Konstruksi yang baru saja dijelaskan memungkinkan kita mensimulasikan sirkuit Boolean mana pun dengan sirkuit kuantum secara bebas sampah. Jika CC adalah sirkuit Boolean yang mengimplementasikan fungsi f:Σn→Σm,f:\Sigma^n \rightarrow \Sigma^m, maka kita mendapatkan sirkuit kuantum QQ yang beroperasi sebagai berikut pada status basis standar.

Q(∣y⟩∣0k⟩∣x⟩)=∣yβŠ•f(x)⟩∣0k⟩∣x⟩Q \bigl( \vert y \rangle \vert 0^k \rangle \vert x\rangle\bigr) = \vert y \oplus f(x) \rangle \vert 0^k \rangle \vert x\rangle

Angka kk menunjukkan berapa banyak qubit workspace yang diperlukan secara total. Ini cukup untuk tujuan kursus ini, tetapi memungkinkan untuk mengambil metodologi ini satu langkah lebih jauh ketika fungsi ff itu sendiri invertibel.

Lebih tepatnya, misalkan fungsi ff berbentuk f:Ξ£nβ†’Ξ£n,f:\Sigma^n \rightarrow \Sigma^n, dan juga misalkan ada fungsi fβˆ’1f^{-1} sedemikian sehingga fβˆ’1(f(x))=xf^{-1}(f(x)) = x untuk setiap x∈Σnx\in\Sigma^n (yang pasti unik ketika ada). Ini berarti bahwa operasi yang mentransformasi ∣x⟩\vert x \rangle menjadi ∣f(x)⟩\vert f(x) \rangle untuk setiap x∈Σnx\in\Sigma^n adalah uniter, jadi kita mungkin berharap bisa membangun sirkuit kuantum yang mengimplementasikan operasi uniter yang didefinisikan oleh

U∣x⟩=∣f(x)⟩U \vert x \rangle = \vert f(x) \rangle

untuk setiap x∈Σn.x\in\Sigma^n.

Untuk memperjelas, fakta bahwa ini adalah operasi uniter bergantung pada ff yang invertibel β€” ini bukan uniter ketika ff tidak invertibel. Mengabaikan qubit workspace, UU berbeda dari operasi yang diimplementasikan sirkuit QQ karena kita tidak menyimpan salinan input dan meng-XOR-nya ke string sembarang, kita mengganti xx dengan f(x).f(x).

Pertanyaannya adalah: ketika ff invertibel, bisakah kita melakukan ini?

Jawabannya ya, asalkan kita diizinkan menggunakan qubit workspace dan, selain memiliki sirkuit Boolean yang menghitung f,f, kita juga memiliki satu yang menghitung fβˆ’1.f^{-1}. Jadi, ini bukan jalan pintas untuk menginversi fungsi secara komputasional ketika kita belum tahu cara melakukannya! Diagram berikut mengilustrasikan cara melakukannya dengan menggabungkan dua sirkuit kuantum, QfQ_f dan Qfβˆ’1,Q_{f^{-1}}, yang diperoleh secara individual untuk fungsi ff dan fβˆ’1f^{-1} melalui metode yang dijelaskan di atas, bersama dengan nn gate swap, dengan mengambil kk sebagai maksimum dari jumlah qubit workspace yang diperlukan oleh QfQ_f dan Qfβˆ’1.Q_{f^{-1}}.

Simulasi fungsi invertibel

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