एवले के पेड़ के ऊपर लाल काला पेड़


108

AVL और लाल काले पेड़ नोड्स में लाल और काले रंग को छोड़कर दोनों आत्म संतुलन हैं। एवीएल पेड़ों के बजाय लाल काले पेड़ों को चुनने का मुख्य कारण क्या है? लाल काले पेड़ों के आवेदन क्या हैं?


2
डुप्लिकेट का संभावित डुप्लिकेट :: नक्शा लाल-काले पेड़ के रूप
लायर कोगन

1
एक तरफ के रूप में, रस्ट डेवलपर्स ने अपने मानक आदेशित नक्शे के लिए इन दोनों के बजाय बी-पेड़ का उपयोग करने का विकल्प चुना ।
टॉम एंडरसन

जवाबों:


123

एवीएल पेड़ों के बजाय लाल काले पेड़ों को चुनने का मुख्य कारण क्या है?

दोनों लाल-काले पेड़ों और AVL पेड़ सबसे अधिक इस्तेमाल किया कर रहे हैं संतुलित द्विआधारी खोज के पेड़ और वे प्रविष्टि, हटाने और लुक-अप का समर्थन की गारंटी में O(logN) time। हालांकि, दोनों के बीच तुलना के निम्नलिखित बिंदु हैं:

  • एवीएल पेड़ अधिक कठोर संतुलित हैं और इसलिए तेजी से लुक-अप प्रदान करते हैं। इस प्रकार एक सघन कार्य के लिए एवीएल वृक्ष का उपयोग करें।
  • गहन कार्यों को सम्मिलित करने के लिए, लाल-काले वृक्ष का उपयोग करें।
  • एवीएल पेड़ प्रत्येक नोड पर संतुलन कारक को संग्रहीत करते हैं। यह O(N)अतिरिक्त स्थान लेता है। हालांकि, अगर हमें पता है कि पेड़ में डाली जाने वाली चाबियां हमेशा शून्य से अधिक रहेंगी, तो हम लाल-काले पेड़ की रंग जानकारी संग्रहीत करने के लिए चाबियों के साइन बिट का उपयोग कर सकते हैं। इस प्रकार, ऐसे मामलों में लाल-काले पेड़ कोई अतिरिक्त स्थान नहीं लेते हैं।

लाल काले पेड़ के आवेदन क्या हैं?

लाल-काले पेड़ अधिक सामान्य उद्देश्य हैं। वे ऐड, रिमूव और लुक-अप पर अपेक्षाकृत अच्छी तरह से काम करते हैं, लेकिन AVL के पेड़ धीमी गति से जोड़ने / हटाने की कीमत पर तेजी से दिखते हैं। लाल-काले पेड़ का उपयोग निम्नलिखित में किया जाता है:

  • जावा: java.util.TreeMap,java.util.TreeSet
  • सी ++ एसटीएल (अधिकांश कार्यान्वयन में): नक्शा, मल्टीमैप, मल्टीसेट
  • लिनक्स कर्नेल: पूरी तरह से निष्पक्ष अनुसूचक, linux / rbtree.h

43
In general, the rotations for an AVL tree are harder to implement and debug than that for a Red-Black tree.यह सच नहीं है।
जिंगुगो याओ

9
पांडित्यपूर्ण होने के लिए, C ++ मानक अनिवार्य नहीं है कि std:: mapऔर मित्र किसी विशेष संरचना का उपयोग करें। इसे लागू करना बाकी है, हालांकि libstdc ++ और Dinkumware कम से कम लाल-काले पेड़ों का उपयोग करते हैं, और ऐसा लगता है कि आप व्यवहार में सही हैं।
म्बोजी

25
एवीएल पेड़ के प्रत्येक नोड में संग्रहीत संतुलन कारक दो बिट्स (-1 / 0 / +1) है। एक लाल-काला पेड़ प्रत्येक नोड में रंग जानकारी का एक बिट संग्रहीत करता है। इस प्रकार कुल पेड़ों में अतिरिक्त जानकारी के लिए O (N) मेमोरी की आवश्यकता होती है।
सेप्पो एनरवी

