लाल-काले पेड़ों और AVL पेड़ों के बीच अंतर


82

क्या कोई यह बता सकता है कि इन दो डेटा संरचनाओं के बीच मुख्य अंतर क्या हैं? मैं ऑनलाइन एक ऐसा स्रोत खोजने की कोशिश कर रहा हूं जो अंतर / समानताओं को उजागर करता है, लेकिन मुझे कुछ भी जानकारीपूर्ण नहीं मिला है। किन मामलों में एक दूसरे पर प्राथमिकता दी जाएगी? क्या व्यावहारिक परिस्थितियाँ एक को दूसरे की तुलना में "बेहतर" बनाती हैं?

जवाबों:


100

एवीएल पेड़ लाल-काले पेड़ों की तुलना में अधिक कठोर संतुलन बनाए रखते हैं। एवीएल पेड़ में जड़ से सबसे गहरी पत्ती तक का रास्ता अधिकतम ~ 1.44 lg (n + 2) पर है, जबकि लाल काले पेड़ों में यह अधिकतम ~ 2 lg (n + 1) पर है।

परिणामस्वरूप, AVL ट्री में लुकअप आम तौर पर तेजी से होता है, लेकिन यह अधिक रोटेशन ऑपरेशन के कारण धीमी प्रविष्टि और विलोपन की लागत पर आता है। यदि आप पेड़ पर अपडेट की संख्या पर हावी होने की संख्या की अपेक्षा करते हैं तो एवीएल पेड़ का उपयोग करें।


3
कॉन्सेप्ट को बेहतर तरीके से समझने को कहा। एवल ट्री और रेड ब्लैक ट्री दोनों को प्रति सम्मिलन में दो घूर्णन होते हैं। तो, आप कैसे कह सकते हैं कि AVL पेड़ धीमे हैं? अग्रिम में धन्यवाद!
user2626445

@larsmans! क्या प्रदर्शन अंतर इतना है कि एक नई अवधारणा बनाई गई है?
शाश्वत

@ शाश्वत मुझे वह नहीं मिला जो आप चाहते हैं। नई अवधारणा?
फ्रेड फू

2
@larsmans! मेरा मतलब है कि हमारे पास एवीएल वृक्ष होने पर रेड-ब्लैक ट्री की अवधारणा इतनी प्रसिद्ध क्यों है, हालांकि उनके सम्मिलन, विलोपन और अद्यतन प्रदर्शन में केवल मामूली अंतर हैं। क्या कोई बड़ी चीज है जो एवीएल पेड़ से अलग रेड-ब्लैक ट्री बनाती है?
शाश्वत

उन्हें बनाए रखने के लिए एल्गोरिदम अलग हैं, इसलिए उन्हें अलग-अलग नाम मिलते हैं। AFAIK, वे उसी बड़े-ओ समय सीमा के साथ संचालन के समान सेट का समर्थन करते हैं।
फ्रेड फू

54

छोटे डेटा के लिए :

डालें : RB ट्री और एवल ट्री में अधिकतम रोटेशन की निरंतर संख्या होती है लेकिन RB ट्री अधिक तेज़ होगा क्योंकि औसतन RB ट्री कम रोटेशन का उपयोग करते हैं।

लुकअप : एवीएल पेड़ तेजी से होता है, क्योंकि एवीएल पेड़ की गहराई कम होती है।

हटाएं : आरबी ट्री में अधिकतम रोटेशन की निरंतर संख्या होती है, लेकिन एवीएल पेड़ में रोटेशन का ओ (लॉग एन) समय सबसे खराब हो सकता है। और आरबी के पेड़ में औसतन रोटेशन की संख्या भी कम होती है, इसलिए आरबी का पेड़ तेज होता है।

बड़े डेटा के लिए :

