AVL और लाल काले पेड़ नोड्स में लाल और काले रंग को छोड़कर दोनों आत्म संतुलन हैं। एवीएल पेड़ों के बजाय लाल काले पेड़ों को चुनने का मुख्य कारण क्या है? लाल काले पेड़ों के आवेदन क्या हैं?
AVL और लाल काले पेड़ नोड्स में लाल और काले रंग को छोड़कर दोनों आत्म संतुलन हैं। एवीएल पेड़ों के बजाय लाल काले पेड़ों को चुनने का मुख्य कारण क्या है? लाल काले पेड़ों के आवेदन क्या हैं?
जवाबों:
एवीएल पेड़ों के बजाय लाल काले पेड़ों को चुनने का मुख्य कारण क्या है?
दोनों लाल-काले पेड़ों और AVL पेड़ सबसे अधिक इस्तेमाल किया कर रहे हैं संतुलित द्विआधारी खोज के पेड़ और वे प्रविष्टि, हटाने और लुक-अप का समर्थन की गारंटी में O(logN) time
। हालांकि, दोनों के बीच तुलना के निम्नलिखित बिंदु हैं:
O(N)
अतिरिक्त स्थान लेता है। हालांकि, अगर हमें पता है कि पेड़ में डाली जाने वाली चाबियां हमेशा शून्य से अधिक रहेंगी, तो हम लाल-काले पेड़ की रंग जानकारी संग्रहीत करने के लिए चाबियों के साइन बिट का उपयोग कर सकते हैं। इस प्रकार, ऐसे मामलों में लाल-काले पेड़ कोई अतिरिक्त स्थान नहीं लेते हैं।लाल काले पेड़ के आवेदन क्या हैं?
लाल-काले पेड़ अधिक सामान्य उद्देश्य हैं। वे ऐड, रिमूव और लुक-अप पर अपेक्षाकृत अच्छी तरह से काम करते हैं, लेकिन AVL के पेड़ धीमी गति से जोड़ने / हटाने की कीमत पर तेजी से दिखते हैं। लाल-काले पेड़ का उपयोग निम्नलिखित में किया जाता है:
java.util.TreeMap
,java.util.TreeSet
In general, the rotations for an AVL tree are harder to implement and debug than that for a Red-Black tree.
यह सच नहीं है।
std:: map
और मित्र किसी विशेष संरचना का उपयोग करें। इसे लागू करना बाकी है, हालांकि libstdc ++ और Dinkumware कम से कम लाल-काले पेड़ों का उपयोग करते हैं, और ऐसा लगता है कि आप व्यवहार में सही हैं।
इस लेख को पढ़ने का प्रयास करें
यह अंतर, समानता, प्रदर्शन आदि पर कुछ अच्छी अंतर्दृष्टि प्रदान करता है।
यहाँ लेख से एक उद्धरण है:
आरबी-पेड़, साथ ही एवीएल पेड़, आत्म-संतुलन हैं। वे दोनों ओ (लॉग एन) लुकअप और प्रविष्टि प्रदर्शन प्रदान करते हैं।
अंतर यह है कि आरबी-ट्रीज़ ओरे (1) रोटेशन प्रति इन्सर्ट ऑपरेशन की गारंटी देता है। यही वास्तव में वास्तविक कार्यान्वयन में प्रदर्शन की लागत है।
सरलीकृत, आरबी-पेड़ गतिशील नोड संरचनाओं के ओवरहेड के आसपास ले जाने के बिना वैचारिक रूप से 2-3 पेड़ होने से यह लाभ प्राप्त करते हैं। शारीरिक रूप से आरबी-पेड़ों को द्विआधारी पेड़ों के रूप में लागू किया जाता है, लाल / काले-झंडे 2-3 व्यवहार का अनुकरण करते हैं
जहां तक मेरी अपनी समझ है, एवीएल पेड़ और आरबी पेड़ प्रदर्शन के मामले में बहुत दूर नहीं हैं। एक आरबी पेड़ बस एक बी-पेड़ का एक प्रकार है और संतुलन को एवीएल पेड़ की तुलना में अलग तरीके से लागू किया जाता है।
प्रदर्शन में अंतरों के बारे में हमारी समझ में वर्षों में सुधार हुआ है और अब AVL के ऊपर लाल-काले पेड़ों का उपयोग करने का मुख्य कारण एक अच्छे AVL कार्यान्वयन तक पहुंच नहीं होना है क्योंकि वे शायद कम आम हैं क्योंकि वे CLRS में शामिल नहीं हैं।
दोनों पेड़ों को अब रैंक-संतुलित पेड़ों का रूप माना जाता है, लेकिन लाल-काले पेड़ वास्तविक दुनिया के परीक्षणों में लगभग 20% तक धीमा हैं । या जब अनुक्रमिक डेटा डाला जाता है तब भी 30-40% धीमा होता है ।
इसलिए जिन लोगों ने लाल-काले पेड़ों का अध्ययन किया है, लेकिन एवीएल पेड़ लाल-काले पेड़ों का चयन नहीं करते हैं। लाल-काले पेड़ों के लिए प्राथमिक उपयोग उनके लिए विकिपीडिया प्रविष्टि पर विस्तृत हैं ।
अन्य उत्तर यहां आरबी और एवीएल पेड़ों के पेशेवरों और विपक्षों को अच्छी तरह से जोड़ते हैं, लेकिन मुझे यह अंतर विशेष रूप से दिलचस्प लगा:
AVL पेड़ लगातार परिशोधन अद्यतन लागत का समर्थन नहीं करते हैं [लेकिन लाल-काले पेड़ करते हैं]
स्रोत: मेह्लहॉर्न एंड सैंडर्स (2008) (धारा 7.4)
तो, जबकि आरबी और एवीएल दोनों पेड़ ओ (लॉग (एन)) को देखने, सम्मिलित करने और हटाने के लिए सबसे खराब समय की गारंटी देते हैं, एक नोड डालने या हटाने के बाद एवीएल / आरबी संपत्ति को बहाल करना, ओ (1) एमॉर्ट समय के लिए किया जा सकता है लाल-काले पेड़।
प्रोग्रामर आमतौर पर गतिशील रूप से मेमोरी आवंटित करना पसंद नहीं करते हैं। एवल ट्री के साथ समस्या यह है कि "n" तत्वों के लिए आपको पेड़ की ऊंचाई को स्टोर करने के लिए कम से कम log2 (log2 (n)) ... (ऊँचाई-> log2 (n)) बिट्स की आवश्यकता होती है! इसलिए जब आप बहुत बड़ा डेटा संभाल रहे होते हैं तो आप यह सुनिश्चित नहीं कर सकते हैं कि प्रत्येक नोड पर ऊंचाई के भंडारण के लिए कितने बिट्स आवंटित करने हैं।
उदाहरण के लिए यदि आप ऊँचाई के भंडारण के लिए 4 बाइट्स इंट (32 बिट्स) का उपयोग करते हैं। अधिकतम ऊंचाई हो सकती है: 2 ^ 32 और इसलिए अधिकतम संख्या में तत्व आप पेड़ में स्टोर कर सकते हैं 2 ^ (2 ^ 32) - (बहुत बड़ा प्रतीत होता है, लेकिन डेटा के इस युग में कुछ भी बड़ा नहीं है मुझे लगता है)। और इसलिए यदि आप इस सीमा को गोली मारते हैं, तो आपको ऊंचाई को संग्रहीत करने के लिए गतिशील रूप से अधिक स्थान आवंटित करना होगा।
यह मेरे विश्वविद्यालय में एक प्रोफेसर द्वारा सुझाया गया उत्तर है जो मुझे उचित लगा! आशा है कि मैं समझ में आता हूँ।
संपादन: एवीएल के पेड़ रेड ब्लैक पेड़ों की तुलना में अधिक संतुलित हैं, लेकिन वे सम्मिलन और विलोपन के दौरान अधिक सड़ांध पैदा कर सकते हैं। इसलिए यदि आपके आवेदन में कई लगातार सम्मिलन और विलोपन शामिल हैं, तो लाल काले पेड़ों को प्राथमिकता दी जानी चाहिए। और अगर आवेषण और विलोपन कम लगातार होते हैं और खोज अधिक लगातार संचालन होती है, तो एवीएल पेड़ को रेड ब्लैक ट्री पर पसंद किया जाना चाहिए। - स्रोत GEEKSFORGEEKS.ORG
you need need atleast log2(log2(n))...(height->log2(n)) bits to store the height of [an AVL] tree
मुझे इसे लागू करने के लिए किसी AVL- ट्री में किसी भी नोड की ऊंचाई की आवश्यकता नहीं है। आप प्रत्येक नोड के लिए अतिरिक्त जानकारी का एक बिट nee ( I AM THE GREATEST (उच्चतम उप-वृक्ष के साथ भाई)); यह अधिक सुविधाजनक होने के साथ-साथ पारंपरिक रूप से दो अतिरिक्त बिट्स (बच्चा बाएं और दाएं के लिए अधिक है), जैसा कि AV & L द्वारा प्रस्तुत किया गया है
एवीएल पेड़ के पुनः संतुलन को नीचे की संपत्ति से मिलना चाहिए। (विकी संदर्भ - एवीएल ट्री )
एक एवीएल पेड़ में, किसी भी नोड के दो बच्चे की ऊंचाइयों को अलग-अलग एक से अलग किया जाता है; यदि किसी भी समय वे एक से अधिक भिन्न होते हैं, तो इस संपत्ति को बहाल करने के लिए पुनर्संतुलन किया जाता है।
तो इसका तात्पर्य है कि AVL पेड़ की समग्र ऊंचाई पागल नहीं हो सकती है अर्थात AVL पेड़ के साथ लुकअप बेहतर होने वाला है। और चूंकि अतिरिक्त संचालन (घुमाव) को ऊंचाई को पागल नहीं होने देने के लिए बनाया जाना है, इसलिए पेड़ संशोधन संचालन थोड़ा महंगा हो सकता है।