5
"एक गहन कार्य के लिए, एक लाल-काले पेड़ का उपयोग करें।" क्यों? एवीएल पेड़ का सम्मिलन केवल एक घुमाव को सबसे खराब रूप से लेता है, जबकि लाल काला वृक्ष दो ले सकता है।
डैनियल

3
यह BST प्रदर्शन के बेन पफैफ 2003 के विश्लेषण के अनुसार अपडेट किया जाना चाहिए - एवीएल पेड़ अधिक सामान्य उद्देश्य हैं और बेहतर प्रदर्शन करते हैं। जावा, सी ++ और लिनक्स कर्नेल के धीमे कार्यान्वयन को चुनने के ऐतिहासिक कारणों को ट्रैक करना दिलचस्प होगा।
डेविड मैकमैनमॉन

16

इस लेख को पढ़ने का प्रयास करें

यह अंतर, समानता, प्रदर्शन आदि पर कुछ अच्छी अंतर्दृष्टि प्रदान करता है।

यहाँ लेख से एक उद्धरण है:

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

अंतर यह है कि आरबी-ट्रीज़ ओरे (1) रोटेशन प्रति इन्सर्ट ऑपरेशन की गारंटी देता है। यही वास्तव में वास्तविक कार्यान्वयन में प्रदर्शन की लागत है।

सरलीकृत, आरबी-पेड़ गतिशील नोड संरचनाओं के ओवरहेड के आसपास ले जाने के बिना वैचारिक रूप से 2-3 पेड़ होने से यह लाभ प्राप्त करते हैं। शारीरिक रूप से आरबी-पेड़ों को द्विआधारी पेड़ों के रूप में लागू किया जाता है, लाल / काले-झंडे 2-3 व्यवहार का अनुकरण करते हैं

जहां तक ​​मेरी अपनी समझ है, एवीएल पेड़ और आरबी पेड़ प्रदर्शन के मामले में बहुत दूर नहीं हैं। एक आरबी पेड़ बस एक बी-पेड़ का एक प्रकार है और संतुलन को एवीएल पेड़ की तुलना में अलग तरीके से लागू किया जाता है।


1
AFIAK, एक AVL पेड़ में भी ओ (1) रोटेशन प्रति प्रविष्टि है। आरबी-ट्री और एवीएल के लिए - एक सम्मिलन में 1 या 0 घुमाव हो सकते हैं। यदि रोटेशन होता है, तो एल्गोरिदम बंद हो जाता है। यदि ऐसा नहीं होता है, तो आमतौर पर, एल्गोरिदम पेड़ की जड़ के नीचे से नोड्स की जांच / पुनरावृत्ति जारी रखते हैं। तो, कभी-कभी रोटेशन O (1) बेहतर हो सकता है क्योंकि यह स्कैनिंग शेष वस्तुओं O (लॉग (n)) को समाप्त करता है। क्योंकि औसतन एवीएल वृक्ष, अधिक घूर्णन करता है, एवीएल वृक्ष, आमतौर पर, बेहतर संतुलन होता है ~ 1.44 लॉग (एन) आरबी-ट्री 2 लॉग (एन) की तुलना में।
सर्गेई शैंडर

4

प्रदर्शन में अंतरों के बारे में हमारी समझ में वर्षों में सुधार हुआ है और अब AVL के ऊपर लाल-काले पेड़ों का उपयोग करने का मुख्य कारण एक अच्छे AVL कार्यान्वयन तक पहुंच नहीं होना है क्योंकि वे शायद कम आम हैं क्योंकि वे CLRS में शामिल नहीं हैं।

दोनों पेड़ों को अब रैंक-संतुलित पेड़ों का रूप माना जाता है, लेकिन लाल-काले पेड़ वास्तविक दुनिया के परीक्षणों में लगभग 20% तक धीमा हैं । या जब अनुक्रमिक डेटा डाला जाता है तब भी 30-40% धीमा होता है

