Class | Single-source shortest path problem (for weighted directed graphs) |
---|---|
Data Structure | Graph |
Best-Case Time Complexity | |
Worst-Case Time Complexity | |
Space Complexity |
बेलमैन-फोर्ड एल्गोरिथ्म एक एल्गोरिथ्म है जो एक भारित डिग्राफ(weighted Digraph) में एक एकल स्रोत के शीर्ष से अन्य सभी कोने के लिए सबसे छोटे पथों की गणना करता है। यह एक ही समस्या के लिए दिज्क्स्ट्रा के एल्गोरिथ्म की तुलना में धीमी है, लेकिन अधिक बहुमुखी है, क्योंकि यह उन ग्राफ़ को संभालने में सक्षम है जिनमें से कुछ में वजन नकारात्मक संख्याएं हैं। अल्फोंसो शिम्बेल (1955) द्वारा एल्गोरिथ्म को पहली बार प्रस्तावित किया गया था, लेकिन इसके बजाय इसका नाम रिचर्ड बेलमैन और लेस्टर फोर्ड जूनियर के नाम पर रखा गया, जिन्होंने क्रमशः 1958 और 1956 में इसे प्रकाशित किया। एडवर्ड एफ. मूर[1] ने भी 1957 में एक ही एल्गोरिथ्म प्रकाशित किया था, और इस कारण से इसे कभी-कभी बेलमैन-फोर्ड-मूर एल्गोरिथम(Bellman–Ford–Moore algorithm)[2] भी कहा जाता है।[3]
निम्नलिखित विस्तृत चरण हैं।
इनपुट: ग्राफ और एक स्रोत शीर्ष (source)
आउटपुट: (source) से सभी कोने के लिए सबसे कम दूरी। यदि एक नकारात्मक वजन चक्र है, तो सबसे छोटी दूरी की गणना नहीं की जाती है, नकारात्मक वजन चक्र की सूचना दी जाती है।
(चरण 3) का विचार है, चरण 2 सबसे कम दूरी की गारंटी देता है यदि ग्राफ में नकारात्मक भार चक्र नहीं है। यदि हम सभी किनारों के माध्यम से एक और बार पुनरावृत्ति करते हैं और किसी भी शीर्ष के लिए एक छोटा रास्ता प्राप्त करते हैं, तो यहां एक नकारात्मक वजन चक्र है।
function Bellman-Ford(list vertices, list edges, vertex s) do for each vertex v∈V d[v]← ∞ p[v]←nil end do for each d[s]←0 for k = 1 to the number of vertices minus 1 // |V|−1 (जो हमने चरण -2 में किया है) do for each edges(i,j)∈E if d[j] > d[i] + w(i,j) then d[j] := d[i] + w(i,j) p[j] := i end if end do for each end for for each edge(i,j) with weight w(i,j) in edges do // (जो हमने चरण -3 में किया है) if d[j] > d[i] + w(i,j) then error "Graph contains a negative-weight cycle" return d[], p[]
अन्य डायनामिक प्रोग्रामिंग समस्याओं की तरह, एल्गोरिथ्म एक bottom-up तरीके से सबसे छोटे रास्तों की गणना करता है। यह सबसे कम दूरी की गणना करता है, जो कि मार्ग में सबसे अधिक एक किनारे है। फिर, यह सबसे कम 2 किनारों के साथ सबसे छोटे रास्तों की गणना करता है, और इसी तरह। बाहरी लूप के ith पुनरावृत्ति के बाद, सबसे अधिक किनारों के साथ सबसे छोटे रास्तों की गणना की जाती है। अधिकतम | V | - 1 किसी भी सरल पथ में किनारे हो सकते है, यही कारण है कि बाहरी लूप | v | - 1 बार चलता है । यह विचार है कि कोई नकारात्मक भार चक्र नहीं है, अगर हमने सबसे कम किनारों पर सबसे छोटे रास्तों की गणना की है, तो सभी किनारों पर एक पुनरावृत्ति सबसे कम (i + 1) किनारों के साथ सबसे छोटा रास्ता देने की गारंटी देता है।[4]