एक पेड़ में जड़ से पत्ती तक का सबसे लंबा रास्ता खोजें


15

मेरे पास एक पेड़ है (ग्राफ सिद्धांत अर्थ में), जैसे कि निम्न उदाहरण:

यहाँ छवि विवरण दर्ज करें

यह एक निर्देशित पेड़ है जिसमें एक शुरुआती नोड (जड़) और कई अंत नोड्स (पत्तियां) हैं। प्रत्येक किनारे को एक लंबाई सौंपी गई है।

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


जवाबों:


16

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

निम्नलिखित पुनरावर्ती एल्गोरिथ्म के साथ शुरू करें LongestPath(root)जो आप चाहते हैं वह देगा। अनिवार्य रूप से, यह प्रत्येक उपप्रकार के लिए सबसे लंबे पथ की पुनरावृत्ति करता है। प्रत्येक नोड पर इसके लिए नए रास्तों के निर्माण और सबसे लंबे समय तक लौटने की आवश्यकता होती है।

 LongestPath(node)
   If node is a leaf, return (node,0) 
   If node is not a leaf:  
    For each edge (node,length,next):
       Let (p,l) = LongestPath(next)
       Let (path,len) = (p++[next], l + length)
    Return element (path,len) from previous step with largest value len

यह एक संयोजन है अगर कुछ हास्केल संकेतन के साथ छद्म कोड, तो मुझे आशा है कि यह समझ में आता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.