मैं इस समस्या पर भी काम कर रहा हूं। एक शुरुआती और एक शास्त्रीय प्रोग्रामर (यानी, मैं क्वांटम मैकेनिक्स नहीं बोलता) के रूप में, पूर्ण उदाहरणों के बिना अवधारणाओं की समझ प्राप्त करना मुश्किल है। मैं Microsoft Q # डेटाबेस खोज नमूने के साथ काम कर रहा हूं । यह बस डेटाबेस में एक विशिष्ट सूचकांक / कुंजी की खोज करता है, जो बहुत उपयोगी नहीं है। मैंने उस नमूने पर एक डेटाबेस में मूल्यों की सूची की खोज करने और संबंधित कुंजी वापस करने के लिए विस्तार किया है।
अपने उदाहरण के साथ, इंडेक्स के लिए एक दो-क्विट "कुंजी रजिस्टर" है, और मूल्यों के लिए एक अलग दो-क्विट रजिस्टर है। एक पाँचवाँ "चिह्नित क्वबिट" भी है जो Microsoft के नमूने से आता है, यह इंगित करने के लिए कि वांछित मान कब मिलता है। कुंजी और मूल्य उलझाव के माध्यम से जुड़े हुए हैं। यह सबसे अच्छा एक सर्किट के साथ प्रदर्शित किया जाता है। वास्तविक क्विक सर्किट देखने के लिए यहां क्लिक करें ।
ध्यान दें कि इस सर्किट में केवल ओरेकल है। यह ग्रोवर के सभी एल्गोरिदम को लागू नहीं करता है।
- शीर्ष दो क्वैट्स कुंजी रजिस्टर हैं, अगले दो मूल्य रजिस्टर हैं, और निचला क्वबिट चिह्नित क्वबिट है।
- पहला खंड हारमर्ड गेट्स का उपयोग करके एक समान सुपरपोजिशन में प्रमुख रजिस्टर रखता है, जैसा कि ग्रोवर के एल्गोरिदम द्वारा आवश्यक है।
- दूसरा खंड वह है जहां कुंजियों को उलझाव के माध्यम से मूल्यों से जोड़ा जाता है। प्रत्येक कुंजी को मूल्य रजिस्टर में एक समान मूल्य के साथ लागू किया गया है (एंटी-) नियंत्रित एक्स गेट्स। इसलिए, जब कुंजी रजिस्टर 0 होता है, तो मान रजिस्टर 3 पर सेट हो जाएगा। जब कुंजी 1 होती है, तो मान 2 पर सेट होता है, और इसी तरह।
- सर्किट का तीसरा खंड सर्च ऑर्कल है। मूल्य रजिस्टर चिह्नित क्वबिट से उलझा हुआ है। इस उदाहरण में, वांछित मान 2 है। जब मान रजिस्टर में 2 होते हैं, तो चिह्नित qubit 1 पर सेट हो जाएगा।
- ग्रोवर का एल्गोरिथ्म कुंजी रजिस्टर और चिह्नित qubit को देखता है। खोज ऑरेकल मूल्य रजिस्टर को देखता है और चिह्नित क्विबिट को सेट करता है। जब मान 2 होगा तो यह कुंजी 1 को प्रवर्धित करेगा।
यह ध्यान रखना दिलचस्प है कि कुंजी और मान क्वैबिट में संग्रहीत नहीं हैं, बल्कि सर्किट / प्रोग्राम में हैं। आप कह सकते हैं कि यह वास्तव में प्रति से एक डेटाबेस नहीं है। यह एक स्विच / केस स्टेटमेंट की तरह है, लेकिन एक जो मानों के सुपरपोजिशन पर चल सकता है।
अधिक जानकारी, कैविएट और क्यू # कोड के लिए, मेरे GitHub रिपॉजिटरी को देखें ।
संपादित करें: उत्तर देने के बाद से मैं कुछ बेहतर समझता हूं ... आपको प्रत्येक पुनरावृत्ति के हिस्से के रूप में सर्किट को उल्टा / पूर्ववत करना होगा। Q # कोड में, Adjoint StatePreparationOracle () कॉल ReflectStart () ऑपरेशन के भीतर इसे संभालती है, इसलिए मुझे इसे स्पष्ट रूप से करने की आवश्यकता नहीं थी। मुझे नहीं पता कि Qiskit में एक समान सुविधा है या नहीं। यदि मैंने अनुवाद ठीक से किया है, तो ऊपर दिए गए उदाहरण के लिए एक पूर्ण सर्किट है।