पूर्णांकों की एक धारा से एक संतुलित द्विआधारी खोज वृक्ष बनाएं

वोट
10

मैं सिर्फ एक नौकरी के साक्षात्कार समाप्त कर दिया है और मैं इस सवाल है, जो एक 15 मिनट के साक्षात्कार पर देने के लिए एक बहुत ही मुश्किल सवाल के रूप में मुझे लगता है के साथ संघर्ष कर रहा था।

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

मेरा पहला जवाब एक लाल काला पेड़ है, जो निश्चित रूप से काम करता है का उपयोग किया गया है, लेकिन मैं ग्रहण करने के लिए वे मेरे 15 मिनट में एक लाल, काले पेड़ को लागू करने की उम्मीद नहीं थी की है।

तो, इस समस्या मैं के बारे में पता नहीं कर रहा हूँ के लिए किसी भी सरल उपाय है?

धन्यवाद,

डेव

29/08/2011 को 22:25
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
3

ए.ए. पेड़ थोड़ा लाल काले पेड़ों से सरल हैं, लेकिन मैं अपने सिर के ऊपर से एक को लागू नहीं कर सका।

29/08/2011 को 22:28
का स्रोत उपयोगकर्ता

वोट
9

मैं व्यक्तिगत रूप से लगता है कि यह करने के लिए सबसे अच्छा तरीका है एक तरह एक यादृच्छिक द्विआधारी खोज वृक्ष के लिए जाने के लिए किया जाएगा treap । यह पूरी तरह से गारंटी नहीं देता कि पेड़ संतुलित हो जाएगा, लेकिन उच्च संभावना के साथ पेड़ एक अच्छा संतुलन कारक होगा। एक treap एक समान रूप से यादृच्छिक संख्या के साथ पेड़ के प्रत्येक तत्व बढ़ाने, तो सुनिश्चित करना है कि पेड़ चाबियाँ करने के लिए सम्मान और वर्दी यादृच्छिक मान के संबंध में एक ढेर के साथ एक द्विआधारी खोज वृक्ष है काम करता है। एक treap में निवेशन बहुत आसान है:

  1. नव जोड़ा तत्व को आवंटित करने के लिए एक यादृच्छिक संख्या चुनें।
  2. BST मानक BST प्रविष्टि का उपयोग में तत्व सम्मिलित करें।
  3. जबकि नव डाला तत्व के प्रमुख अपनी मूल के प्रमुख से अधिक है, इसके जनक ऊपर नए तत्व लाने के लिए एक पेड़ के रोटेशन प्रदर्शन करते हैं।

यही कारण है कि अंतिम चरण केवल वास्तव में कड़ी मेहनत से एक है, लेकिन आप एक व्हाइटबोर्ड मैं यकीन है कि एक साक्षात्कार में ऑन-द-मक्खी आप यह लागू हो सकता है कि कर रहा हूँ पर इस पर काम करने के लिए कुछ समय था।

एक अन्य विकल्प है कि काम हो सकता है एक का उपयोग किया जाएगा टेढ़ा पेड़ । यह तेजी से BST कि यह सोचते हैं आप एक मानक BST डालने समारोह और पेड़ रोटेशन करने की क्षमता लागू किया जा सकता का एक और प्रकार है। महत्वपूर्ण रूप से, टेढ़ा पेड़ हैं अत्यंत व्यवहार में तेजी से, और यह (एक निरंतर कारक के भीतर करने के लिए) में जाना जाता है वे कर रहे हैं कि कम से कम के रूप में किसी अन्य स्थिर द्विआधारी खोज वृक्ष के रूप में अच्छा।

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

उम्मीद है की यह मदद करेगा!

29/08/2011 को 22:33
का स्रोत उपयोगकर्ता

वोट
1

सबसे सरल संतुलित द्विआधारी खोज वृक्ष में से एक बी बी (α) पेड़ है। आप निरंतर α, जो कितना असंतुलित पेड़ प्राप्त कर सकते हैं का कहना है कि लेने। सभी समय में, #descendants(child) <= (1-α) × #descendants(node)पकड़ चाहिए। आप सामान्य द्विआधारी खोज वृक्ष के रूप में यह इलाज है, लेकिन जब सूत्र अब और कुछ नोड पर लागू नहीं होता, तो आप सिर्फ पेड़ का वह हिस्सा खरोंच से, पुनर्निर्माण इतना है कि यह पूरी तरह से संतुलित है।

प्रविष्टि या हटाने के लिए परिशोधित समय जटिलता अभी भी हे, बस अन्य संतुलित द्विआधारी पेड़ के साथ के रूप में है (लॉग एन)।

29/08/2011 को 22:49
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more