कैसे समारोह है कि AVL पेड़ से एक श्रेणी में आइटम्स की संख्या पाता है की दक्षता में सुधार करने के लिए?

वोट
0

मैं एक समारोह लिख रहा हूँ कि बाहर रेंज से एक AVL पेड़ में आइटम्स की कुल संख्या पाता। उदाहरण के लिए, तर्क है ab और au में पारित कर दिया, तो मैं पता लगाने के लिए कितने आइटम वे एक AVL पेड़ में हैं कि सीमा में है की जरूरत है।

वर्तमान में ऐसा करने का मेरा तरीका जब ग्राहक कॉल पेड़ हर बार पार करने के लिए है। लेकिन क्योंकि मेरे AVL पेड़ है में आइटमों की संख्या बड़ी भिन्नता है, यह हमेशा के लिए ग्राहक इस समारोह भी कई बार कॉल करता है, तो लगता है। वहाँ ऐसा करने के लिए एक तेजी से रास्ता नहीं है?

मेरे रेंज समारोह:

void range(AvlTree T, char* k1, char* k2) {
    if ( T == NULL )
        return;

    if ( strcmp(k1, T->Element) < 0 )
        range(T->Left, k1, k2);

    if ( strcmp(k1, T->Element) <= 0 && strcmp(k2, T->Element) >= 0 )
        total++;

    if ( strcmp(k2, T->Element) > 0 )
        range(T->Right, k1, k2);
}
13/02/2020 को 23:59
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


1 जवाब

वोट
1

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

ऐसा करने के लिए एक सरल तरीका है कि नोड पर सबट्री के आकार प्रत्येक नोड में स्टोर करने के लिए है। यह जानकारी पेड़ रोटेशन के दौरान निरंतर समय में अद्यतन किया जा सकता। बाद में यह पूरे उप पेड़ को छोड़ इस प्रकार किया जा सकता है:

int range(AvlTree T, const char* k1, const char* k2) {
    assert(!k1 || !k2 || strcmp(k1, k2) <= 0);
    if(T == NULL)
        return 0;
    if(!k1 && !k2)
        return T->size;
    if(k2 && strcmp(k2, T->Element) < 0)
        return range(T->left, k1, k2);
    if(k1 && strcmp(T->Element, k1) < 0)
        return range(T->right, k1, k2);
    return range(T->left, k1, 0) + 1 + range(T->right, 0, k2);
}

यह एक देना होगा हे (लॉग एन) जटिलता।

अस्वीकरण: कोड अपरीक्षित है।

14/02/2020 को 00:38
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more