python अजगर और प्राथमिकता प्रश्न के बीच में क्या अंतर है अजगर?




data-structures heap (2)

अजगर में एक निर्मित heapq एल्गोरिथ्म है जो आपको push , pop , nlargest , nsmallest ... आदि देता है, ताकि आप सूचियों पर आवेदन कर सकें। हालांकि, queue.PriorityQueue भी है। queue.PriorityQueue श्रेणी जो समान कार्यक्षमता को अधिक या कम समर्थन देती है क्या अंतर है, और आप दूसरे पर एक का उपयोग कब करेंगे?


कतार.प्रार्व्यताक्वायई हेपक कक्षा के चारों ओर एक आंशिक आवरण है।

दूसरे शब्दों में, एक कतार। प्रायोजिक क्यूई वास्तव में एक हैपक है, जिसे कतार मॉड्यूल में दो नामित विधियों के साथ रखा गया है ताकि एक नियमित कतार की तरह हीप को आसानी से उपयोग किया जा सके।

हेपैक में, आप किसी नए आइटम को जोड़ने के लिए विधि का उपयोग करें () और एक को हटाने के लिए विधि heappop () का उपयोग करें यह बहुत कतार की तरह नहीं है, इसलिए कतार। प्राइवेरी Queue आपको सामान्य कतार तरीकों जैसे कि पुश करने और एक ही चीज़ करने के लिए पॉप का उपयोग करने दें।

हापक की कुछ विशेषताओं को कतार में नहीं ले जाया जाता है। जैसे कि हिपुपपॉप () और हीप्रेलेस (), लेकिन आप उन लोगों का उपयोग करना कम पसंद करते हैं अगर आपको उनकी जरूरत है (और मैं अपनी मौजूदा प्रोजेक्ट में करता हूं), कतार के बजाय हेपक का उपयोग करें। प्राथमिकता प्रश्न।

इसके अलावा, चूंकि हैपिक अपने उद्देश्य के लिए विशेष है, यह धागा सुरक्षित नहीं है (जैसा कि एक अन्य उत्तर में बताया गया है।)


Queue.PriorityQueue एक धागा-सुरक्षित वर्ग है, जबकि heapq मॉड्यूल कोई थ्रेड-सुरक्षा गारंटी नहीं बनाता है। Queue मॉड्यूल दस्तावेज़ से :

Queue मॉड्यूल बहु-उत्पादक, बहु उपभोक्ता कतारों का कार्यान्वयन करता है। यह विशेष रूप से थ्रेडेड प्रोग्रामिंग में उपयोगी है, जब जानकारी को एकाधिक थ्रेड्स के बीच सुरक्षित रूप से एक्सचेंज किया जाना चाहिए। इस मॉड्यूल में Queue वर्ग सभी आवश्यक लॉकिंग सिमेंटिक लागू करता है। यह पायथन में धागा समर्थन की उपलब्धता पर निर्भर करता है; threading मॉड्यूल देखें

heapq मॉड्यूल लॉकिंग नहीं प्रदान करता है, और मानक list ऑब्जेक्ट्स पर चल रहा है, जो धागा-सुरक्षित होने का मतलब नहीं है।

वास्तव में, PriorityQueue heapq का कार्यान्वयन सभी प्राथमिकता कार्य करने के लिए हुड के तहत heapq का उपयोग करता है, आधार Queue वर्ग के साथ यह धागा-सुरक्षित बनाने के लिए लॉकिंग प्रदान करता है विवरण के लिए स्रोत कोड देखें

यह heapq मॉड्यूल को तेज बनाता है; कोई लॉकिंग ओवरहेड नहीं है इसके अलावा, आप अलग-अलग, उपन्यास के तरीकों में विभिन्न heapq फ़ंक्शन का उपयोग करने के लिए स्वतंत्र हैं, PriorityQueue heapq केवल सीधी-अप कतार की कार्यक्षमता प्रदान करता है।





priority-queue