बेलमैन-फोर्ड एल्गोरिदम - किनारों को ऑर्डर से बाहर क्यों अपडेट किया जा सकता है?


14

Bellman- फोर्ड एल्गोरिथ्म एक स्रोत से कम से कम पथ निर्धारित करता है अन्य सभी कोने करने के लिए। प्रारंभ में के बीच की दूरी रों और अन्य सभी कोने पर सेट है । फिर एस से प्रत्येक शीर्ष पर सबसे छोटा पथ गणना की जाती है; इस पर चला जाता है | वी | - 1 पुनरावृत्तियों। मेरे प्रश्न हैं:रोंरोंरों|वी|-1

  • होने की आवश्यकता क्यों है पुनरावृत्तियों?|वी|-1
  • यदि मैं किनारों को एक अलग क्रम में जाँचता हूँ तो क्या इससे कोई फर्क पड़ेगा?
    कहते हैं, अगर मैं पहली बार किनारों की जांच 1,2,3 करता हूं, लेकिन फिर दूसरी पुनरावृत्ति पर मैं 2,3,1 की जांच करता हूं।

MIT प्रो। एरिक ने कहा कि आदेश में कोई फर्क नहीं पड़ता, लेकिन यह मुझे भ्रमित करता है: क्या एल्गोरिथ्म गलत तरीके से एज पर आधारित नोड को अपडेट नहीं करेगा, यदि इसका मान एज x 1 पर निर्भर था, लेकिन x 1 को x 2 के बाद अपडेट किया गया है ?एक्स2एक्स1एक्स1एक्स2


आप किस कार्यान्वयन पर विचार करते हैं? गतिशील प्रोग्रामिंग एक को आदेश के साथ कोई समस्या नहीं है, जाहिर है; दूसरों के लिए यह गैर-तुच्छ हो सकता है।
राफेल

जवाबों:


15

से t , s , v 1 , v 2 , , v k , t से सबसे छोटे पथ पर विचार करें । इस पथ ज्यादा से ज्यादा के होते हैं | वी | - 1 किनारे, क्योंकि एक छोटी पथ में एक शीर्ष को दोहराना हमेशा एक बुरा विचार है (या कम से कम एक छोटा रास्ता है जो लंबवत दोहराता नहीं है), अगर हमारे पास नकारात्मक वजन चक्र नहीं है।रोंटीरों,v1,v2,...,v,टी|वी|-1

राउंड एक में, हम जानते हैं कि किनारे को आराम दिया जाएगा, इसलिए v 1 के लिए दूरी का अनुमान इस राउंड के बाद सही होगा। ध्यान दें कि हमें इस बात का कोई पता नहीं है कि v 1 इस बिंदु पर क्या है, लेकिन जैसा कि हमने सभी किनारों को आराम दिया है , हमें इस एक के रूप में भी आराम करना चाहिए। दो दौर में, हम कुछ बिंदु पर ( v 1 , v 2 ) आराम करते हैं । हमें अभी भी पता नहीं है कि v 1 या v 2 क्या हैं, लेकिन हम जानते हैं कि उनकी दूरी का अनुमान सही है।(रों,v1)v1v1(v1,v2)v1v2

इसे दोहराते हुए, कुछ राउंड , हमने आराम किया है ( v k , t ) , जिसके बाद t के लिए दूरी का अनुमान सही है। हमें पता नहीं है कि संपूर्ण एल्गोरिथ्म खत्म होने तक k क्या है, लेकिन हम जानते हैं कि यह किसी बिंदु पर होगा (कोई नकारात्मक भार चक्र मानकर)।+1(v,टी)टी

इसलिए, महत्वपूर्ण अवलोकन यह है कि राउंड बाद , सबसे छोटे पथ के i -th नोड का सही मान के लिए निर्धारित दूरी का अनुमान होना चाहिए। जैसा कि रास्ता सबसे ज्यादा है | वी | - 1 किनारे लंबा, | वी | - इस सबसे छोटे रास्ते को खोजने के लिए 1 राउंड पर्याप्त है। अगर ए | वी | वें दौर अभी भी कुछ बदलता है, तो कुछ अजीब चल रहा है: सभी रास्तों को पहले से ही उनके अंतिम मूल्यों के लिए 'व्यवस्थित' होना चाहिए, इसलिए हमारे पास यह स्थिति होनी चाहिए कि कुछ नकारात्मक वजन चक्र मौजूद है।मैंमैं|वी|-1|वी|-1|वी|


मुझे यहाँ एक छोटी सी शंका है। मुझे विश्वास है। v। -1 सबसे खराब स्थिति है, जिसके बाद सबसे छोटे रास्ते की गणना s से t तक की जाती है। मान लें कि हमारे पास कोने हैं, v1, v2..vn, t.If इस क्रम में किनारों को चुना जाता है (s, v1), (v1, v2) .. (vn, t), फिर एक ही पुनरावृत्ति में, हमारे पास s से t तक का सबसे छोटा रास्ता होगा। यह सिर्फ समझने के लिए और में है व्यावहारिक रूप से हम किनारों के क्रम को नहीं जानते हैं और इसलिए वी। -1 -1 राउंड। क्या मैं सही हूं?
whokares

