एवीएल पेड़ और वास्तविक दुनिया


14

स्कूल में हमें सिखाया जाता है कि हम एक सम्मिलन या हटाने पर एवीएल पेड़ को कैसे संतुलित कर सकते हैं।

इस प्रकार का ज्ञान वास्तव में वास्तविक दुनिया में उपयोगी कैसे होगा? क्या कोई इस पर उदाहरण दे सकता है कि इस प्रकार का ज्ञान वास्तव में उपयोगी होगा?

मैंने जो देखा है, कार्यस्थल में ऐसे विवरण शायद ही कभी सामने आए ...

मैं देख सकता हूं कि एल्गोरिदम और कुछ डेटा संरचनाओं के बारे में विस्तृत ज्ञान कितना महत्वपूर्ण हो सकता है, लेकिन एवीएल ट्री रोटेशन (और इसी तरह की विस्तृत अवधारणाएं) जैसे विवरण नहीं।

धन्यवाद!


7
यह साक्षात्कार में मददगार है, यदि वह वास्तविक दुनिया के रूप में गिना जाता है।
केविन

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

जवाबों:


13

एवीएल पेड़ों का अध्ययन निम्नलिखित कारणों से मददगार हो सकता है:

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

  • यह विधेय और अनुबंधों को समझने के लिए बहुत अच्छा अभ्यास है। यह सुनिश्चित करना कि एक पेड़ संतुलित है, और आपके द्वारा उपयोग किए गए उपकरण प्रत्येक ऑपरेशन को संरक्षित संतुलन साबित करने के लिए उपयोग कर सकते हैं, जैसे, सुरक्षा चिंताओं और समानांतर कोड के लिए लागू किया जा सकता है।

  • यह आपको अपने स्वयं के वेरिएंट लिखने, या यहां तक ​​कि पूरी तरह से नए डेटा संरचनाओं को बनाने का अधिकार देता है।

  • आपको बस एक नए पुस्तकालय या मंच के लिए एवीएल पेड़ को लागू करना पड़ सकता है।

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

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


दिलचस्प लेख, लेकिन मैं यह नहीं देखता कि एवीएल पेड़ों ने कैसे दोस्त को मदद की होगी।
इराटोस्थनीज

मुझे एक उदाहरण देखना पसंद होगा, जैसे B + -Trees का उपयोग डेटाबेस अनुक्रमण के लिए किया जाता है।
लुका फुलबियर

5

Macneils अंक के अलावा ...

लाल-काले पेड़ शायद अधिक सीधे उपयोगी होते हैं क्योंकि उपयोगी कुशल संचालन होते हैं जो मानक पुस्तकालय कार्यान्वयन में व्यापक रूप से समर्थित नहीं होते हैं जैसे कि C ++ std::map(कम से कम AFAIK)। लाल-काले पेड़ "विभाजित" का समर्थन कर सकते हैं (एक पेड़ को दो में काटकर, एक जिसमें चाबी की तुलना में कम कुंजियाँ होती हैं, और एक जिसमें चाबी अधिक होती है) और "जुड़ते हैं" (उल्टे, छोटे पेड़ के साथ बड़ी चाबियों के पेड़ को मिलाकर चाबियाँ) दोनों हे (लॉग एन) समय में की जा सकती हैं, लेकिन अगर ये मानक कंटेनर पुस्तकालयों में समर्थित हैं, तो यह एक अच्छी तरह से छिपी हुई बात लगती है।

हालांकि, "वृद्धि" डेटा संरचनाएं आम हैं। एक सरल उदाहरण ओ (लॉग एन) सबस्क्रिप्टिंग का समर्थन करने के लिए लगभग किसी भी पेड़ डेटा संरचना में नोड्स में आकार-से-सबट्री जानकारी जोड़ रहा है। अधिक परिष्कृत उदाहरणों में अंतराल के पेड़ शामिल हैं।

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

बेशक एक संवर्धित डेटा संरचना विकसित करने के लिए, आपको अंतर्निहित गैर-संवर्धित डेटा संरचना को समझने की आवश्यकता है।

AVL के पेड़ लाल-काले पेड़ों की तुलना में तेज़ हो सकते हैं यदि आप आवेषण / विलोपों की तुलना में बहुत अधिक खोज करते हैं (और बशर्ते आपको उन विभाजन / संचालन में शामिल होने की आवश्यकता नहीं है), इसलिए अनुप्रयोग के आधार पर, वे इसके लिए एक बहुत अच्छा आधार हो सकते हैं बढ़ाने।


1
डेटा संरचना को बढ़ाने के लिए +1, हालांकि यह करना काफी दुर्लभ है। अधिकांश प्रोग्रामर को प्रदर्शन के लिए प्रयास करने की आवश्यकता नहीं है (अन्यथा हम सभी C ++ / C / Fortran / विधानसभा का उपयोग करेंगे)।
Matthieu M.

@ मैथ्यू - मेरा मानना ​​है कि यह आम है, लेकिन केवल कुछ प्रकार के विकास के वातावरण में। यही कारण है कि एक विरोधाभास, ईमानदार, क्योंकि ... errm, ठीक है ... नहीं है
Steve314

में पूरी तरह से सहमत हूँ! : डी
मैथ्यू एम।

5

नहीं

यह वास्तव में वास्तविक दुनिया में उपयोगी नहीं है ...

सिवाय आपको सोचने के

असली दुनिया है और अधिक कठिन समस्याओं , जिनमें से कई नहीं है पहले से ही अच्छी तरह से ज्ञात समाधान है।

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