डालें : AVL का पेड़ तेज़ होता है। क्योंकि आपको सम्मिलन से पहले किसी विशेष नोड के लिए देखने की आवश्यकता है। जैसा कि आपके पास अधिक डेटा है विशेष नोड को देखने का समय अंतर ओ (लॉग एन) के आनुपातिक बढ़ता है। लेकिन एवीएल पेड़ और आरबी पेड़ अभी भी केवल सबसे खराब स्थिति में रोटेशन की निरंतर संख्या की आवश्यकता है। इस प्रकार बोतल गर्दन उस विशेष नोड के लिए आपके द्वारा खोजे जाने का समय बन जाएगा।

लुकअप : AVL ट्री तेज है। (छोटे डेटा केस में भी)

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


2
इसका मतलब यह है कि एवीएल पेड़ों को हमेशा बड़ी मात्रा में डेटा के साथ पसंद किया जाएगा। जावा और C ++ STL में इसका उपयोग कैसे किया जाता है? stackoverflow.com/questions/3901182/…
emschorsch

एवीएल पेड़ को डालने / हटाने के मामले में आरबी पेड़ से बेहतर बनाने के लिए आपके पास निश्चित मात्रा में डेटा (उदाहरण के लिए 1 मिलियन) की आवश्यकता है, और यह वास्तव में इस पर निर्भर करता है कि आप इसे कैसे लागू करते हैं। एक स्मार्ट AVL कार्यान्वयन डेटा की कम मात्रा के साथ भी std :: मैप को हरा सकता है। उदाहरण के लिए, आप की जाँच करने के बच्चे और पोते अगर अभिभावक> ऊंचाई 5. से बड़ा है अशक्त हैं कि क्या की जरूरत नहीं है
ड्यू Jiaen

यह एक महान विश्लेषण है और डेटा संरचनाओं की तुलना के किसी भी प्रकार का उदाहरण होना चाहिए। स्वीकृत उत्तर की तुलना में बेहतर
pterodragon

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

8

इससे उद्धरण: AVL और लाल-काले पेड़ों के बीच अंतर

आरबी-पेड़, साथ ही एवीएल पेड़, आत्म-संतुलन हैं। वे दोनों ओ (लॉग एन) लुकअप और प्रविष्टि प्रदर्शन प्रदान करते हैं। अंतर यह है कि आरबी-ट्रीज प्रति इंसर्शन ऑपरेशन में ओ (1) रोटेशन की गारंटी देता है। यही वास्तव में वास्तविक कार्यान्वयन में प्रदर्शन की लागत है। सरलीकृत, आरबी-पेड़ गतिशील नोड संरचनाओं के ओवरहेड के आसपास ले जाने के बिना वैचारिक रूप से 2-3 पेड़ होने से यह लाभ प्राप्त करते हैं। शारीरिक रूप से आरबी-पेड़ों को द्विआधारी पेड़ों के रूप में लागू किया जाता है, लाल / काले-झंडे 2-3 व्यवहार का अनुकरण करते हैं।

परिभाषा के अनुसार, प्रत्येक एवीएल इसलिए रेड-ब्लैक का सबसेट है। किसी भी AVL के पेड़ को रंग देने में सक्षम होना चाहिए, बिना पुनर्गठन या रोटेशन के, इसे लाल-काले पेड़ में बदलना।


3

एवीएल पेड़ों की तुलना अक्सर लाल-काले पेड़ों के साथ की जाती है क्योंकि दोनों एक ही सेट के संचालन का समर्थन करते हैं और O(log n)बुनियादी संचालन के लिए समय लेते हैं । लुक-इंटेंसिव एप्लिकेशन के लिए, AVL पेड़ लाल-काले पेड़ों की तुलना में तेज़ होते हैं क्योंकि वे अधिक कठोर संतुलित होते हैं। लाल-काले पेड़ों के समान, एवीएल पेड़ ऊंचाई-संतुलित हैं। दोनों सामान्य रूप से वजन-संतुलित नहीं हैं और न ही किसी balanced weight के लिए μ-संतुलित हैं; अर्थात्, सहोदर नोड्स में वंशजों की संख्या अलग-अलग हो सकती है।

एवीएल पेड़ों पर विकिपीडिया अनुच्छेद से


3

