Hal ini tentu cukup untuk selalu menghitung penuh kesatuan matriks, dan kemudian menerapkannya pada 2 n -entry vektor negara. Jika itu yang Anda memilih untuk melakukan, itu semua harus Anda lakukan karena semua informasi keterikatan yang terkandung dalam vektor itu. Cara cepat dan mudah untuk melihat apakah qubit tertentu terjerat adalah dengan mengambil sebagian jejak vektor keadaan (murni) Anda di atas semua qubit lainnya. Jika matriks yang dihasilkan adalah peringkat 1, qubit itu berada dalam keadaan terpisah, jika tidak terjerat.2n×2n2n
Saya berasumsi inti dari pertanyaan Anda adalah "Bagaimana biaya komputasi yang besar ini dapat dihindari?". Secara umum, itu tidak bisa - jika Anda menggunakan kekuatan penuh dari komputer kuantum, Anda akan selalu memerlukan state state vector. Namun, ada berbagai trik yang mengurangi biaya komputasi, seperti menunda kebutuhan vektor negara besar dengan melacak keterjeratan.2n
Peningkatan Efisiensi
Penghematan terbesar yang dapat Anda lakukan dibandingkan dengan implementasi naif di atas adalah untuk menghindari matriks kesatuan . Misalnya, jika Anda hanya menggunakan gerbang 1- atau 2-qubit, cukup menggunakan sparsity of matrix berarti Anda hanya perlu penyimpanan O ( 2 n ) daripada O ( 2 2 n ) .2n×2nO(2n)O(22n)
Lalu ada taktik lain yang bisa Anda pakai. Misalnya, bayangkan Anda ingin menerapkan gerbang kesatuan dua-qubit pada qubit i dan j . Anda dapat mengambil set 4 elemen dari vektor negara Anda ( | x ⟩ 1 , 2 , ... n ∖ i , j | yUij untuk tetap x ∈ { 0 , 1 } n - 2 dengan mengambil semua berbeda y ∈ { 0 , 1 }|x⟩1,2,…n∖i,j|y⟩i,jx∈{0,1}n−2 ) dan hanya menerapkan U 4 × 4 kesatuanpada vektor 4-elemen itu. Mengulang ini untuk setiap x akan mengembalikan U yang diberlakukan pada vektor keadaan asli.y∈{0,1}24×4UxU
Saya membayangkan ada strategi lain yang bisa muncul. Salah satu yang menyarankan dirinya dari pertanyaan awal adalah pelacakan keterjeratan. Ini memberikan peningkatan memori dan kecepatan pada awal perhitungan, tetapi akhirnya menjadi setara karena (mungkin) semua yang ada di komputer kuantum akan terjerat.
Pelacakan Keterjeratan
Mari kita asumsikan bahwa perhitungan Anda hanya terdiri dari evolusi kesatuan dan pengukuran pada himpunan qubit, yaitu tidak ada dekoherensi, peta probabilistik dll. Mari kita asumsikan lebih lanjut bahwa Anda mulai dari keadaan yang sepenuhnya dapat dipisahkan seperti | 0 ⟩ ⊗ nn|0⟩⊗n . Pada titik ini, setiap qubit dapat dipisahkan, dan cukup untuk menyimpan register yang berbeda, masing-masing menyampaikan status qubit yang dapat dipisahkan. Jika gerbang pertama Anda hanya operasi single-qubit U pada qubit i , maka Anda cukup memperbarui status yang disimpan di qubit i sebagai | ψ i ⟩ ↦ U |nUii , dan Anda tidak perlu menyentuh apa pun.|ψi⟩↦U|ψi⟩
Jika Anda ingin melakukan gerbang dua-qubit antara qubit i dan j , katakanlah, maka Anda harus menggabungkan status di kedua situs. Jadi, Anda mengganti dua register masing-masing dimensi 2 dengan satu register dimensi 4, yang berisi status V | ψ i ⟩ | ψ j ⟩ . Masalahnya adalah bahwa Anda sekarang tidak dapat membagi status ini lagi, jadi Anda harus menyimpan kedua qubit itu dalam register selamanya. Tentu saja, jika Anda pernah memiliki gerbang 1-qubit U untuk diterapkan pada qubit i , Anda sekarang harus menerapkan | ψ i , j ⟩ ↦ U ⊗ IVijV|ψi⟩|ψj⟩Ui . Kemudian, saat berikutnya Anda menginginkan gerbang 2-qubit antara, katakanlah, j dan k , Anda harus menggabungkan spasi untuk ( i , j ) dan k . Ruang-ruang itu akan terus bertambah, tetapi jika sebuah gerbang dilokalkan hanya pada satu ruang, Anda hanya perlu menerapkannya di sana (menggunakanoperator I untuk memasangnyapada sisa qubit), dan Anda tidak perlu melakukan apa pun pada ruang lain.|ψi,j⟩↦U⊗I|ψi,j⟩jk(i,j)kI
Jika Anda melakukan hal-hal seperti ini, Anda tidak akan memiliki (setidaknya untuk beberapa langkah pertama dari algoritma Anda) register elemen tunggal . Anda harus memiliki banyak register yang berbeda, dan melacak qubit mana yang dijelaskan oleh register mana dalam array yang terpisah. Setiap kali Anda menggabungkan spasi dari beberapa qubit, Anda akan memperbarui array ekstra itu.2n
Berikut ini beberapa pseudo-code kasar yang dapat membantu menyampaikan maksud saya:
#initialise variables
entangled_blocks={{1},{2},{3},...,{n}}
quantum_states={{1,0},{1,0},...,{1,0}}
#apply action of each gate
for each gate
for each gate_target
target_block=entangled_blocks entry containing gate_target
next gate_target
if all target_blocks equal then
apply gate on target_block (pad with identity on other qubits)
else
new_entangled_block=union(target_blocks)
new_state_vec=tensor_product(quantum_states for each target block)
apply gate on new_state_vec (pad with identity on other qubits)
replace all target_blocks in entangled_blocks with new_entangled_block
replace all quantum_states(all target blocks) with new_state_vec
end if
next gate
Pilihan lain
(Tidak berarti lengkap)
Anda mungkin tertarik untuk membaca tentang Matrix Product States yang merupakan cara yang bagus untuk merangkum informasi tentang negara-negara yang tidak terlalu terjerat, dan itu dapat memberikan rute alternatif untuk Anda, tergantung pada apa tepatnya yang ingin Anda capai.