नोड्स को फिर से स्थापित करने के बजाय कमी-कुंजी का उपयोग करने का कारण प्राथमिकता कतार में नोड्स की संख्या को छोटा रखना है, इस प्रकार प्राथमिकता कतार की कुल संख्या को छोटा रखना और प्रत्येक प्राथमिकता कतार संतुलन की लागत कम है।
दीजकस्ट्रा के एल्गोरिथ्म के कार्यान्वयन में, जो उनकी नई प्राथमिकताओं के साथ प्राथमिकता कतार में नोड्स को पुन: बनाता है, ग्राफ में प्रत्येक किनारों के लिए प्राथमिकता नोड में एक नोड जोड़ा जाता है। इसका मतलब यह है कि प्राथमिकता कतार पर m enqueue संचालन और m dequeue संचालन हैं, जो O (m T e + m T d ) का कुल रनटाइम देता है , जहां T e को प्राथमिकता कतार और T d में संलग्न करने के लिए आवश्यक समय है। प्राथमिकता कतार से हटने के लिए आवश्यक समय।
डायजेस्ट्रा के एल्गोरिथ्म के कार्यान्वयन में जो कमी-कुंजी का समर्थन करता है, नोड्स को पकड़ने वाली प्राथमिकता कतार इसमें n नोड्स से शुरू होती है और एल्गोरिथ्म के प्रत्येक चरण पर एक नोड को हटा देती है। इसका मतलब है कि ढेर के ढेरों की कुल संख्या n है। प्रत्येक नोड की कमी-कुंजी उस पर कॉल की जाएगी जो संभावित रूप से प्रत्येक किनारे पर एक बार आगे बढ़ेगी, इसलिए किए गए कमी-कुंजी की कुल संख्या अधिकांश मीटर पर है। यह (n T e + n T d + m T k ) का रनटाइम देता है , जहाँ T k कमी-कुंजी को कॉल करने के लिए आवश्यक समय है।
तो रनटाइम पर इसका क्या प्रभाव पड़ता है? यह इस बात पर निर्भर करता है कि आप किस प्राथमिकता की कतार का उपयोग करते हैं। यहाँ एक त्वरित तालिका है जो अलग-अलग प्राथमिकता वाले कतारों को दिखाती है और अलग-अलग दीजकस्ट्रा के एल्गोरिथ्म कार्यान्वयन के समग्र रनटाइम:
Queue | T_e | T_d | T_k | w/o Dec-Key | w/Dec-Key
---------------+--------+--------+--------+-------------+---------------
Binary Heap |O(log N)|O(log N)|O(log N)| O(M log N) | O(M log N)
Binomial Heap |O(log N)|O(log N)|O(log N)| O(M log N) | O(M log N)
Fibonacci Heap | O(1) |O(log N)| O(1) | O(M log N) | O(M + N log N)
जैसा कि आप देख सकते हैं, अधिकांश प्रकार की प्राथमिकता वाली कतारों के साथ, वास्तव में एसिम्प्टोटिक रनटाइम में कोई अंतर नहीं है, और कमी-कुंजी संस्करण बहुत बेहतर करने की संभावना नहीं है। हालाँकि, यदि आप प्राथमिकता कतार के फाइबोनैचि हीप कार्यान्वयन का उपयोग करते हैं , तो वास्तव में डायजेस्ट्रा का एल्गोरिथ्म कमी-कुंजी का उपयोग करते समय समान रूप से अधिक कुशल होगा।
संक्षेप में, कमी-कुंजी का उपयोग करना, साथ ही एक अच्छी प्राथमिकता कतार, दिक्क्स्ट्रा के एसिम्प्टोटिक रनटाइम को आगे बढ़ा सकता है यदि आप एंक्सेस और डीक्यूस रखते हैं तो क्या संभव है।
इस बिंदु के अलावा, कुछ और उन्नत एल्गोरिदम, जैसे कि गैबो के शॉर्टेस्ट पाथ अल्गोरिथम, डायजेक्स्ट्रा के एल्गोरिथ्म को सबरूटीन के रूप में उपयोग करते हैं और कमी-कुंजी कार्यान्वयन पर बहुत अधिक भरोसा करते हैं। वे इस तथ्य का उपयोग करते हैं कि यदि आप पहले से मान्य दूरी की सीमा जानते हैं, तो आप उस तथ्य के आधार पर एक सुपर कुशल प्राथमिकता कतार बना सकते हैं।
उम्मीद है की यह मदद करेगा!