मैं यह समझने की कोशिश कर रहा हूं कि ये एल्गोरिदम कैसे काम करते हैं, लेकिन मैं एक सरल स्पष्टीकरण खोजने में असमर्थ हूं। यदि कोई मुझे मूल पत्रों में विवरण की तुलना में समझने में आसान है, तो इन एल्गोरिदम के वर्णन के लिए मुझे प्रदान या इंगित कर सकता है, तो मैं इसकी बहुत सराहना करता हूं। धन्यवाद।एपस्टीन के एल्गोरिदम और केन सबसे कम पथ के लिए येन का एल्गोरिदम
उत्तर
सबसे पहले मैं आपको उन कागजात के लिंक प्रदान करने देता हूं जिनके बारे में आप बात कर रहे थे।
Eppstein के कागज: D. Eppstein, “Finding the k shortest paths,” SIAM J. Comput., vol. 28, no. 2, pp.652–673, Feb. 1999
यहाँ येन एल्गोरिथ्म की मेरी व्याख्या है:
येन एल्गोरिथ्म दो सूचियों का उपयोग करता है, यानी सूची ए (गंतव्य के लिए स्रोत से स्थायी कम से कम पथ - कालक्रम से आदेश दिया गया) और सूची बी (टेंटेटिव/उम्मीदवार सबसे कम पथ)। सबसे पहले आपको किसी भी सुसंगत सबसे कम पथ एल्गोरिदम (उदा। डिजस्ट्रा) का उपयोग करके स्रोत से गंतव्य तक पहला सबसे छोटा रास्ता खोजना होगा। फिर येन इस विचार का शोषण करते हैं कि के-वें सबसे छोटे पथ किनारों और उप-पथ (मार्ग से मार्ग के किसी भी मध्यस्थ नोड्स तक पथ) को साझा कर सकते हैं (के -1) - सबसे छोटा रास्ता। फिर आपको (के -1) सबसे छोटा रास्ता लेना होगा और मार्ग में प्रत्येक नोड को बदले में पहुंचने योग्य नहीं होगा, यानी मार्ग के भीतर नोड पर जाने वाले विशेष किनारे को बंद कर दें। एक बार नोड पहुंच योग्य नहीं है, तो पिछले नोड से गंतव्य तक सबसे छोटा रास्ता पाएं। फिर आपके पास एक नया मार्ग है जो आम उप-पथ (स्रोत से पहुंचने योग्य नोड के पूर्ववर्ती नोड) को जोड़कर बनाया गया है और नोड से गंतव्य तक नया सबसे छोटा रास्ता जोड़ता है। यह मार्ग तब सूची बी में जोड़ा जाता है, बशर्ते कि यह सूची ए या सूची बी में पहले दिखाई नहीं दे रहा है। मार्ग में सभी नोड्स के लिए इसे दोहराने के बाद, आपको सूची बी में सबसे छोटा रास्ता ढूंढना होगा और उसे सूची में ले जाना होगा। आपको बस इस प्रक्रिया को दोहराने के लिए दोहराना होगा।
इस एल्गोरिदम में ओ (एन^3) की कम्प्यूटेशनल जटिलता है। अधिक जानकारी के लिए कृपया पेपर पढ़ें।
एल्गोरिथ्म इस प्रकार है:
G = Adjacent Matrix of the Network
Initialize:
A_1 = shortest-path from source to destination
Glocal ← Local copy of G
for k = 2 → K do
for i = 1 → [len(A_(k−1)) − 1] do
Current Node ← A_(k−1) [i]
Ri ← Sub-path (root) from source till current node in A_(k−1)
for j = 1 → k − 1 do
Rj ← Sub-path (root) from source till current node in A_j
if Ri == Rj then
Next Node ← Aj [i+1]
Glocal(Current Node, Next Node) ← infinity
Current Node ← unreachable
end if
end for
Si ← Shortest-path from current node till destination
Bi ← Ri + Si
end for
A_k ← Shortest-path amongst all paths in B
Restore original graph: Glocal ← Local copy of G
end for
दुर्भाग्य से, मैं Eppstein के एक उपयोग नहीं किया है के रूप में येन एल्गोरिथ्म मेरी समस्या के लिए इष्टतम था।
उम्मीद है कि इससे मदद मिलती है। चीयर्स।
=====
संपादित करें:
कृपया wikipedia entry पर एक नज़र भी है। यह एक अच्छा उदाहरण है।
=====
संपादित करें:
इस प्रकार मैं सी में कुछ कार्यान्वयन लिंक हैं पाया है:
Eppstein implementation और Loading Graph for Eppstein।
यदि आप रुचि रखते हैं, तो एपस्टीन के lazy version हैं।लिंक इस प्रकार है:
Lazy Eppstein by Jimenez and Marzal
=====
संपादित करें:
बस एक और link। इसमें कई कार्यान्वयन (सी/सी ++) शामिल हैं।
=====
संपादित करें:
मैं Eppstein के एल्गोरिथ्म के एक good explanation मिल गया है।
- 1. किनारे के साथ सबसे कम पथ पथ एल्गोरिदम
- 2. एल्गोरिदम 'न्यूनतम स्पैनिंग पथ' ढूंढने के लिए?
- 3. के-सबसे छोटा (वैकल्पिक) पथ एल्गोरिदम, जावा कार्यान्वयन
- 4. डिजस्ट्रा के एल्गोरिदम
- 5. सबसे कम आम पूर्वज एल्गोरिदम के व्यावहारिक अनुप्रयोग क्या हैं?
- 6. पथ ढूँढना: डी * एल्गोरिदम
- 7. बाधाओं के साथ सबसे छोटा रास्ता खोजने के लिए एल्गोरिदम
- 8. क्या dijkstras एल्गोरिदम क्रम में सबसे कम पथ के किनारों को आराम करता है?
- 9. कुछ ग्राफ परिचालनों के लिए सबसे आसान एल्गोरिदम के सुझाव
- 10. संख्याओं के बड़े सेट के लिए सबसे कुशल सॉर्टिंग एल्गोरिदम
- 11. DIjkstra और BellmanFord एल्गोरिदम
- 12. एल्गोरिदम समस्या - कम से कम सामान्य सबसेट
- 13. सबसे बड़ा सबमिट्रिक्स एल्गोरिदम
- 14. रैंकिंग आइटम के लिए एल्गोरिदम
- 15. कर्नलिंग divs के लिए एल्गोरिदम
- 16. सबसे उपयोगी समानांतर प्रोग्रामिंग एल्गोरिदम?
- 17. _vhich_ सेट करने के लिए कुशल एल्गोरिदम
- 18. ग्राफ ट्रैवर्सल एल्गोरिदम के नाम
- 19. उत्पादों का सुझाव देने के लिए एल्गोरिदम
- 20. एल्गोरिदम
- 21. मैट्रिक्स गुणा के लिए स्ट्रैसेन का एल्गोरिदम
- 22. डिजस्ट्रा के एल्गोरिदम
- 23. क्या सबसे आम एल्गोरिदम का अवलोकन है?
- 24. आवाज तुलना के लिए एल्गोरिदम
- 25. एल्गोरिदम
- 26. सबसे तेज़ पड़ोसी पड़ोसी एल्गोरिदम
- 27. ग्राफ खोज एल्गोरिदम
- 28. एल्गोरिदम?
- 29. दूरी परिवर्तन के लिए सबसे तेज़ उपलब्ध एल्गोरिदम
- 30. पाइथन itertools.permutations के लिए एल्गोरिदम
किस मूल कागजात के? आपने पहले से क्या प्रयास किया? आपकी असली समस्या क्या है? – Karussell
वे थोड़ा अलग समस्याएं हल करते हैं: एपस्टीन के एल्गोरिदम पथ को बार-बार शिखर (लूप) करने की अनुमति देता है, जबकि येन नहीं करता है, http://11011110.livejournal.com/342826.html देखें। – Valentas