इसलिए जिन लोगों ने लाल-काले पेड़ों का अध्ययन किया है, लेकिन एवीएल पेड़ लाल-काले पेड़ों का चयन नहीं करते हैं। लाल-काले पेड़ों के लिए प्राथमिक उपयोग उनके लिए विकिपीडिया प्रविष्टि पर विस्तृत हैं


1
मजेदार! मेरे पढ़ने में, libavl लेख यह कहता प्रतीत होता है कि AVL और RB आमने-सामने हैं, और न तो सामान्य रूप से दूसरे की तुलना में बहुत स्पष्ट रूप से बेहतर है (जो कि बेहतर है कार्यभार पर निर्भर करता है)। मुझे कहीं भी यह दावा नहीं दिखता कि AVL कुल मिलाकर लगभग 20% अधिक तेज है।
स्टीफन

3

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

AVL पेड़ लगातार परिशोधन अद्यतन लागत का समर्थन नहीं करते हैं [लेकिन लाल-काले पेड़ करते हैं]

स्रोत: मेह्लहॉर्न एंड सैंडर्स (2008) (धारा 7.4)

तो, जबकि आरबी और एवीएल दोनों पेड़ ओ (लॉग (एन)) को देखने, सम्मिलित करने और हटाने के लिए सबसे खराब समय की गारंटी देते हैं, एक नोड डालने या हटाने के बाद एवीएल / आरबी संपत्ति को बहाल करना, ओ (1) एमॉर्ट समय के लिए किया जा सकता है लाल-काले पेड़।


मेरा मानना ​​है कि एवीएल पेड़ के सम्मिलन की समान / समान परिशोधन लागत है, लेकिन बेहतर संतुलित वृक्ष (1.44log (N) बनाम 2log (N)) का उत्पादन करता है। एक ही समय में, एवीएल पेड़ में विलोपन को अधिक घुमाव की आवश्यकता हो सकती है। IMHO, इसे WAVL en.wikipedia.org/wiki/WAVL_tree
सर्गेई

1

प्रोग्रामर आमतौर पर गतिशील रूप से मेमोरी आवंटित करना पसंद नहीं करते हैं। एवल ट्री के साथ समस्या यह है कि "n" तत्वों के लिए आपको पेड़ की ऊंचाई को स्टोर करने के लिए कम से कम log2 (log2 (n)) ... (ऊँचाई-> log2 (n)) बिट्स की आवश्यकता होती है! इसलिए जब आप बहुत बड़ा डेटा संभाल रहे होते हैं तो आप यह सुनिश्चित नहीं कर सकते हैं कि प्रत्येक नोड पर ऊंचाई के भंडारण के लिए कितने बिट्स आवंटित करने हैं।

उदाहरण के लिए यदि आप ऊँचाई के भंडारण के लिए 4 बाइट्स इंट (32 बिट्स) का उपयोग करते हैं। अधिकतम ऊंचाई हो सकती है: 2 ^ 32 और इसलिए अधिकतम संख्या में तत्व आप पेड़ में स्टोर कर सकते हैं 2 ^ (2 ^ 32) - (बहुत बड़ा प्रतीत होता है, लेकिन डेटा के इस युग में कुछ भी बड़ा नहीं है मुझे लगता है)। और इसलिए यदि आप इस सीमा को गोली मारते हैं, तो आपको ऊंचाई को संग्रहीत करने के लिए गतिशील रूप से अधिक स्थान आवंटित करना होगा।

यह मेरे विश्वविद्यालय में एक प्रोफेसर द्वारा सुझाया गया उत्तर है जो मुझे उचित लगा! आशा है कि मैं समझ में आता हूँ।

संपादन: एवीएल के पेड़ रेड ब्लैक पेड़ों की तुलना में अधिक संतुलित हैं, लेकिन वे सम्मिलन और विलोपन के दौरान अधिक सड़ांध पैदा कर सकते हैं। इसलिए यदि आपके आवेदन में कई लगातार सम्मिलन और विलोपन शामिल हैं, तो लाल काले पेड़ों को प्राथमिकता दी जानी चाहिए। और अगर आवेषण और विलोपन कम लगातार होते हैं और खोज अधिक लगातार संचालन होती है, तो एवीएल पेड़ को रेड ब्लैक ट्री पर पसंद किया जाना चाहिए। - स्रोत GEEKSFORGEEKS.ORG


