2012-04-25 5 views
7

अगर 2 चेक पेड़ नोड्स से संबंधित हैं (यानी पूर्वज-वंशज) के साथअगर 2 चेक पेड़ नोड्स हे में (पूर्वज/वंशज) से संबंधित हैं (1) पूर्व प्रसंस्करण

  • हे में इसे हल (1) समय के साथ हे (एन) अंतरिक्ष (N = नोड्स के #)
  • पूर्व प्रसंस्करण की अनुमति दी है

यह है कि। मैं नीचे अपने समाधान (दृष्टिकोण) जा रहा हूँ। अगर आप खुद को पहले सोचना चाहते हैं तो कृपया रोकें।


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

मुझे विवरण में लेबल समझाएं। प्रत्येक लेबल में अल्पविराम से अलग प्राकृतिक संख्याएं शामिल होंगी जैसे "1,2,1,4,5" - इस अनुक्रम की लंबाई (नोड + 1 की गहराई) के बराबर होती है। जैसे रूट का लेबल "1" है, रूट के बच्चों के लेबल "1,1", "1,2", "1,3" आदि होंगे .. अगला-स्तरीय नोड्स में "1,1,1" लेबल होंगे , "1,1,2", ..., "1,2,1", "1,2,2", ...

मान लें कि "ऑर्डर संख्या" नोड का है "इस नोड की 1-आधारित इंडेक्स" अपने माता-पिता की बच्चों की सूची में।

सामान्य नियम: नोड के लेबल में इसके माता-पिता के लेबल होते हैं और इसके बाद कॉम और "ऑर्डर संख्या" नोड का होता है।

इस प्रकार, जवाब देने के लिए दो नोड्स हे (1) में संबंधित हैं अगर (अर्थात पूर्वज-वंशज), मैं जाँच करेंगे, तो उनमें से एक का लेबल "एक उपसर्ग" के अन्य लेबल की है। हालांकि मुझे यकीन नहीं है कि ऐसे लेबलों को ओ (एन) अंतरिक्ष पर कब्जा करने के लिए माना जा सकता है।

फिक्सेस या वैकल्पिक दृष्टिकोण वाले किसी भी आलोचकों की अपेक्षा की जाती है।

+1

ओएस (एन^2) अंतरिक्ष सबसे बुरी स्थिति परिदृश्य में है जिसमें प्रत्येक नोड में एक बच्चा (नूडल) होता है। – WeaselFox

उत्तर

11

आप हे (एन) preprocessing समय में कर सकते हैं, और हे (एन) अंतरिक्ष, हे (1) क्वेरी समय के साथ, अगर आप प्रत्येक शिखर के लिए अग्रिम आदेश संख्या और क्रंमोत्तर संग्रहीत और इस तथ्य का उपयोग करें:

यदि और केवल अगर एक्स टी का अग्रिम आदेश ट्रावर्सल में और बाद के क्रम ट्रेवर्सल में y के बाद y से पहले होता है

के लिए दिए गए दो नोड्स एक्स और एक पेड़ टी के y, x y के एक पूर्वज है।

(इस पेज से: http://www.cs.arizona.edu/xiss/numbering.htm)

आप सबसे खराब स्थिति में क्या किया था थीटा (घ) वह जगह है जहाँ घ उच्च नोड की गहराई है, और इसलिए हे नहीं है (1)। अंतरिक्ष ओ (एन) भी नहीं है।

+0

तब नूडल परिदृश्य के बारे में क्या? पूर्ववर्ती और पोस्टऑर्डर बिल्कुल वही होगा, इसलिए कोई नोड किसी अन्य का पूर्वज नहीं है? – WeaselFox

+0

@WeaselFox: आप एक लिंक्ड सूची की तरह मतलब है? क्या ट्रेवर्सल एक दूसरे के उलट नहीं होंगे? –

+0

आप बिल्कुल सही हैं .. मेरा बुरा – WeaselFox

0

रैखिक समय सबसे कम आम पूर्वज एल्गोरिदम (कम से कम ऑफ़लाइन) हैं। उदाहरण के लिए here देखें। आप tarjan's offline LCA algorithm पर भी एक नज़र डाल सकते हैं। कृपया ध्यान दें कि इन लेखों की आवश्यकता है कि आप उन जोड़े को जानते हैं जिनके लिए आप अग्रिम में एलसीए कर रहे होंगे। मुझे लगता है कि ऑनलाइन रैखिक समय प्रीकंप्यूशन समय एल्गोरिदम भी हैं लेकिन वे बहुत जटिल हैं। उदाहरण के लिए न्यूनतम क्वेरी समस्या श्रेणी के लिए एक रैखिक प्रीकंप्यूशन समय एल्गोरिदम है। जहां तक ​​मुझे याद है कि यह समाधान दो बार एलसीए समस्या से गुजर चुका है।एल्गोरिदम के साथ समस्या यह है कि इसमें इतनी बड़ी स्थिरता थी कि इसे वास्तव में तेज होने के लिए भारी इनपुट की आवश्यकता होती है, फिर ओ (एन * लॉग (एन)) एल्गोरिदम।

वहां बहुत आसान तरीका है जिसके लिए ओ (एन * लॉग (एन)) अतिरिक्त मेमोरी की आवश्यकता होती है और फिर निरंतर समय में जवाब मिलता है।

उम्मीद है कि इससे मदद मिलती है।

+1

एलसीए इसके लिए अधिक है। –

1

यदि आप एक पेड़ पर विचार करते हैं जहां पेड़ में नोड में एन/2 बच्चे हैं (कहें), लेबल सेट करने का चलने का समय ओ (एन * एन) जितना ऊंचा होगा। तो यह लेबलिंग योजना काम नहीं करेगी ....

संबंधित मुद्दे