पायथन प्रायोरिटी क्यू: एक संपूर्ण गाइड
पायथन प्रायोरिटी क्यू डेटा को एक विशेष क्रम में संग्रहीत करता है। पायथन में प्रायोरिटी क्यू लागू करने के दो मुख्य तरीके हैं: queue क्लास का उपयोग करके और heapq मॉड्यूल का उपयोग करके।
आप सूची में प्रत्येक आइटम के मान के आधार पर डेटा को क्रमबद्ध करना चाह सकते हैं। उदाहरण के लिए, आप चाहते हैं कि सबसे बड़ा मान सूची में पहले दिखाई दे और सबसे छोटा मान अंत में।
यहीं प्रायोरिटी क्यू काम आते हैं। प्रायोरिटी क्यू एक डेटा संरचना है जो कुंजियों के मान के आधार पर आरोही क्रम में डेटा संग्रहीत करती है। इससे आप क्यू में सबसे छोटे और सबसे बड़े मान को आसानी से एक्सेस कर सकते हैं।
यह ट्यूटोरियल चर्चा करेगा कि प्रायोरिटी क्यू बनाने के लिए सूची का उपयोग क्यों नहीं करना चाहिए। हम आपको पायथन प्रायोरिटी क्यू बनाने के दो अधिक कुशल दृष्टिकोण दिखाएंगे।
पायथन प्रायोरिटी क्यू क्या है?
प्रायोरिटी क्यू एक संशोधित क्यू है जो इस क्रम में डेटा संग्रहीत करता है कि किस तत्व की उच्चतम प्राथमिकता है। प्रायोरिटी क्यू में प्रत्येक तत्व की प्राथमिकता तत्व के मान के आधार पर तय की जाती है।
कंप्यूटर विज्ञान में, क्यू डेटा संरचनाएं हैं जो आइटम को फर्स्ट-इन, फर्स्ट-आउट (FIFO) क्रम में संग्रहीत करती हैं। कुछ परिदृश्य हैं जहां इस संरचना का उपयोग सहायक हो सकता है।
उदाहरण के लिए, मान लीजिए आप एक रेस्तरां के लिए ऑर्डर ट्रैकिंग ऐप बना रहे हैं। जो व्यक्ति पहले ऑर्डर देता है, उसे बाद में ऑर्डर देने वाले लोगों से पहले सेवा दी जानी चाहिए। ऑर्डर ट्रैक करने के लिए, आप क्यू का उपयोग करना चाहेंगे।
पायथन में प्रायोरिटी क्यू को परिभाषित करने के दो तरीके हैं:
- PriorityQueue क्यू क्लास का उपयोग करके
- heapq मॉड्यूल का उपयोग करके
आप सूची संरचना का उपयोग करके प्रायोरिटी क्यू को परिभाषित कर सकते हैं। लेकिन, यह रणनीति PriorityQueue क्यू क्लास या heapq मॉड्यूल का उपयोग करने की तुलना में कम कुशल है।
पायथन प्रायोरिटी क्यू: queue.PriorityQueue
queue.PriorityQueue क्लास एक पायथन प्रायोरिटी क्यू बनाती है। यह क्लास पायथन क्यू लाइब्रेरी का हिस्सा है। इस क्लास का उपयोग करने के लिए आपको क्यू लाइब्रेरी आयात करने की आवश्यकता है। PriorityQueue से आइटम प्राप्त करने के लिए, आप get() विधि का उपयोग कर सकते हैं।
PriorityQueue क्लास तक पहुंचने के लिए, हमें इसे अपने कोड में आयात करना होगा, जिसे हम इस पायथन आयात कथन का उपयोग करके कर सकते हैं:
from queue import PriorityQueue
मान लीजिए हम एक स्थानीय कॉन्सर्ट में टिकट धारकों के लिए प्रायोरिटी क्यू बनाना चाहते हैं। हम निम्न कोड का उपयोग करके ऐसा कर सकते हैं:
from queue import PriorityQueue
ticket_holders = PriorityQueue()
ticket_holders.put((3, 'Paul'))
ticket_holders.put((1, 'Miles'))
ticket_holders.put((2, 'Dani'))
while not ticket_holders.empty():
item = ticket_holders.get()
print(item)
हमारा कोड निम्न आउटपुट देता है:
(1, 'Miles') (2, 'Dani') (3, 'Paul')
हमारे कोड में, हम पहले queue लाइब्रेरी से PriorityQueue क्लास आयात करते हैं, फिर ticket_holders नामक एक प्रायोरिटी क्यू इनिशियलाइज़ करते हैं। अगला, हम अपने प्रायोरिटी क्यू में तीन टपल्स डालते हैं, जो टिकट नंबर और टिकट से जुड़े नाम संग्रहीत करते हैं।
हम ticket_holders प्रायोरिटी क्यू में प्रत्येक आइटम के माध्यम से चलने के लिए पायथन व्हाइल लूप का उपयोग करते हैं। फिर, हम get() का उपयोग करके उस आइटम को पुनः प्राप्त करते हैं।
queue.PriorityQueue विधि कुशल और उपयोग में आसान है, जो इसे प्रायोरिटी क्यू बनाने की आवश्यकता होने पर एक बढ़िया विकल्प बनाती है।
पायथन प्रायोरिटी क्यू: heapq मॉड्यूल
heapq मॉड्यूल आपको पायथन प्रायोरिटी क्यू को परिभाषित करने देता है। heapq डेटा संरचना उनकी प्राथमिकता के क्रम में आइटम को हटाती है। heapq संरचना में सबसे कम मान की सबसे कम प्राथमिकता होती है और सबसे अधिक मान की सबसे अधिक प्राथमिकता होती है।
इससे पहले कि हम heapq मॉड्यूल का उपयोग कर सकें, हमें पहले इसे निम्न आयात कथन का उपयोग करके अपने कोड में आयात करना होगा:
import heapq
आइए हमारे पहले के उदाहरण पर वापस चलते हैं। मान लीजिए हम एक कॉन्सर्ट में टिकट धारकों के बारे में जानकारी संग्रहीत करने के लिए प्रायोरिटी क्यू बनाना चाहते हैं। हम heapq मॉड्यूल और इस प्रोग्राम का उपयोग करके ऐसा कर सकते हैं:
import heapq
ticket_holders = []
heapq.heappush(ticket_holders, (3, 'Paul'))
heapq.heappush(ticket_holders, (1, 'Miles'))
heapq.heappush(ticket_holders, (2, 'Dani'))
while ticket_holders:
item = heapq.heappop(ticket_holders)
print(item)
हमारा कोड निम्न आउटपुट देता है:
(1, 'Miles') (2, 'Dani') (3, 'Paul')
सबसे पहले, हमने heapq लाइब्रेरी आयात की, और फिर ticket_holders नामक एक पायथन वेरिएबल इनिशियलाइज़ किया। हमने अपने प्रायोरिटी क्यू में तीन टपल्स को पुश करने के लिए heappush() विधि का उपयोग किया। यह क्यू प्रत्येक टिकट धारक के टिकट नंबर और नाम को संग्रहीत करता है।
हमने फिर एक व्हाइल लूप बनाया जो हमारे प्रायोरिटी क्यू में प्रत्येक आइटम के माध्यम से लूप करता है। यह लूप heappop() का उपयोग करके क्यू के शीर्ष पर आइटम को हटा देता है। फिर, हटाए गए आइटम को कंसोल पर प्रिंट किया जाता है। जैसा कि आप देख सकते हैं, हमारे क्यू में सभी आइटम उनकी प्राथमिकता के क्रम में प्रिंट किए गए हैं।
सूची का उपयोग क्यों नहीं करना चाहिए
तकनीकी रूप से, आप पायथन सूची डेटा संरचना का उपयोग करके प्रायोरिटी क्यू बना सकते हैं। ऐसा करने के लिए, आप एक सूची बनाएंगे, फिर उसे आरोही क्रम में व्यवस्थित करेंगे।
हालांकि, प्रायोरिटी क्यू को बनाए रखने का यह अपेक्षाकृत अकुशल तरीका है। जैसे ही आप सूची में आइटम बदलते हैं, आपको सूची को फिर से व्यवस्थित करने की आवश्यकता होगी, जिसमें समय लगता है।
यदि आपको केवल कुछ मान संग्रहीत करने की आवश्यकता है, तो आप पारंपरिक सूची का उपयोग प्रायोरिटी क्यू के रूप में कर सकते हैं। लेकिन, यदि आप एक बड़ी क्यू बनाना चाहते हैं, तो सूची एक अच्छा विकल्प नहीं है।
संदर्भ के लिए, आइए सूचियों का उपयोग करके प्रायोरिटी क्यू के उदाहरण के माध्यम से चलते हैं। मान लीजिए हम एक प्रायोरिटी क्यू बनाना चाहते हैं जो टिकट धारकों के क्रम को संग्रहीत करता है जिन्हें पहले कॉन्सर्ट में प्रवेश करना चाहिए। हम इस क्यू को बनाने के लिए निम्न कोड का उपयोग कर सकते हैं:
ticket_holders = []
ticket_holders.append((3, 'Paul'))
ticket_holders.append((1, 'Miles'))
ticket_holders.append((2, 'Dani'))
ticket_holders.sort(reverse=True)
while ticket_holders:
item = ticket_holders.pop()
print(item)
हमारा कोड निम्न आउटपुट देता है:
(1, 'Miles') (2, 'Dani') (3, 'Paul')
हमने ticket_holders नामक एक सूची बनाई, फिर सूची में तीन टपल्स जोड़े। प्रत्येक टपल में एक टिकट धारक का टिकट नंबर और उनका नाम था। फिर, हमने अपने टिकट धारकों की सूची को रिवर्स क्रम में सॉर्ट करने के लिए पायथन sort() फ़ंक्शन का उपयोग किया।
हमने एक व्हाइल लूप बनाया जो ticket_holders सूची में प्रत्येक आइटम के माध्यम से पुनरावृति करता है और सूची के शीर्ष पर आइटम को हटा देता है। फिर, हमारा कोड हटाए गए आइटम को कंसोल पर प्रिंट करता है।
निष्कर्ष
प्रायोरिटी क्यू बनाने के दो सबसे आम तरीके heapq मॉड्यूल या queue.PriorityQueue क्लास का उपयोग करना हैं। जबकि आप तकनीकी रूप से सूची का उपयोग प्रायोरिटी क्यू के रूप में कर सकते हैं, यह दृष्टिकोण अच्छी तरह से स्केल नहीं करता है।
इस ट्यूटोरियल ने उदाहरणों के संदर्भ में चर्चा की कि पायथन में प्रायोरिटी क्यू कैसे बनाएं। अब आप अपने स्वयं के प्रायोरिटी क्यू बनाना शुरू करने के लिए आवश्यक ज्ञान से लैस हैं जैसे एक पायथन पेशेवर!
पायथन सीखने के तरीके पर अधिक मार्गदर्शन के लिए, हमारा संपूर्ण How to Learn Python गाइड देखें।