आप फ़्लॉइड-वारशॉल का एक संस्करण बनाने की कोशिश कर सकते हैं जो विरल मैट्रिस पर तेज़ है।
सबसे पहले, आइए याद करें कि यह एल्गोरिथ्म क्या करता है:
चलो दूरियों का एक मैट्रिक्स है। एल्गोरिथ्म की शुरुआत में एम मैं , जे बढ़त का वजन है मैं → जे । तो मौजूद इस बढ़त करता है यदि नहीं एम मैं , जे = ∞ ।MMi,ji→jMi,j=∞
एल्गोरिथ्म में चरण हैं। एल्गोरिथ्म के चरण k में, नोड्स की प्रत्येक जोड़ी के लिए i , j हम सेट करते हैंVki,j
Mi,j←min{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)