Her zaman tam hesaplamak için yeterlidir 2nx2n birimsel matris ve daha sonra 2ndevlet vektör. Yapmayı seçtiğiniz buysa, tüm dolaşma bilgileri bu vektörde yer aldığından tek yapmanız gereken budur. Belirli bir kübitin karışıp karışmadığını görmenin hızlı ve kolay bir yolu, (saf) durum vektörünüzün tüm diğer kubitlerin üzerindeki kısmi izini almaktır. Sonuçta elde edilen matris sıra 1 ise, bu kubit ayrılabilir bir durumdadır, aksi takdirde dolanır.
Sorunuzun amacının gerçekten "Bu büyük hesaplama maliyetinden nasıl kaçınılabilir?" Olduğunu varsayıyorum. Genel olarak, yapamaz - kuantum bilgisayarın tam gücünü kullanıyorsanız, her zaman2ndevlet vektör. Bununla birlikte, hesaplama maliyetini azaltan, dolaşıklığı takip ederek böyle bir büyük durum vektörüne olan ihtiyacı geciktirmek gibi çeşitli hileler vardır.
Verimlilik İyileştirmeleri
Yukarıdaki saf uygulamaya kıyasla yapabileceğiniz en büyük tasarruf, 2nx2nüniter matrisler. Örneğin, yalnızca 1 veya 2-kubit kapıları kullanıyorsanız, sadece matrislerin genişliğini kullanmak,Ö (2n) yerine depolama Ö (22 n).
Sonra kullanabileceğiniz başka taktikler var. Örneğin, iki-kübit üniter kapıyı uygulamak istediğinizi düşününU kubitlerde ben ve j. Durum vektörünüzden 4 elemanlık setler alabilirsiniz (|x⟩1 , 2 , … n ∖ i , j| y⟩i , j, sabit için x ∈ { 0 , 1}n - 2 hepsini farklı alarak y∈ { 0 , 1}2) ve sadece 4 × 4 birimsel UBu 4 elementli vektör üzerinde. Bunu her biri için tekrarlamakx geri dönücek U orijinal durum vektörü üzerinde yürürlüğe girdi.
Birinin ortaya koyabileceği başka stratejiler olduğunu hayal ediyorum. Orijinal sorudan kendini öneren, dolaşıklık takibi idi. Bu, bir hesaplamanın başlangıcında bellek ve hız iyileştirmeleri sağlar, ancak nihayetinde eşdeğer olur, çünkü (muhtemelen) kuantum bilgisayardaki her şey birbirine dolanır.
Dolaşıklık Takibi
Diyelim ki hesaplamanız sadece üniter evrim ven qubits, yani bir yapışma, olasılık haritaları vb. yoktur. Ayrıca, tamamen ayrılabilir bir durumdan başladığınızı varsayalım. | 0⟩⊗ n. Bu noktada, her kubit ayrılabilir ve saklamak yeterlidirnher biri ayrılabilir bir kübit durumunu taşıyan farklı kayıtlar. İlk kapınız sadece tek bir kubit işlemi iseU kubit üzerinde ben, daha sonra qubit'te depolanan durumu güncellersiniz ben gibi |ψben⟩ ↦ U|ψben⟩ve başka bir şeye dokunmanıza gerek yok.
İki kübit bir kapı yapmak istiyorsanız V kubitler arasında ben ve j, diyelim ki, her iki sitedeki durumları birleştirmeniz gerekir. Bu nedenle, boyut 2'nin her birini, durum içeren boyut 4'ün bir kaydıyla değiştirirsiniz.V|ψben⟩ |ψj⟩. Sorun şu ki, bu durumu tekrar bölemezsiniz, bu yüzden bu iki kübiti sonsuza dek bir kayıtta tutmanız gerekir. Tabii ki, eğer 1-kübit bir kapınız varsaU kubit üzerine başvurmak i, şimdi başvurmanız gerekecek |ψi,j⟩↦U⊗I|ψi,j⟩. Sonra, bir dahaki sefere 2-kübit bir kapı istediğinizi varsayalım,j ve k, için boşlukları birleştirmeniz gerekecek (i,j) ve k. Bu alanlar büyümeye devam edecek, ancak bir kapı sadece bir alanda yerelleştirilmişse, sadece oraya uygulamanız gerekir (I kubitlerin geri kalanına doldurmak için) ve diğer alanlara hiçbir şey yapmanız gerekmez.
Böyle bir şey yapıyorsanız, (en azından algoritmanızın ilk birkaç adımı için) tek bir 2neleman kaydı. Bir grup farklı kayıtlara sahip olmanız ve hangi kayıtların hangi kayıt tarafından ayrı bir dizide tanımlandığını takip etmeniz gerekir. Bazı kübitlerin boşluklarını her birleştirdiğinizde, o ekstra diziyi güncellersiniz.
İşte anlamımı aktarmaya yardımcı olabilecek bazı çok kaba sahte kod:
#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
Diğer seçenekler
(Hiçbir şekilde ayrıntılı değildir)
Çok fazla karışmamış durumlar hakkındaki bilgileri kapsüllemenin güzel bir yolu olan ve tam olarak ne elde etmeye çalıştığınıza bağlı olarak sizin için alternatif bir yol sağlayabilen Matrix Ürün Durumları hakkında bilgi edinmek isteyebilirsiniz.