एक डेटाबेस में ग्रोवर-एल्गोरिथम कैसे लागू किया जाता है?


12

सवाल

मैं एक तत्व लिए एक अनसुलझा डेटाबेस खोजने के लिए ग्रोवर-एल्गोरिथम का उपयोग करना चाहता हूं । अब सवाल यह उठता है कि मैं डेटाबेस के क्वैश्चन के साथ इंडेक्स और वैल्यू को कैसे इनिशियलाइज़ करूँ?x

उदाहरण

  • मान लीजिए कि मेरे पास qubits हैं। इस प्रकार, शास्त्रीय मूल्यों को मैप किया जा सकता है।424=16
  • मेरे अवर्गीकृत डेटाबेस निम्नलिखित तत्व होते हैं: ।dd[Value]=[3,2,0,1]
  • मैं खोजना चाहता हूं ।x=2d=10b=|10
  • मेरे दृष्टिकोण: सूचकांक डेटाबेस के साथ । रजिस्टर और सूचकांक और रजिस्टरों के लिए और मूल्य के लिए। फिर केवल और रजिस्टर करने के लिए ग्रोवर-एल्गोरिदम लागू करें । क्या इसे महसूस किया जा सकता है? क्या कोई और तरीका है?dd[(Index, Value)]=[(0,3),(1,2),(2,0),(3,1)]012323(Value)

मैंने पहले से ही क्या लागू किया है ( GitHub पर )

"ग्रोवर-एलगोरिदम 2-, 3-, 4-क्यूबिट्स" के साथ, लेकिन यह क्या करता है सरल है: बिट्स को साथ आरंभीकृत किया जाता है , ओरेकल मेरे सॉल्यूशन को चिह्नित करेगा (जो कि तरह एक नंबर है) ), ग्रोवर भाग चयनित तत्व की संभावना को बढ़ाएगा और अन्य सभी संभावनाओं को कम करेगा और फिर शास्त्रीय बिट्स के लिए मैप किए जाने से क्वेट को पढ़ा जाएगा। हम इस प्रक्रिया को उत्तराधिकार में कई बार चलाते हैं और इस तरह एक संभावना वितरण प्राप्त करते हैं, जहां उच्चतम संभावना हमारे मांगे गए तत्व ।|0x2d=10bxx

आउटपुट हमेशा उसी के समान होता है, जो ओरेकल में चिह्नित होता है। मैं आउटपुट से अधिक जानकारी कैसे उत्पन्न कर सकता हूं, कि मुझे उस समय का पता नहीं है जब मैंने ओरेकल का निर्माण किया था?

जवाबों:


9

मैं इस समस्या पर भी काम कर रहा हूं। एक शुरुआती और एक शास्त्रीय प्रोग्रामर (यानी, मैं क्वांटम मैकेनिक्स नहीं बोलता) के रूप में, पूर्ण उदाहरणों के बिना अवधारणाओं की समझ प्राप्त करना मुश्किल है। मैं Microsoft Q # डेटाबेस खोज नमूने के साथ काम कर रहा हूं । यह बस डेटाबेस में एक विशिष्ट सूचकांक / कुंजी की खोज करता है, जो बहुत उपयोगी नहीं है। मैंने उस नमूने पर एक डेटाबेस में मूल्यों की सूची की खोज करने और संबंधित कुंजी वापस करने के लिए विस्तार किया है।

अपने उदाहरण के साथ, इंडेक्स के लिए एक दो-क्विट "कुंजी रजिस्टर" है, और मूल्यों के लिए एक अलग दो-क्विट रजिस्टर है। एक पाँचवाँ "चिह्नित क्वबिट" भी है जो Microsoft के नमूने से आता है, यह इंगित करने के लिए कि वांछित मान कब मिलता है। कुंजी और मूल्य उलझाव के माध्यम से जुड़े हुए हैं। यह सबसे अच्छा एक सर्किट के साथ प्रदर्शित किया जाता है। वास्तविक क्विक सर्किट देखने के लिए यहां क्लिक करें

