यह निश्चित रूप से हमेशा पूर्ण गणना करने के लिए पर्याप्त है 2n×2n एकात्मक मैट्रिक्स, और फिर इसे लागू करें 2n-एंट्री स्टेट वेक्टर। यदि यह मान लें कि आप क्या करने के लिए चुनते हैं क्या होगा, तो इस सब आप सभी उलझाव जानकारी है कि वेक्टर में निहित है के रूप में क्या करना है। यह देखने के लिए एक त्वरित और आसान तरीका है कि क्या किसी विशेष qubit में उलझी हुई है, अन्य सभी qubits पर आपके (शुद्ध) स्टेट वेक्टर का आंशिक ट्रेस लेना है। यदि परिणामी मैट्रिक्स रैंक 1 है, तो वह एक अलग स्थिति में है, अन्यथा यह उलझा हुआ है।
मुझे लगता है कि आपके प्रश्न का बिंदु वास्तव में है "इस विशाल कम्प्यूटेशनल लागत से कैसे बचा जा सकता है?"। सामान्य तौर पर, यह नहीं हो सकता है - यदि आप क्वांटम कंप्यूटर की पूरी शक्ति का उपयोग कर रहे हैं, तो आपको हमेशा इसकी आवश्यकता होगी2n-एंट्री स्टेट वेक्टर। हालांकि, विभिन्न चालें हैं जो कम्प्यूटेशनल लागत को कम करती हैं, जैसे कि उलझाव का ट्रैक रखकर इतने बड़े राज्य वेक्टर की आवश्यकता में देरी।
दक्षता में सुधार
ऊपर के भोले कार्यान्वयन की तुलना में आप जो सबसे बड़ी बचत कर सकते हैं वह है इससे बचना 2n×2nएकात्मक मैट्रिसेस। उदाहरण के लिए, यदि आप केवल 1- या 2-qubit फाटक का उपयोग कर रहे हैं, तो बस मैट्रिस की विरलता का उपयोग करने का मतलब है कि आपको केवल आवश्यकता हैओ (2n) के बजाय भंडारण ओ (22 एन)।
फिर अन्य रणनीति हैं जिन्हें आप नियोजित कर सकते हैं। उदाहरण के लिए, कल्पना करें कि आप दो-क्विट एकात्मक गेट को लागू करना चाहते हैंयू qubits पर मैं तथा जे। आप अपने राज्य वेक्टर से 4 तत्वों के सेट ले सकते हैं (| एक्स⟩1 , 2 , ... n ∖ मैं , जे| y⟩मैं , जे तय हो गया एक्स ∈ { 0 , 1}एन - 2 सब अलग-अलग लेकर y∈ { 0 , 1}2) और सिर्फ आवेदन करना 4 × 4 अमली Uउस 4-तत्व वेक्टर पर। हर के लिए यह दोहराx वापस होगा U मूल राज्य वेक्टर पर अधिनियमित।
मुझे लगता है कि ऐसी अन्य रणनीतियाँ हैं जिनके साथ कोई आ सकता है। मूल प्रश्न से खुद को सुझाने वाला उलझाव ट्रैकिंग था। यह एक संगणना की शुरुआत में स्मृति और गति में सुधार देता है, लेकिन अंत में समतुल्य होने के कारण समाप्त होता है क्योंकि (संभवतः) क्वांटम कंप्यूटर में सब कुछ उलझ जाएगा।
Entanglement Tracking
मान लेते हैं कि आपके संगणना के सेट पर केवल एकात्मक विकास और माप शामिल हैंn qubits, यानी कोई डिकॉयर्सेंस, प्रोबेबिलिस्टिक मैप्स आदि नहीं हैं। चलिए आगे मानते हैं कि आप पूरी तरह से अलग राज्य से शुरू करते हैं जैसे कि |0⟩⊗n। इस बिंदु पर, प्रत्येक qubit वियोज्य है, और यह रखने के लिए पर्याप्त हैnविभिन्न रजिस्टरों, प्रत्येक एक अलग करने योग्य राज्य की स्थिति को व्यक्त करते हैं। अगर आपका पहला गेट सिर्फ सिंगल-क्वाबिट ऑपरेशन हैU पर i, तो आप बस क्वेट पर संग्रहीत स्थिति को अपडेट करें i जैसा |ψi⟩↦U|ψi⟩, और आपको कुछ और छूने की जरूरत नहीं है।
अगर आप टू-क्विट गेट करना चाहते हैं V बटेर के बीच i तथा j, कहते हैं, तो आपको दोनों साइटों पर राज्यों को जोड़ना होगा। इसलिए, आप दो आयामों को प्रत्येक आयाम 2 को 4 के एक रजिस्टर के साथ प्रतिस्थापित करते हैं, जिसमें राज्य हैV|ψi⟩|ψj⟩। समस्या यह है कि अब आप इस स्थिति को फिर से विभाजित नहीं कर सकते हैं, इसलिए आपको उन दो बटेरों को एक रजिस्टर में हमेशा के लिए रखना होगा। बेशक, यदि आपके पास कभी भी 1-qubit गेट हैU qubit पर लागू करने के लिए i, अब आपको आवेदन करना होगा |ψi,j⟩↦U⊗I|ψi,j⟩। फिर, अगली बार जब आप के बीच 2-क्विट गेट चाहते हैं,j तथा k, आपको रिक्त स्थान संयोजित करना होगा (i,j) तथा k। वे रिक्त स्थान बढ़ते रहेंगे, लेकिन यदि कोई गेट सिर्फ एक स्थान पर स्थानीयकृत है, तो आपको इसे वहां लागू करना होगा (उपयोग करकेI ऑपरेटरों ने इसे बाकी की दुकानों पर रखा है), और आपको अन्य स्थानों के लिए कुछ भी करने की ज़रूरत नहीं है।
यदि आप इस तरह की चीजें कर रहे हैं, तो आपके पास (कम से कम आपके एल्गोरिदम के पहले कुछ चरणों के लिए) एक भी नहीं होगा 2nतत्व रजिस्टर। आपको अलग-अलग रजिस्टरों का एक गुच्छा रखना होगा, और अलग-अलग ऐरे में किस रजिस्टर से क्वाइब का वर्णन किया जाता है, इस पर नज़र रखें। हर बार जब आप कुछ क्वाइबेट्स के रिक्त स्थान को जोड़ते हैं, तो आप उस अतिरिक्त सरणी को अपडेट करेंगे।
यहाँ कुछ बहुत क्रूड छद्म कोड है जो मेरा अर्थ बताने में मदद कर सकते हैं:
#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
अन्य विकल्प
(किसी भी तरह से नहीं)
आप मैट्रिक्स उत्पाद राज्यों के बारे में पढ़ने के लिए इच्छुक हो सकते हैं जो कि बहुत-से उलझे हुए राज्यों के बारे में जानकारी को एन्कैप्सुलेट करने का एक अच्छा तरीका है, और यह आपके लिए एक वैकल्पिक मार्ग प्रदान कर सकता है, ठीक उसी पर निर्भर करता है कि आप क्या हासिल करना चाहते हैं।