यहाँ Realz Slaw के उत्तर में विचारों पर आधारित एक समाधान है। यह मूल रूप से उनके विचारों का पुन: प्रदर्शन है जो स्पष्ट या अनुसरण करने में आसान हो सकता है। योजना यह है कि हम दो चरणों में आगे बढ़ेंगे:
सबसे पहले, हम एक ग्राफ का निर्माण करेगा निम्नलिखित संपत्ति के साथ: से किसी भी पथ रों को टी में एस एक कम से कम से मार्ग है रों को टी में जी , और हर कम से कम से पथ रों को टी में जी भी में मौजूद है एस । इस प्रकार, S में G के सबसे छोटे रास्ते हैं: सभी सबसे छोटे रास्ते, और कुछ भी नहीं। जैसा कि होता है, S एक DAG होगा।SstSstGstGSSGS
इसके बाद, हम यादृच्छिक पर समान रूप से से सभी रास्ते से नमूना होगा को टी में एस ।stS
यह एक मनमाने ढंग से निर्देशित ग्राफ लिए दृष्टिकोण करता है , जब तक कि सभी किनारों का सकारात्मक वजन होता है, इसलिए मैं उन तरीकों से अपने एल्गोरिथ्म को समझाऊंगा। चलो डब्ल्यू ( यू , वी ) किनारे पर वजन निरूपित यू → v । (यह आपके द्वारा दिए गए समस्या कथन को सामान्यीकृत करता है। यदि आपके पास एक अनवेटेड ग्राफ़ है, तो मान लें कि हर किनारे का वजन 1 है। यदि आपके पास एक अप्रत्यक्ष ग्राफ़ है, तो प्रत्येक अप्रत्यक्ष किनारे ( यू , वी ) को दो निर्देशित किनारों के रूप में समझें u → v और v → यू ।)Gw(u,v)u→v(u,v)u→vv→u
चरण 1: निकालें । S पर एक एकल स्रोत कम से कम-पथ एल्गोरिथ्म (जैसे, डिज्कस्ट्रा एल्गोरिथ्म) रन , स्रोत से शुरू रों । G में प्रत्येक शीर्ष v के लिए , d ( s , v ) को s से v की दूरी बताएं ।GsvGd(s,v)sv
अब ग्राफ को इस प्रकार परिभाषित करें । इसमें हर किनारे u → v होता है जैसे (1) u → v , G में बढ़त है , और (2) d ( s , v ) = d ( s , u ) + w ( u , v ) ।Su→vu→vGd(s,v)=d(s,u)+w(u,v)
ग्राफ में कुछ सुविधाजनक गुण हैं:S
G से से t तक का प्रत्येक सबसे छोटा पथ S में पथ के रूप में मौजूद है : एक छोटा पथ s = v 0 , v 1 , v 2 , … , v k = t में G का गुणधर्म d ( s , v i + 1) है ) = d ( s , v i ) + w ( v i , v i)stGSs=v0,v1,v2,…,vk=tG, इसलिए किनारे v i → v i + 1 Sमें मौजूद है।d(s,vi+1)=d(s,vi)+w(vi,vi+1)vi→vi+1S
में हर पथ से रों को टी में एक कम से कम पथ है जी । विशेष रूप से, किसी भी मार्ग पर विचार एस से रों को टी , कहते हैं रों = v 0 , वी 1 , वी 2 , ... , वी कश्मीर = टी । उसकी लम्बाई उसके किनारों के भार का योग द्वारा दिया जाता है, अर्थात् Σ k मैं = 1 डब्ल्यू ( v मैं - 1 , वी मैं )SstGSsts=v0,v1,v2,…,vk=t∑ki=1w(vi−1,vi), लेकिन की परिभाषा के द्वारा , इस योग है Σ कश्मीर मैं = 1 ( घ ( रों , वी मैं ) - डी ( रों , वी मैं - 1 ) , जो करने के लिए दूरबीन घ ( रों , टी ) - डी ( रों , रों ) = डी ( एस , टी ) । इसलिए, यह पथ जी में एस से टी तक का सबसे छोटा रास्ता हैS∑ki=1(d(s,vi)−d(s,vi−1)d(s,t)−d(s,s)=d(s,t)stG।
अंत में, में शून्य-वजन वाले किनारों की अनुपस्थिति का मतलब है कि एस एक डैग है।GS
चरण 2: एक यादृच्छिक पथ का नमूना लें। अब हम में किनारों पर भार फेंक सकता , और से एक यादृच्छिक पथ नमूना रों को टी में एस ।SstS
इसकी सहायता के लिए, हम S में प्रत्येक शीर्ष v के लिए गणना करने के लिए एक पूर्व-निर्धारण करेंगे , जहाँ n ( v ) v से t तक के अलग-अलग रास्तों की संख्या की गणना करता है । इस पुनर्संयोजन को रेखीय समय में एस के कोने को स्थैतिक रूप से क्रमबद्ध क्रम में स्कैन करके किया जा सकता है , निम्नलिखित आवर्ती संबंध का उपयोग करके:n(v)vSn(v)vtS
n(v)=∑w∈succ(v)n(w)
जहां के उत्तराधिकारियों को दर्शाता है वी , यानी, succ ( v ) = { w : वी → w में बढ़त है एस } , और जहाँ हम आधार मामला है n ( टी ) = 1 ।succ(v)vsucc(v)={w:v→w is an edge in S}n(t)=1
अगला, हम एक यादृच्छिक पथ के नमूने के लिए एनोटेशन का उपयोग करते हैं । हम पहले नोड s पर जाएँ । फिर, हम क्रमिक रूप से s के उत्तराधिकारियों में से एक को चुनते हैं , उत्तराधिकारी w द्वारा n ( w ) द्वारा भारित किया जाता है । दूसरे शब्दों में:n(⋅)sswn(w)
choosesuccessor(v):
n = 0
for each w in succ(w):
n = n + n(w)
r = a random integer between 0 and n-1
n = 0
for each w in succ(w):
n = n + n(w)
if r < n:
return w
एक यादृच्छिक रास्ता चुनने के लिए, हम इस प्रक्रिया को बार-बार दोहराते हैं: अर्थात, , और v i + 1 = ( v i ) । परिणामी पथ वांछित पथ है, और इसे एस से टी तक सभी सबसे छोटे रास्तों से यादृच्छिक पर समान रूप से नमूना लिया जाएगा ।v0=svi+1= choosesuccessor
(vi)st
उम्मीद है कि यह आपको Realz Slaw के समाधान को अधिक आसानी से समझने में मदद करता है। इस समस्या के सुंदर और साफ समाधान के लिए Realz स्लाव के लिए सभी क्रेडिट!
एक मामला यह नहीं संभालता है वह मामला है जहां कुछ किनारों का वजन 0 या नकारात्मक वजन है। हालाँकि, समस्या संभावित रूप से उस मामले में अच्छी तरह से परिभाषित नहीं है, क्योंकि आपके पास असीम रूप से कई छोटे रास्ते हो सकते हैं।