कुंजी / मान Oracle सर्किट

ध्यान दें कि इस सर्किट में केवल ओरेकल है। यह ग्रोवर के सभी एल्गोरिदम को लागू नहीं करता है।

  • शीर्ष दो क्वैट्स कुंजी रजिस्टर हैं, अगले दो मूल्य रजिस्टर हैं, और निचला क्वबिट चिह्नित क्वबिट है।
  • पहला खंड हारमर्ड गेट्स का उपयोग करके एक समान सुपरपोजिशन में प्रमुख रजिस्टर रखता है, जैसा कि ग्रोवर के एल्गोरिदम द्वारा आवश्यक है।
  • दूसरा खंड वह है जहां कुंजियों को उलझाव के माध्यम से मूल्यों से जोड़ा जाता है। प्रत्येक कुंजी को मूल्य रजिस्टर में एक समान मूल्य के साथ लागू किया गया है (एंटी-) नियंत्रित एक्स गेट्स। इसलिए, जब कुंजी रजिस्टर 0 होता है, तो मान रजिस्टर 3 पर सेट हो जाएगा। जब कुंजी 1 होती है, तो मान 2 पर सेट होता है, और इसी तरह।
  • सर्किट का तीसरा खंड सर्च ऑर्कल है। मूल्य रजिस्टर चिह्नित क्वबिट से उलझा हुआ है। इस उदाहरण में, वांछित मान 2 है। जब मान रजिस्टर में 2 होते हैं, तो चिह्नित qubit 1 पर सेट हो जाएगा।
  • ग्रोवर का एल्गोरिथ्म कुंजी रजिस्टर और चिह्नित qubit को देखता है। खोज ऑरेकल मूल्य रजिस्टर को देखता है और चिह्नित क्विबिट को सेट करता है। जब मान 2 होगा तो यह कुंजी 1 को प्रवर्धित करेगा।

यह ध्यान रखना दिलचस्प है कि कुंजी और मान क्वैबिट में संग्रहीत नहीं हैं, बल्कि सर्किट / प्रोग्राम में हैं। आप कह सकते हैं कि यह वास्तव में प्रति से एक डेटाबेस नहीं है। यह एक स्विच / केस स्टेटमेंट की तरह है, लेकिन एक जो मानों के सुपरपोजिशन पर चल सकता है।

अधिक जानकारी, कैविएट और क्यू # कोड के लिए, मेरे GitHub रिपॉजिटरी को देखें

संपादित करें: उत्तर देने के बाद से मैं कुछ बेहतर समझता हूं ... आपको प्रत्येक पुनरावृत्ति के हिस्से के रूप में सर्किट को उल्टा / पूर्ववत करना होगा। Q # कोड में, Adjoint StatePreparationOracle () कॉल ReflectStart () ऑपरेशन के भीतर इसे संभालती है, इसलिए मुझे इसे स्पष्ट रूप से करने की आवश्यकता नहीं थी। मुझे नहीं पता कि Qiskit में एक समान सुविधा है या नहीं। यदि मैंने अनुवाद ठीक से किया है, तो ऊपर दिए गए उदाहरण के लिए एक पूर्ण सर्किट है।


धन्यवाद! ठीक वैसा ही मैं देख रहा था।
एलेक्स

तो ग्रोवर-पार्ट के लिए: मुझे केवल कुंजी रजिस्टरों के साथ प्रवर्धन सामान करना होगा (इस उदाहरण में 2 क्वैबिट)? वे चिह्नित क्विब से कैसे जुड़े हैं?
एलेक्स

क्यू # नमूने के अनुसार, "ग्रोवर के एल्गोरिथ्म को चिह्नित राज्य और प्रारंभ स्थिति के बारे में प्रतिबिंबों की आवश्यकता होती है", इसलिए आपको चिह्नित क्विट और कुंजी रजिस्टर दोनों के साथ काम करना होगा। यदि आप क्वांटम खोज () ऑपरेशन में कोड का पालन करते हैं, तो आप देखेंगे कि ReflectMarked () को केवल चिह्नित कक्षा के साथ कहा जाता है। ReflectZero () को बाद में चिह्नित क्विबेट और कुंजी रजिस्टर के संयोजन के साथ भी बुलाया जाता है। इसके अलावा, कृपया ऊपर संपादित करें देखें।
जोएल लीच

