द्वारा "बिडरेक्शनल डिजस्ट्रा" बिडरेक्शनल सर्च (this पर) का उपयोग करके मैंने सबसे कम पथों के लिए डिजस्ट्रा के एल्गोरिदम के नेटवर्कएक्स कार्यान्वयन को पढ़ा है। इस विधि का समापन बिंदु क्या है?नेटवर्कएक्स
उत्तर
मैं नेटवर्कक्स के कार्यान्वयन पर इसका आधार लगाने जा रहा हूं।
बिडरेक्शनल डिजस्ट्रा बंद हो जाता है जब यह दोनों दिशाओं में एक ही नोड से मुकाबला करता है - लेकिन उस बिंदु पर वह जिस पथ पर लौटता है वह उस नोड के माध्यम से नहीं हो सकता है। यह सबसे कम पथ के लिए सर्वश्रेष्ठ उम्मीदवार को ट्रैक करने के लिए अतिरिक्त गणना कर रहा है।
मैं (this answer पर) अपनी टिप्पणी पर मेरी व्याख्या के आधार के लिए जा रहा हूँ
इस सरल ग्राफ पर विचार करें (नोड एक साथ, बी, सी, डी, ई)। इस ग्राफ के किनारों और उनके वजन हैं: "ए-> बी: 1", "ए-> सी: 6", "ए-> डी: 4", "ए-> ई: 10", "डी-> सी: 3 "," सी> ई: 1 "। जब मैं दोनों तरफ इस ग्राफ के लिए डिजस्ट्रा एल्गोरिदम का उपयोग करता हूं: आगे में यह ए के बाद बी और फिर डी को पाता है, पिछड़े में यह ई के बाद सी और फिर डी को पाता है। इस बिंदु में, दोनों सेटों में समान वर्टेक्स और एक चौराहे होती है। क्या यह समाप्ति बिंदु है या यह जारी रखा जाना चाहिए? क्योंकि यह उत्तर (ए-> डी-> सी-> ई) गलत है।
जब मैं counterexample को (अनिर्दिष्ट) नेटवर्क पर networkx के द्विदिश डिज्कस्ट्रा चलाने आप टिप्पणी है कि दावा किया:
"A->B:1","A->C:6","A->D:4","A->E:10","D->C:3","C->E:1"
:
संदर्भ के लिए, ग्राफ है यह मुझे देता है: (7, ['A', 'C', 'E'])
, नहीं A-D-C-E
।
समस्या यह है कि यह से पहले की समस्या के गलतफहमी में है, यह बंद हो जाता है। नोड्स खोजने के मामले में यह वही है जो आप उम्मीद कर रहे हैं, लेकिन यह कर रहे हैं कि सबसे कम पथ खोजने के लिए अतिरिक्त प्रसंस्करण हो रहा है। जब तक यह दोनों दिशाओं से D
तक पहुंचता है, तब तक यह कुछ अन्य "उम्मीदवार" पथ एकत्र कर चुका है जो कम हो सकते हैं। इसकी कोई गारंटी नहीं है कि सिर्फ इसलिए कि नोड D
दोनों दिशाओं से प्राप्त होता है जो सबसे कम पथ का हिस्सा बनता है। इसके बजाय, इस बिंदु पर कि दोनों दिशाओं से एक नोड तक पहुंच गया है, वर्तमान उम्मीदवार सबसे छोटा रास्ता किसी भी उम्मीदवार पथ से छोटा है जो इसे जारी रखेगा।
एल्गोरिथ्म, दो खाली समूहों के साथ शुरू होता प्रत्येक A
या E
{} {}
के साथ जुड़े हैं और यह प्रत्येक के आसपास "समूहों" का निर्माण होगा। यह पहली बार A
{A:0} {}
के साथ जुड़े क्लस्टर में A
डालता है अब यह जाँच करता है, तो A
क्लस्टर के आसपास E
में पहले से ही है (जो वर्तमान में खाली है)। यह नहीं। इसके बाद, यह A
के प्रत्येक पड़ोसी को देखता है और जांच करता है कि क्या वे E
के आसपास क्लस्टर में हैं। वो नहीं हैं। इसके बाद A
से पथदर्शी द्वारा आदेशित A
के आने वाले पड़ोसियों के उन पड़ोसियों को एक ढेर में (एक आदेशित सूची की तरह) रखा जाता है। इस A
clusters ..... fringes
{A:0} {} ..... A:[(B,1), (D,4), (C,6), (E,10)]
E:[]
अब यह जाँच करता है E
की 'हाशिये' कहते हैं। E
के लिए यह सममित चीज है। अपने क्लस्टर में E
रखें। जांचें कि E
क्लस्टर में A
के आसपास नहीं है।फिर A
(वे नहीं हैं) के क्लस्टर में कोई भी देखने के लिए अपने सभी पड़ोसियों की जांच करें। फिर E
की फ्रिंज बनाता है।
clusters fringes
{A:0} {E:0} ..... A:[(B,1), (D,4), (C,6), (E,10)]
E:[(C,1), (A,10)]
अब यह A
पर वापस चला जाता है। सूची में B
लगता है और इसे A
के आसपास क्लस्टर में जोड़ता है। यह जांचता है कि B
का कोई पड़ोसी क्लस्टर में E
(विचार करने के लिए कोई पड़ोसी नहीं है)। तो हमने:
clusters fringes
{A:0, B:1} {E:0} ..... A:[(D,4), (C,6), (E,10)]
E:[(C,1), (A,10)]
वापस E
लिए: हम E
की वह मुन्ना C
जोड़ने क्लस्टर और जाँच करें कि क्या C
के किसी भी पड़ोसी A
के क्लस्टर में है। आप क्या जानते हैं, A
है। तो हमारे पास उम्मीदवार दूरी 7 के साथ सबसे कम पथ ए-सी-ई है। हम उस पर ध्यान देंगे। हम E
(दूरी 4 के साथ, 1 + 3 के बाद) में जोड़ने के लिए D
जोड़ते हैं। हम:
clusters fringes
{A:0, B:1} {E:0, C:1} ..... A:[(D,4), (C,6), (E,10)]
E:[(D,4), (A,10)]
candidate path: A-C-E, length 7
वापस A
लिए: हम अपने हाशिये, D
से अगली बात मिलता है। हम इसे क्लस्टर में A
के बारे में जोड़ते हैं, और ध्यान दें कि उसके पड़ोसी C
क्लस्टर में E
है। तो हमारे पास एक नया उम्मीदवार पथ है, A-D-C-E
, लेकिन इसकी लंबाई 7 से अधिक है इसलिए हम इसे छोड़ दें।
clusters fringes
{A:0, B:1, D:4} {E:0, C:1} ..... A:[(C,6), (E,10)]
E:[(D,4), (A,10)]
candidate path: A-C-E, length 7
अब हम E
पर वापस जाएं। हम D
पर देखते हैं। यह क्लस्टर में A
के आसपास है। हम यह सुनिश्चित कर सकते हैं कि हमारे पास आने वाले भविष्य के किसी भी उम्मीदवार के पास कम से कम A-D-C-E
पथ जितना बड़ा होगा, हमने अभी पता लगाया है (यह दावा जरूरी नहीं है, लेकिन यह इस दृष्टिकोण की कुंजी है)। तो हम रुक सकते हैं। हम पहले मिले उम्मीदवार पथ वापस करते हैं।
- 1. नेटवर्कएक्स
- 2. नेटवर्कएक्स
- 3. नेटवर्कएक्स ग्राफ़
- 4. पिलैब/नेटवर्कएक्स;
- 5. पाइथन के नेटवर्कएक्स मॉड्यूल
- 6. नेटवर्कएक्स और मैटलप्लिब
- 7. नेटवर्कएक्स ग्राफ ऑब्जेक्ट
- 8. नोड आकार नेटवर्कएक्स
- 9. डेटाफ्रेम से नेटवर्कएक्स
- 10. नेटवर्कएक्स नोड विशेषता चित्र
- 11. पायथन लाइब्रेरी पैकेज या नेटवर्कएक्स इंटरैक्टिव विज़ुअलाइजेशन
- 12. सोशल नेटवर्क विश्लेषण क्वेरी के लिए नेटवर्कएक्स
- 13. नेटवर्कएक्स ग्राफ को छंटनी के लिए कार्य?
- 14. नेटवर्कएक्स के साथ क्या स्केलेबिलिटी समस्याएं जुड़ी हैं?
- 15. नेटवर्कएक्स का उपयोग कर सिम्रैंक की गणना करना?
- 16. मैं नेटवर्कएक्स ग्राफ का विशाल घटक कैसे प्राप्त करूं?
- 17. नेटवर्कएक्स ग्राफ में कुछ पथ कैसे प्रतिबंधित करें?
- 18. त्रुटि "'dict' ऑब्जेक्ट' में कोई विशेषता नहीं है 'iteritems'" नेटवर्कएक्स के write_shp()
- 19. नेटवर्कएक्स का उपयोग करके भारित ग्राफ में सबसे कम पथ कैसे खोजें?
- 20. भारित किनारों को नेटवर्कएक्स में पेजरैंक को कैसे प्रभावित किया जाता है?
- 21. क्या नेटवर्कएक्स से पदानुक्रमित आउटपुट की गारंटी देने का कोई तरीका है?
- 22. पायथन नेटवर्कएक्स - विशेषता विकल्पों की संख्या के आधार पर स्वचालित रूप से नोड रंग सेट करें
- 23. नेटवर्कएक्स एज लेबल्स ऑफ़सेट कैसे सेट करें? (लेबल ओवरलैप से बचने के लिए)
- 24. नेटवर्कएक्स में नोड को स्थानांतरित/नाम बदलने का सबसे प्रभावी तरीका क्या है?
- 25. नेटवर्कएक्स और पायग्राफविज़ को अकेले ठीक काम करने का कारण क्या हो सकता है लेकिन एक साथ नहीं?
- 26. पाइथन
- 27. पायथन: ग्राफ़ में 2 नोड्स के बीच कोई पथ मौजूद है या नहीं?
- 28. स्केल
- 29. नोड नाम
- 30. नेटवर्कक्स/matplotlib ग्राफ ड्राइंग के गुणों को कैसे बदलें?
कोड में इसकी एक टिप्पणी में यह कहता है: '# अगर हमने दोनों दिशाओं में स्कैन किया है तो हम कर चुके हैं # हमने अब सबसे छोटा रास्ता खोज लिया है।' लेकिन हमारे पास [इस पोस्ट] पर एक counterexample है (http://cs.stackexchange.com/questions/53943/is-the-bidirectional-dijkstra-algorithm-optimal) – moksef
इसके लायक होने के लिए - उदाहरण में आप नेटवर्कएक्स देते हैं सही रास्ता देता है। – Joel
@ जोएल आपके सटीक उत्तर के लिए धन्यवाद। क्या आप कृपया अधिक जानकारी दे सकते हैं, जैसे आपका परीक्षण कार्यक्रम या इसका पता लगाना। – moksef