इस पृष्ठ के अनुसार , दिक्जस्ट्रा का एल्गोरिथ्म केवल प्राथमिकता वाले कतार के साथ BFS है। क्या यह वास्तव में इतना आसान है? मुझे नहीं लगता।
इस पृष्ठ के अनुसार , दिक्जस्ट्रा का एल्गोरिथ्म केवल प्राथमिकता वाले कतार के साथ BFS है। क्या यह वास्तव में इतना आसान है? मुझे नहीं लगता।
जवाबों:
आप प्राथमिकता पंक्ति के साथ बीएफएस के रूप में दिज्कस्ट्रा के एल्गोरिथ्म को लागू कर सकते हैं (हालांकि यह केवल कार्यान्वयन नहीं है)।
दिज्क्स्ट्रा का एल्गोरिथ्म संपत्ति पर निर्भर करता है कि से टी तक का सबसे छोटा रास्ता भी रास्ते के किसी भी कोने से सबसे छोटा रास्ता है। यह वही है जो बीएफएस करता है।
या दूसरे परिप्रेक्ष्य में: अगर सभी वजन 1 थे, तो डायजेस्ट्रा का एल्गोरिदम कैसे व्यवहार करेगा? बिल्कुल बीएफएस की तरह।
सबसे पहले, हम BFS को अधिक सामान्य भारित ग्राफ कैसे अनुकूलित कर सकते हैं ?
दासगुप्ता और अन्य द्वारा "अल्गोरिदम (धारा 4.4)" पुस्तक का एक विचार है:
के लिए किसी भी किनारे के ई (के साथ वजन एल ई ), यह द्वारा की जगह एल ई लंबाई के किनारों 1 , जोड़कर एल ई - 1 के बीच डमी नोड्स यू और वी ।
नतीजतन, परिणाम ग्राफ के किनारों सभी इकाई लंबाई की है। इसलिए, हम G ′ पर BFS चलाकर G की दूरी की गणना कर सकते हैं ।
दूसरा, पर डायजेस्ट्रा एल्गोरिथ्म कैसे बदल ग्राफ जी ′ पर बीएफएस को हराता है ?
पर BFS वास्तव में धीमी गति से हो सकता है अगर कुछ एल ई बड़े हैं क्योंकि यह कंप्यूटिंग उन डमी नोड्स के लिए दूरी पर बहुत अधिक समय है कि हम सब के बारे में परवाह नहीं है बरबाद करती है। दिक्जस्त्र एल्गोरिथ्म नोड्स के लिए अनुमानित दूरी निर्धारित करके और जब भी संभव हो, उन्हें आराम करने से बचता है।
तीसरा, दिक्जस्ट्रा एल्गोरिथ्म कैसे अनवीटेड ग्राफ पर व्यवहार करता है?
यह बिलकुल वैसा ही व्यवहार करता है जैसा BFS करता है। हम इसे दो प्रमुख बिंदुओं से विस्तृत करते हैं।
"विश्राम" पर।
सामान्य, भारित ग्राफ पर दीजकस्ट्रा एल्गोरिथ्म के लिए, विश्राम है
for all edges (u,v) in E:
if dist(v) > dist(u) + w(u,v)
dist(v) = dist(u) + w(u,v)
for all edges (u,v) in E:
if dist(v) = \infty
dist(v) = dist(u) + 1
"प्राथमिकता कतार" पर।
जब किसी भी समय डायजेक्ट्रा एल्गोरिथ्म को अनवीटेड ग्राफ पर चलाया जाता है, तो प्राथमिकता कतार में दो अलग-अलग (दूरी) मान होते हैं। इसलिए, बीएफएस की एक FIFO कतार पर्याप्त है।