Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

C/C++ में AA ट्रीज

कंप्यूटर साइंस में AA ट्री को संतुलित ट्री के एक रूप के रूप में परिभाषित किया गया है जिसे क्रमबद्ध डेटा को कुशलतापूर्वक स्टोर और पुनर्प्राप्त करने के लिए लागू किया जाता है। AA ट्रीज को रेड-ब्लैक ट्री के एक रूपांतर के रूप में माना जाता है, एक प्रकार का बाइनरी सर्च ट्री जो प्रविष्टियों के कुशल जोड़ और विलोपन का समर्थन करता है। रेड-ब्लैक ट्री के विपरीत, AA ट्री पर रेड नोड्स को केवल राइट सबचाइल्ड के रूप में जोड़ा जा सकता है, लेफ्ट सबचाइल्ड नहीं। इस ऑपरेशन का परिणाम 2-3-4 ट्री के बजाय 2-3 ट्री का अनुकरण है, जो रखरखाव ऑपरेशन्स को सरल बनाता है। रेड-ब्लैक ट्री के लिए रखरखाव एल्गोरिदम को ट्री को ठीक से संतुलित करने के लिए सात अलग-अलग आकृतियों को मानने या विचार करने की आवश्यकता होती है -

C/C++ में AA ट्रीज


रेड-ब्लैक ट्री के विपरीत, AA ट्री दूसरी ओर केवल दो आकृतियों को मानने या विचार करने की आवश्यकता होती है क्योंकि केवल राइट लिंक्स रेड हो सकते हैं की सख्त आवश्यकता के कारण -

C/C++ में AA ट्रीज


बैलेंसिंग रोटेशन्स

जहां रेड-ब्लैक ट्रीज को प्रति नोड बैलेंसिंग मेटाडेटा के एक बिट की आवश्यकता होती है (रंग), AA ट्रीज को प्रति नोड O(log(log(N))) बिट्स मेटाडेटा की आवश्यकता होती है, एक इंटीजर "लेवल" के रूप में। नीचे दिए गए इनवेरिएंट्स AA ट्रीज के लिए मान्य हैं -

  • प्रत्येक लीफ नोड का लेवल एक माना जाता है।

  • प्रत्येक लेफ्ट चाइल्ड का लेवल उसके पैरेंट से ठीक एक छोटा होता है।

  • प्रत्येक राइट चाइल्ड का लेवल उसके पैरेंट के बराबर या एक छोटा होता है।

  • प्रत्येक राइट ग्रैंडचाइल्ड का लेवल उसके ग्रैंडपैरेंट से सख्ती से छोटा होता है।

  • लेवल एक से अधिक का प्रत्येक नोड के दो चाइल्ड होते हैं।

AA ट्री को री-बैलेंस करना रेड-ब्लैक ट्री को री-बैलेंस करने की तुलना में प्रोसीजरली बहुत आसान या सरल है।

AA ट्री के मामले में बैलेंस बहाल करने के लिए केवल दो विशिष्ट ऑपरेशन्स की आवश्यकता होती है: "स्क्यू" और "स्प्लिट"। स्क्यू को एक राइट रोटेशन के रूप में माना जाता है जो लेफ्ट हॉरिजॉन्टल लिंक से बने सबट्री को राइट हॉरिजॉन्टल लिंक से बने सबट्री से बदल देता है। स्प्लिट के मामले में, यह एक लेफ्ट रोटेशन और लेवल वृद्धि है जो दो या अधिक लगातार राइट हॉरिजॉन्टल लिंक्स से बने सबट्री को दो कम लगातार राइट हॉरिजॉन्टल लिंक्स वाले से बदल देता है। ऑपरेशन्स, "स्क्यू" और "स्प्लिट", नीचे समझाए गए हैं -

function skew is

    input: एक AA ट्री जिसे रीबैलेंस करने की आवश्यकता है, एक नोड t द्वारा दर्शाया गया।
    output: रीबैलेंस्ड AA ट्री को दूसरे नोड द्वारा दर्शाया गया।
    if nil(t) then return nil
    else if nil(left(t)) then return t
    else if level(left(t)) == level(t) then
        हॉरिजॉन्टल लेफ्ट लिंक्स के पॉइंटर्स एक्सचेंज करें।
        l = left(t)
        left(t) := right(l)
        right(l) := t
        return l
    else return t
    end if
end function

C/C++ में AA ट्रीज


function split is

    input: एक AA ट्री जिसे रीबैलेंस करने की आवश्यकता है, एक नोड t द्वारा दर्शाया गया।
    output: रीबैलेंस्ड AA ट्री को दूसरे नोड द्वारा दर्शाया गया।
    if nil(t) then return nil
    else if nil(right(t)) or nil(right(right(t))) then return t
    else if level(t) == level(right(right(t))) then
        हमारे पास दो हॉरिजॉन्टल राइट लिंक्स हैं। मध्य नोड को लें, उसे ऊपर उठाएं, और लौटाएं।
        r = right(t)
        right(t) := left(r)
        left(r) := t
        level(r) := level(r) + 1
        return r
    else return t
    end if
end function

C/C++ में AA ट्रीज

स्प्लिट -

  1. - C/C++ में strcmp() फ़ंक्शन

    strcmp() फ़ंक्शन एक बिल्ट-इन लाइब्रेरी फ़ंक्शन है और यह string.h हेडर फ़ाइल में घोषित है। इस फ़ंक्शन का उपयोग स्ट्रिंग आर्गुमेंट्स की तुलना करने के लिए किया जाता है। यह स्ट्रिंग्स की शब्दकोशीय तुलना करता है, जिसका अर्थ है कि यह दोनों स्ट्रिंग्स की तुलना कैरेक्टर दर कैरेक्टर करता है। यह स्ट्रिंग्स के

  1. - C/C++ में strcpy() फ़ंक्शन

    strcpy() फ़ंक्शन एक स्टैंडर्ड लाइब्रेरी फ़ंक्शन है। इसका उपयोग एक स्ट्रिंग को दूसरी स्ट्रिंग में कॉपी करने के लिए किया जाता है। C भाषा में, यह string.h हेडर फ़ाइल में घोषित है जबकि C++ भाषा में, यह cstring हेडर फ़ाइल में घोषित है। यह डेस्टिनेशन का पॉइंटर लौटाता है।C भाषा में strcpy() का सिंटैक्स यहा

  1. - C++ में सेम ट्री

    समस्या विवरण मान लीजिए हमारे पास दो बाइनरी ट्री हैं; हमें एक फ़ंक्शन परिभाषित करना है जो जांचे कि वे समान हैं या नहीं। हम जानते हैं कि बाइनरी ट्री को समान माना जाता है जब वे संरचनात्मक रूप से समान होते हैं और नोड्स का मान समान होता है। उदाहरण यदि इनपुट है: [1,2,3], [1,2,3], तो आउटपुट होगा True हल