एक विरल ग्राफ में सभी सबसे छोटे रास्तों को खोजने के लिए सबसे तेज़ एल्गोरिथम क्या है?


24

वर्टिस और किनारों के साथ एक अनवीटेड, अप्रत्यक्ष ग्राफ में जैसे कि , एक ग्राफ में सभी सबसे छोटे रास्तों को खोजने का सबसे तेज़ तरीका क्या है? क्या यह फ्लोयड-वारशॉल की तुलना में तेज़ी से किया जा सकता है जो लेकिन प्रति पुनरावृत्ति बहुत तेज़ है?VE2V>EO(V3)

कैसे के बारे में अगर ग्राफ भारित है?

जवाबों:


32

चूँकि यह एक अनवेटेड ग्राफ़ है, आप ग्राफ़ में प्रत्येक शीर्ष से एक ब्रेडथ फर्स्ट सर्च (BFS) चला सकते हैं । बीएफएस का प्रत्येक रन आपको शुरुआती शीर्ष से हर दूसरे शीर्ष पर सबसे छोटी दूरी (और पथ) देता है। एक बीएफएस के लिए समय की जटिलता आपके विरल ग्राफ में बाद से । इसे बार चलाने से आपको समय की जटिलता मिलती है।vO(V+E)=O(V)E=O(V)VO(V2)

एक भारित निर्देशित ग्राफ के लिए, युवल द्वारा सुझाया गया जॉनसन का एल्गोरिथ्म विरल रेखांकन के लिए सबसे तेज़ है। यह लेता है जो आपके मामले में निकला है । एक भारित अप्रत्यक्ष ग्राफ के लिए, आप या तो प्रत्येक नोड से दिक्जस्ट्रा के एल्गोरिथ्म को चला सकते हैं , या प्रत्येक अप्रत्यक्ष किनारे को दो विपरीत निर्देशित किनारों से बदल सकते हैं और जॉनसन के एल्गोरिथ्म को चला सकते हैं। ये दोनों आपके विरल मामले के लिए जॉनसन के एल्गोरिथ्म के रूप में एक ही aysmptotic समय देंगे। यह भी ध्यान दें कि ऊपर उल्लिखित बीएफएस दृष्टिकोण मैं निर्देशित और अप्रत्यक्ष दोनों ग्राफ़ के लिए काम करता है।O(V2logV+VE)O(V2logV)



7

आप फ़्लॉइड-वारशॉल का एक संस्करण बनाने की कोशिश कर सकते हैं जो विरल मैट्रिस पर तेज़ है।

सबसे पहले, आइए याद करें कि यह एल्गोरिथ्म क्या करता है:

चलो दूरियों का एक मैट्रिक्स है। एल्गोरिथ्म की शुरुआत में एम मैं , जे बढ़त का वजन है मैं जे । तो मौजूद इस बढ़त करता है यदि नहीं एम मैं , जे = MMi,jijMi,j=

एल्गोरिथ्म में चरण हैं। एल्गोरिथ्म के चरण k में, नोड्स की प्रत्येक जोड़ी के लिए i , j हम सेट करते हैंVki,j

Mi,jmin{Mi,j,Mi,k+Mk,j}.

जाहिर है अगर या एम कश्मीर , जे = तो कोई अद्यतन जरूरतों प्रदर्शन किया जा करने के लिए। इस प्रकार, एल्गोरिथ्म के पहले चरण में, हम केवल मोटे तौर पर करने की आवश्यकता जी मैं n ( कश्मीर ) जी यू टी ( कश्मीर ) की तुलना जहां जी मैं n ( कश्मीर ) और जी यू टी (Mi,k=Mk,j=degin(k)degout(k)degin(k) क्रमशः k -th नोडके आवक और जावक किनारों की संख्या को दर्शाताहै। जैसे-जैसे एल्गोरिथ्म आगे बढ़ता है, मैट्रिक्स एम की अधिक से अधिक प्रविष्टियाँभर जाती हैं। इसलिए, अंतिम चरणों में अधिक समय लग सकता है।degout(k)kM

ध्यान दें कि हम पुनरावृति करने के लिए एक कारगर तरीका की जरूरत है केवल अधिक गैर अनंत कोशिकाओं वें पंक्ति और मैट्रिक्स के कॉलम। यह प्रत्येक नोड के लिए आवक और जावक किनारों का एक सेट रखकर किया जा सकता है।k

ऐसा प्रतीत होता है कि एल्गोरिथ्म के पहले चरण को स्पार्सिटी से बहुत लाभ हो सकता है। उदाहरण के लिए, साथ एक बेतरतीब ढंग से निर्मित ग्राफ बताता है कि पहला पुनरावृत्ति ( k = 0 ) केवल O ( 1 ) चरण है। यदि ग्राफ़ कई जुड़े घटकों में विभाजित है, तो मैट्रिक्स एम एल्गोरिथम में अपेक्षाकृत विरल रहेगा और कुल रनटाइम O ( V ) जितना कम हो सकता है । दूसरी ओर, यदि ग्राफ़ में केवल एक जुड़ा हुआ घटक है, तो अंतिम पुनरावृत्ति k = | वी |E=O(V)k=0O(1)MO(V)k=|V|लगने की उम्मीद है चरणों। इस स्थिति में कुल रन-टाइम O ( V 3 ) हो सकता है । गैर-विरल संस्करण जितना बड़ा।O(V2)O(V3)

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