संतुलन बनाए रखने के लिए पेड़ों की अधिकतम ऊंचाई सर्वोपरि है। यह 1.44 * log(n)एवीएल के लिए लगभग बराबर है, लेकिन आरबी पेड़ के लिए, यह है 2 * log(n)। तो हम यह निष्कर्ष निकाल सकते हैं कि समस्या को प्रोत्साहन मिलने पर एवीएल का उपयोग करना बेहतर है। एवीएल और आरबी पेड़ के लिए एक और सवाल क्या मायने रखता है। आरबी का पेड़ एवीएल से बेहतर होता है जब रोटेशन की कम लागत पर यादृच्छिक सम्मिलन का सामना करना पड़ता है लेकिन एवीएल जो आरोही या अवरोही डेटा सम्मिलित करने के लिए अच्छा है। इसलिए यदि समस्या प्रविष्टि प्रोत्साहन है, तो हम आरबी पेड़ का उपयोग कर सकते हैं।


3

एवीएल ट्री कैसे काम करता है, इसका अंदाजा लगाने के लिए यह इंटरेक्टिव विज़ुअलाइज़ेशन मदद करता है।

AVL और साथ ही RedBlack पेड़ ऊंचाई-संतुलित ट्री डेटा संरचनाएं हैं। वे काफी समान हैं, और वास्तविक अंतर किसी भी ऐड / रिमूव ऑपरेशन पर किए गए रोटेशन ऑपरेशन की संख्या में शामिल है - एवीएल के मामले में अधिक है, एक समग्र अधिक सजातीय संतुलन को संरक्षित करने के लिए।

दोनों कार्यान्वयन पैमाने के रूप में O(lg N), जहां एन पत्तियों की संख्या है, लेकिन व्यवहार में एवीएल ट्री लुकिंग गहन कार्यों पर तेजी से होता है: बेहतर संतुलन का लाभ उठाते हुए, ट्री ट्रैवर्स औसत रूप से छोटे होते हैं। दूसरी ओर, सम्मिलन और विलोपन वार, एक एवीएल ट्री धीमा है: संशोधन पर डेटा संरचना को ठीक से रिबैलेंस करने के लिए अधिक संख्या में घुमावों की आवश्यकता होती है।

सामान्य प्रयोजन के कार्यान्वयन के लिए (अर्थात प्राथमिकताओं में यह स्पष्ट नहीं है कि लुकअप ऑपरेशन के प्रमुख हैं), RedBlack ट्री को प्राथमिकता दी जाती है: वे लागू करने में आसान होते हैं, और आम मामलों में तेज़ होते हैं - जहाँ भी डेटा संरचना बार-बार खोजी जाती है। । एक उदाहरण है, TreeMapऔर TreeSetजावा में एक समर्थन RedBlack ट्री का उपयोग करते हैं।


2

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


1

मैंने जो देखा है उससे ऐसा लगता है कि एवीएल ट्री (लॉग एन) की वांछित ऊंचाई प्राप्त करने के लिए एवीएल पेड़ों को कई घुमावों (कभी-कभी पेड़ के ऊपर कभी-कभी) की आवश्यकता होती है। यह इसे अधिक कठोर संतुलित बनाता है।

लाल काले पेड़ों के लिए नियमों के 5 सेट हैं जिन्हें आपको प्रविष्टि और निष्कासन के माध्यम से सुनिश्चित करने की आवश्यकता है जो आप यहां पा सकते हैं http://en.wikipedia.org/wiki/Red-black_tree

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

बड़ा नियम नंबर 5 है ... 'दिए गए नोड से उसके किसी भी वंशज पत्तियों के प्रत्येक सरल मार्ग में समान संख्या में काले नोड्स हैं'।

इससे आपको पेड़ के काम करने के लिए सबसे अधिक चक्कर लगाने पड़ेंगे और इसके कारण पेड़ को संतुलन से बहुत दूर नहीं जाना पड़ेगा।


1

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

चूंकि रोटेशन का मतलब मेमोरी से लिखना होता है, और मेमोरी से लिखना महंगा होता है, RedBlackTrees एवलेरस से अपडेट करने के लिए तेजी से अभ्यास में हैं

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