1
@ जोकर: हाँ, आप भाग्यशाली हो सकते हैं और पहले दौर में सबसे छोटा रास्ता खोज सकते हैं। आप अंतिम दौर तक निश्चित रूप से नहीं जानते हैं कि आपको जो मूल्य मिल रहा है वह वास्तव में सबसे छोटा रास्ता है, लेकिन यह हो सकता है। दिज्क्स्ट्रा का एल्गोरिथ्म अनिवार्य रूप से 'ऐसा करने का कारण बनता है': यदि सभी किनारों में अपक्षयी भार हैं, तो दिज्क्स्ट्रा के एल्गोरिथ्म में उपयोग की जाने वाली प्राथमिकता कतार उस क्रम की भविष्यवाणी करती है जिसमें आपको किनारों को शिथिल करना चाहिए ताकि आप अपने पहले दौर के आरामों में सबसे छोटे रास्ते खोजें।
एलेक्स दस ब्रिंक

अद्यतन के लिए धन्यवाद। मुझे यह मिल गया है। सामग्री में से एक, इसके उल्लिखित के रूप में <br> स्लाइड 6: विश्राम के आदेश के एक खराब विकल्प से घातीय रूप से कई आराम हो सकते हैं: <br> स्लाइड 8: किनारे के आराम का "स्मार्ट" क्रम <br>
व्हाटकेयर

प्रत्येक पुनरावृत्ति में किनारों के क्रम के बावजूद, सबसे छोटे रास्तों की गणना की जाएगी। v। -1 पुनरावृत्तियों अधिकार? वह घातांक क्यों कहता है। क्या उसका मतलब है कि अगर हमने सभी पुनरावृत्तियों के लिए एक ही क्रम चुना, जो कि हम सामान्य रूप से करते हैं, तो छूट कोड कहा जाएगा लेकिन एक शीर्ष के लिए लेबल को अपडेट करने से केवल कम संख्या में ही हो सकता है क्योंकि इस क्रम में प्रोसेसर की बचत होती है समय ?
वोकरेस

1
@whokares: पहला एल्गोरिथ्म जो वे पेश करते हैं (जिसमें घातीय समय चल सकता है) सभी किनारों को एक दौर में आराम नहीं देता है, लेकिन इसके बजाय कुछ बढ़त पाता है जिसके लिए एक विश्राम ऑपरेशन कुछ बदल जाएगा, और इस किनारे को आराम देगा। यदि आप ऐसा करते रहते हैं और कोई नकारात्मक भार चक्र नहीं है, तो अंततः कोई किनारा आपको और अधिक मदद नहीं करेगा और आप रुक जाते हैं। हालाँकि, क्योंकि आपके पास कोई राउंड नहीं है और कोई सेट ऑर्डर नहीं है, जिस पर अगले आराम करने के लिए, आप अंत में आराम की एक घातीय संख्या कर सकते हैं। उनके द्वारा प्रस्तुत बेहतर एल्गोरिथ्म बेलमैन-फोर्ड है, जिसमें गोल हैं।
एलेक्स दस ब्रिंक

3

सबसे लंबा रास्ता बिना किसी चक्र के हो सकता है |V|। हम एक स्रोत से शुरू करते हैं, इसलिए हमारे पास पहले से ही लंबाई 1 का रास्ता है, इसलिए हमें |V| - 1सबसे लंबा रास्ता पाने के लिए अधिक नोड्स की आवश्यकता है।

आदेश कोई फर्क नहीं पड़ता क्योंकि हर आदेश अपरिवर्तनीय बनाए रखेगा: nपुनरावृत्तियों के बाद , प्रत्येक नोड के लिए मान न्यूनतम लागत पथ की लागत से कम या बराबर होता है, sजिसमें अधिकांश nकिनारों पर नोड होते हैं।

यदि, एक पुनरावृत्ति की शुरुआत में, लागत nनोड्स तक सही है , तो पुनरावृत्ति के अंत में यह n+1नोड्स तक सही है । सामान्य रूप से अपडेट किए जाने से पहले रीऑर्डर करने से कुछ नोड्स की लागत कम हो सकती है, लेकिन वे अंततः वैसे भी अपडेट किए जाएंगे।


मुझे नहीं पता कि यह सिर्फ मेरे लिए है, या मैं वास्तव में इन तथ्यों की कल्पना आसानी से नहीं कर सकता। मेरे लिए, मुझे अभी भी लगता है कि कुछ नोड्स हो सकते हैं जो V-1 पुनरावृत्तियों के भीतर अपडेट नहीं हुए हैं।
user1675999

नहीं, आपके पास | E | = | V--1 किनारों पर जब आपके पास है | V | चक्रों के बिना एक सरल पथ द्वारा जुड़े नोड्स। और आपके पास | V-1 पुनरावृत्तियों, अपनी प्रतिक्रिया को हटा दें क्योंकि यह गलत है।
सैम

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