क्या दिज्क्स्ट्रा का एल्गोरिथ्म सिर्फ बीएफएस एक प्राथमिकता कतार के साथ है?


22

इस पृष्ठ के अनुसार , दिक्जस्ट्रा का एल्गोरिथ्म केवल प्राथमिकता वाले कतार के साथ BFS है। क्या यह वास्तव में इतना आसान है? मुझे नहीं लगता।


1
आप ऐसा क्यों सोचते हैं?
राफेल

@ राफेल क्योंकि यह बहुत सरल लगता है, और यह है: मैंने इसे फिर से अध्ययन किया है और मुझे लगता है कि अब यह नोड्स के बीच की दूरी का ट्रैक नहीं रखता है, इसलिए यह वास्तव में एक बीएफएस है, न कि दिज्कस्ट्रा।
बैरी फ्रूटमैन

1
खैर, डिज्कस्ट्रा करता मूल्यों कतार के साथ (अक्सर कहा जाता है "छूट") "हल कर" है, उसे बदलने; अगर आप मना करते हैं कि, यह वही नहीं है, सच है।
राफेल

जवाबों:


20

आप प्राथमिकता पंक्ति के साथ बीएफएस के रूप में दिज्कस्ट्रा के एल्गोरिथ्म को लागू कर सकते हैं (हालांकि यह केवल कार्यान्वयन नहीं है)।

दिज्क्स्ट्रा का एल्गोरिथ्म संपत्ति पर निर्भर करता है कि से टी तक का सबसे छोटा रास्ता भी रास्ते के किसी भी कोने से सबसे छोटा रास्ता है। यह वही है जो बीएफएस करता है।st

या दूसरे परिप्रेक्ष्य में: अगर सभी वजन 1 थे, तो डायजेस्ट्रा का एल्गोरिदम कैसे व्यवहार करेगा? बिल्कुल बीएफएस की तरह।


4

सबसे पहले, हम BFS को अधिक सामान्य भारित ग्राफ कैसे अनुकूलित कर सकते हैं ?G=(V,E)

दासगुप्ता और अन्य द्वारा "अल्गोरिदम (धारा 4.4)" पुस्तक का एक विचार है:

के लिए किसी भी किनारे के (के साथ वजन एल ), यह द्वारा की जगह एल लंबाई के किनारों 1 , जोड़कर एल - 1 के बीच डमी नोड्स यू और वीe=(u,v)Elele1le1uv

नतीजतन, परिणाम ग्राफ के किनारों सभी इकाई लंबाई की है। इसलिए, हम G पर BFS चलाकर G की दूरी की गणना कर सकते हैं ।GGG

दूसरा, पर डायजेस्ट्रा एल्गोरिथ्म कैसे बदल ग्राफ जी पर बीएफएस को हराता है ?GG

पर BFS वास्तव में धीमी गति से हो सकता है अगर कुछ एल बड़े हैं क्योंकि यह कंप्यूटिंग उन डमी नोड्स के लिए दूरी पर बहुत अधिक समय है कि हम सब के बारे में परवाह नहीं है बरबाद करती है। दिक्जस्त्र एल्गोरिथ्म नोड्स के लिए अनुमानित दूरी निर्धारित करके और जब भी संभव हो, उन्हें आराम करने से बचता है।Gle

तीसरा, दिक्जस्ट्रा एल्गोरिथ्म कैसे अनवीटेड ग्राफ पर व्यवहार करता है?

यह बिलकुल वैसा ही व्यवहार करता है जैसा BFS करता है। हम इसे दो प्रमुख बिंदुओं से विस्तृत करते हैं।

  • "विश्राम" पर।

    सामान्य, भारित ग्राफ पर दीजकस्ट्रा एल्गोरिथ्म के लिए, विश्राम है

    for all edges (u,v) in E:
        if dist(v) > dist(u) + w(u,v)
           dist(v) = dist(u) + w(u,v)
    

    dist(v)=w(u,v)=1

    for all edges (u,v) in E:
        if dist(v) = \infty
           dist(v) = dist(u) + 1
    
  • "प्राथमिकता कतार" पर।

    जब किसी भी समय डायजेक्ट्रा एल्गोरिथ्म को अनवीटेड ग्राफ पर चलाया जाता है, तो प्राथमिकता कतार में दो अलग-अलग (दूरी) मान होते हैं। इसलिए, बीएफएस की एक FIFO कतार पर्याप्त है।

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