क्या नेटवर्क में सबसे लंबा सबसे छोटा रास्ता खोजने के लिए एक इष्टतम एल्गोरिदम है?


13

मेरे पास रैखिक नेटवर्क का एक बड़ा सेट है और मैं प्रत्येक नेटवर्क के दो छोरों को खोजना चाहूंगा जो नेटवर्क के साथ एक दूसरे से सबसे दूर हैं (नीचे की छवि पर, यह डी से के होगा)। इस समस्या का ब्रूट फोर्स सॉल्यूशन प्रत्येक जोड़ी मूल के लिए नेटवर्क के साथ सबसे छोटे पथ की गणना करने के लिए है, लेकिन मेरे पास सैकड़ों नेटवर्क हैं जिसमें हजारों छोर हैं, इसलिए प्रत्येक संभावित पथ की गणना करना काफी भारी है।

ब्रूट बल का उपयोग किए बिना यह गणना करने का एक इष्टतम तरीका है? क्या मैं कुछ चतुर नियमों के आधार पर कुछ बिंदुओं को बाहर कर सकता हूं?

कुशलतापूर्वक लाल मार्ग कैसे खोजें?

संपादित करें: मैंने अपने प्रश्न को स्पष्ट करने के लिए @Alex Tereshenkov द्वारा वर्णित सबसे लंबे पथ का एक चित्रण जोड़ा है। काला रास्ता सबसे लंबे पथ एल्गोरिथम का परिणाम है (किसी भी कोने को दोहराए बिना सबसे लंबा पथ)। मेरे मामले में, कल्पना करें कि आप किसी भी पत्र से नेटवर्क में प्रवेश करते हैं और आपको किसी अन्य पत्र को जितनी जल्दी हो सके ड्राइव करने की आवश्यकता है। किन दो पत्रों में शामिल होना सबसे मुश्किल है? यहाँ छवि विवरण दर्ज करें


पागल पेंट Skillz!
एडम

जवाबों:


6

मुझे लगता है कि आप अपने नेटवर्क के ग्राफ व्यास की तलाश में हो सकते हैं । स्टैकएक्सचेंज पर कुछ सवाल हैं जो इस विषय का उल्लेख करते हैं, उदाहरण के लिए:

अधिकांश एल्गोरिदम सबसे पहले "सभी जोड़े सबसे छोटे रास्तों" की गणना करने और उनमें से सबसे लंबे समय तक चयन करने का सुझाव देते हैं, लेकिन मैंने कौशिक नारायणन द्वारा एक ब्लॉग पोस्ट पाया, जो एक वैकल्पिक दृष्टिकोण का सुझाव देता है जो अधिक इष्टतम हो सकता है (मैंने जांच नहीं की), जो प्रत्येक शीर्ष पर पुनरावृत्ति करता है और अपनी सबसे दूर की जोड़ी पाता है:

हम एक शीर्ष V1 से पथ की गणना कर सकते हैं जैसे कि यह V1 और एक शीर्ष के बीच का सबसे छोटा मार्ग है और किसी भी अन्य शीर्ष के बीच के सबसे छोटे पथ से अधिक लंबा है। एक एल्गोरिथ्म के लिए इस पोस्ट को देखें । फिर, हम प्रत्येक शीर्ष के माध्यम से पुनरावृत्ति कर सकते हैं और प्रत्येक शीर्ष के साथ सबसे लंबे पथ को मूल के रूप में पा सकते हैं। एक बार जब हमारे पास सभी सबसे लंबे समय तक सबसे छोटे मार्ग की सूची है, तो हम उस अधिकतम मूल्य का पता लगा सकते हैं और उसे वापस कर सकते हैं।


धन्यवाद, ग्राफ व्यास वास्तव में मैं क्या देख रहा था, और मेरे मामले में छद्म व्याकरणिक कार्य करता है। मैंने अभी वहाँ नए शब्द सीखे हैं!
राडोक्सजू

7

विकिपीडिया पृष्ठ सबसे लंबे पथ की समस्या के अनुसार , यह समस्या

... एनपी-हार्ड है, जिसका अर्थ है कि यह बहुपत्नी समय के लिए मनमाने रेखांकन के लिए हल नहीं किया जा सकता है जब तक कि पी = एनपी। मजबूत कठोरता परिणाम यह भी दिखाते हैं कि यह अनुमानित करना मुश्किल है। हालांकि, इसके पास निर्देशित चक्रीय ग्राफ के लिए एक रेखीय समय समाधान है , जिसमें समय-निर्धारण समस्याओं में महत्वपूर्ण मार्ग खोजने के लिए महत्वपूर्ण अनुप्रयोग हैं।

यदि आप साथ काम करते हैं (या डीएजी के रूप में अपने ग्राफ का प्रतिनिधित्व कर सकते हैं ), तो networkxपायथन पैकेज आपको इसकी गणना करने देगा। फ़ंक्शन के लिए देखें dag_longest_path

जब तक मैं कुछ याद नहीं कर रहा हूं, आपको ग्राफ़ नोड्स के बीच की लंबाई की गणना करने और उन्हें सॉर्ट करने की आवश्यकता होगी जो दुर्भाग्य से, केवल रैखिक समय में काम करते हैं , इसके लिए कोई कुशल एल्गोरिदम नहीं है ।


सूचना के कारण पहले से ही उत्तर के लिए thnks, + 1। हालाँकि, मैं नेटवर्क में सबसे लंबे समय तक पैठ की तलाश में हूं (मेरे उदाहरण में, B या H की ओर कोई चक्कर नहीं)। इसलिए आपका समाधान वास्तव में वही नहीं है जो मैं देख रहा हूं, भले ही यह संकेत देता हो कि "जानवर बल" शायद एकमात्र समाधान है।
राडोक्सु

@ भारूक्सजू, आह मैं देख रहा हूं। ठीक है, चलो देखते हैं कि क्या जीन इस पर ध्यान देंगे, उनके पास रेखांकन के साथ बहुत अनुभव है, शायद उनके पास कुछ उज्ज्वल विचार हैं।
एलेक्स टेरेशेनकोव
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.