3

जब एक डेटाबेस में खोज के लिए आवेदन के रूप में ग्रोवर के एल्गोरिथ्म को प्रस्तुत किया जाता है, तो यह माना जाता है कि ओरेकल की शास्त्रीय सूची के तत्वों तक पहुंच है। फिर भी यह एक बहुत मजबूत धारणा है और यही कारण है कि हम एक नियंत्रित-चयनकर्ता द्वारा एक इंडेक्स के CNOT / टोफोलिस का उपयोग करके केवल इस ऑपरेशन का प्रतिनिधित्व करते हैं (जैसे केस में टोफोली सर्किट )।n=4

आप एक अन्य रजिस्टर में मूल्यों की गणना के दृष्टिकोण का उल्लेख करते हैं: आप फिर से मान लेते हैं कि आपको ऐसा करने के लिए एक अलंकरण दिया गया है और कुशलतापूर्वक (एक सीधा तरीका नियंत्रित करने के लिए है-नहीं, लेकिन आपको यह हर सूचकांक / मूल्य के लिए करना होगा इसलिए बहुत कुशल नहीं है)। इस स्थिति में, यह क्वांटम सर्किट प्रारूप (फिर से एक नियंत्रित चयनकर्ता) में फंक्शन फंक्शन , जो इस स्थिति को चिह्नित करता है और ग्रोवर पुनरावृत्तियों के साथ जारी रहता है।

i|i|d(i)
f(i)=2

मुझे लगता है कि किसी सूची / डेटाबेस में खोजने के बजाय किसी फ़ंक्शन को अनुकूलित करने के रूप में क्वांटम खोज एल्गोरिदम के बारे में सोचना बेहतर है। यहाँ एक लेख है जिस पर मैंने काम किया है जहां क्वांटम खोज का उपयोग एक संयोजन अधिकतमकरण समस्या को हल करने के लिए किया जाता है यदि आप एल्गोरिथम की अपनी समझ को आगे बढ़ाना चाहते हैं।


आपके जवाब के लिए धन्यवाद! तो डेटाबेस खोज के लिए ग्रोवर-एल्गोरिथम कम उपयुक्त है। मुझे यहां एक संबंधित प्रश्न मिला ।
एलेक्स

क्या इस DB खोज समस्या को हल करने के लिए एक छद्म कोड (या Qiskit कोड) है?
एलेक्स

आपको देखना होगा लेकिन यह आसान होना चाहिए कि ढाँचों के बीच क्या है।
cnada

3

आपको डेटाबेस को पकड़ने के लिए ओरेकल को भी परिवर्तित करने की आवश्यकता है, नतीजतन, सामान्य ओरेकल (फेज इनवर्जन) में दो उप-ऑर्कल्स होते हैं जो एक आकृति लेते हैं। डेटाबेस खोज के लिए जनरल ग्रोवर का एल्गोरिदम सर्किट

पहला उप-ऑर्कल जो तैयार किया जाना है, वह मेमोरी सर्किट है, जो QRAM के विपरीत है जो उसके शरीर में क्वांटम डेटा (स्थिति) को संग्रहीत करता है, यह मेमोरी (सरणी) सर्किट केवल शास्त्रीय जानकारी को उसके फ्रेम में संग्रहीत करने के लिए तैयार की जाती है। इस तरह के सर्किट का एक उदाहरण जो द्विपदीय की एक सरणी को संग्रहीत करता है [010, 110, 100, 011] नीचे प्रदर्शित किया गया है: इस पत्र कोएक स्मृति सर्किट के लिए उदाहरण और अधिक पढ़ने के लिए ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.