1
मैं कहूंगा कि यह दिलचस्प लेकिन अव्यावहारिक है। हालांकि यह सच है कि सबसे कॉम्पैक्ट मामले में ऊंचाई के लिए आवंटित करने के लिए बिट्स की सबसे कुशल संख्या का चयन करना एक मुश्किल काम होगा, अभ्यास में किसी भी बचे स्थान से कम नहीं जो बाइट से कम निश्चित रूप से अप्रयुक्त होगा, और कुछ भी बचा हुआ है एक 4 या 8 बाइट अंतरिक्ष में लगभग निश्चित रूप से अप्रयुक्त जाना होगा । स्मृति को प्रदर्शन के कारणों के लिए अलिखित आवंटित नहीं किया गया है, जो अंतरिक्ष की एक छोटी राशि को पुनः प्राप्त करने के लाभ से बहुत अधिक है। बच्चों के लिए संकेत और मूल्य 24 बाइट्स पर कब्जा कर लेते हैं; 8 और कोई व्यावहारिक लागत होने की संभावना नहीं है।
मंबलस्केट्स

4
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 द्वारा प्रस्तुत किया गया है
greybeard

4
2 ^ (2 ^ 32) तत्व बहुत सारे हैं ... जैसे आप पूरे ब्रह्मांड में हर एक अणु को स्टोर कर सकते हैं, और उन अणुओं की हर संभव जोड़ी, और हर संभव ट्रिपल, और फिर भी दूर से भी करीब आना शुरू नहीं करते हैं। एक सौ क्विंटल से विभाजित उस संख्या की घनीभूत जड़ के एक छोटे प्रतिशत के छोटे अंश के भीतर।
अर्धविराम

4
यह बहुत भ्रामक है। सबसे पहले, हमें एवीएल पेड़ के नोड में ऊंचाई को स्टोर करने की आवश्यकता नहीं है। दूसरा, भले ही हमने किया हो, और भले ही उपलब्ध स्मृति की विशिष्ट मात्रा हर साल दोगुनी हो, हमारे पास अभी भी 4 बिलियन वर्ष हैं जब तक कि हमारे पेड़ों की ऊंचाई 32 बिट्स में संग्रहीत नहीं की जा सकती है।
गस्सा

3
2 ^ (2 ^ 32) ऑब्जेक्ट्स हास्यास्पद रूप से, पागलपन से, बिल्कुल किसी भी कंप्यूटर से अधिक है जिसे हम अभी कल्पना कर सकते हैं, कभी भी पकड़ सकते हैं। हम 2 ^ 40 जैसे कुछ पर हैं। आप फिर से गणित कर रहे हैं की जाँच करें।
स्टीफन रीच

-1

एवीएल पेड़ के पुनः संतुलन को नीचे की संपत्ति से मिलना चाहिए। (विकी संदर्भ - एवीएल ट्री )

एक एवीएल पेड़ में, किसी भी नोड के दो बच्चे की ऊंचाइयों को अलग-अलग एक से अलग किया जाता है; यदि किसी भी समय वे एक से अधिक भिन्न होते हैं, तो इस संपत्ति को बहाल करने के लिए पुनर्संतुलन किया जाता है।

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


यह कई अन्य स्थानों का उल्लेख है, लेकिन इसका उत्तर बहुत अच्छा नहीं है क्योंकि एवीएल पेड़ और आरबी पेड़ प्रभावी रूप से अत्यंत समान बाधाओं को बनाए रखते हैं - आरबी पेड़ आवश्यक ऊंचाई से 2.0 गुना अधिक नहीं होंगे, और एवीएल पेड़ों के लिए यह कारक है लगभग 1.44। एवीएल पेड़ एक परिणाम के रूप में थोड़ा अधिक बार घूमते हैं, लेकिन प्रति रोटेशन की लागत अनिवार्य रूप से समान है; यह महंगा नहीं है।
Mumbleskates
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.