2011-10-17 3 views
6

में मनमाने ढंग से नोड से शुरू होने वाली एक सामान्य पेड़ संरचना का पता लगाने के लिए मुझे गहराई के पहले और ब्रेडथ-प्रथम ट्रैवर्सल ऑर्डर में मनमानी पेड़ों के लिए पेड़ ट्रैवर्सल एल्गोरिदम की आवश्यकता है। मुश्किल हिस्सा यह है कि मुझे मनमाने ढंग से नोड से शुरू करने में सक्षम होना चाहिए और एक और विशिष्ट नोड को पार करने तक जारी रखें।सी #

अब, मैं किसी भी सामान्य एल्गोरिदम का उपयोग कर सकता हूं और ट्रैवर्स किए गए नोड्स को अनदेखा कर सकता हूं जब तक कि मैं प्रारंभ नोड को दबाता हूं और अंत नोड तक जारी रहता हूं (जो मैं वर्तमान में करता हूं) लेकिन यह बदसूरत और अक्षम है।

कोई सुझाव, कृपया।

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

+1

आप बिना पेड़ के पेड़ में प्रारंभ नोड कैसे पाएंगे? – BrokenGlass

+0

क्या आपके पास पहले से ही * नोड है? अन्यथा, आपको प्रारंभ/अंत नोड्स को खोजने में तेजी लाने के लिए एक दूसरा डेटास्ट्रक्चर की आवश्यकता होगी। – harold

+0

कृपया निर्दिष्ट करें कि आपका पेड़ कैसे संरचित है। क्या कोई सॉर्ट ऑर्डर लागू किया गया है? नोड्स कैसे संबंधित हैं? –

उत्तर

2

मुझे लगता है कि आप जो कर रहे हैं वह करने का सबसे प्रभावी तरीका है। विशेष रूप से यदि आप मनमानी पेड़ों के साथ काम कर रहे हैं।

आपको एक मनमाना पेड़ दिया जाता है और आपको ट्रैवर्सल शुरू करने के लिए नोड को खोजने की आवश्यकता होती है। चूंकि कोई पदानुक्रम नहीं है (यानी: यह बाइनरी पेड़ नहीं है) आपको नोड्स को स्कैन करना होगा (यदि नोड नोड्स से अधिक स्कैनिंग समाप्त हो सकता है यदि दिया गया नोड एक पत्ता नोड है या यदि नोड पेड़ में नहीं है जब तक आप नोड को शुरू करने के लिए नहीं पाते हैं तब तक पूरे पेड़ को खोजना होगा)। एक बार आपको नोड मिल जाए, तो आप अपना डीएफ ट्रैवर्सल या बीएफ ट्रैवर्सल शुरू कर सकते हैं।

मुझे कोई अनुकूलन नहीं दिख रहा है जो आप कर सकते हैं।

0

बजाय

Traverse(RootNode, StartNode, EndNode) 

पास नहीं है के अनुसार क्रमबद्ध किया जाता है जड़

Traverse(StartNode, EndNode) 

हालांकि के रूप में शुरू नोड, यदि आप नोड्स अपने प्रारंभ नोड के बच्चे नहीं लौटना चाहते, तो आप अपने वर्तमान पद्धति का उपयोग जारी रखना होगा।

0

यदि आपको बहुत से असंबद्ध प्रश्नों का उत्तर देना होगा, और आपको पथ प्रदान करने की आवश्यकता है (केवल यह कहने की बजाय कि कोई मौजूद है या नहीं) तो आप अब AFAIK के मुकाबले बेहतर नहीं कर सकते हैं।

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