पुनर्संतुलन एल्गोरिदम निम्नलिखित तरीके से किया जा सकता है -
डे-स्टाउट-वॉरेन एल्गोरिथम
हम डे-स्टाउट-वॉरेन एल्गोरिथम का उपयोग करके वास्तव में पुनर्संतुलन पद्धति को लागू कर सकते हैं। यह नोड्स की संख्या में रैखिक है।
निम्नलिखित छद्म कोड में मूल DSW एल्गोरिथम की एक प्रस्तुति है।
- एक नोड आवंटित किया जाता है जिसे "स्यूडो-रूट" कहा जाता है और पेड़ की वास्तविक जड़ को स्यूडो-रूट के सही बच्चे के रूप में बनाते हैं।
- पेड़-से-बेल फ़ंक्शन को ट्री को सॉर्ट की गई लिंक्ड सूची में बदलने के लिए स्यूडो-रूट के साथ इसके तर्क के रूप में कॉल करें।
- सॉर्ट की गई लिंक की गई सूची को फिर से पेड़ में बदलने के लिए बेल-टू-ट्री फ़ंक्शन को स्यूडो-रूट और पेड़ के आकार (तत्वों की संख्या) के तर्क के रूप में कॉल करें।
- छद्म जड़ के दाहिने बच्चे के बराबर पेड़ की वास्तविक जड़ बनाई जानी चाहिए।
- आखिरकार छद्म जड़ को नष्ट कर दिया जाना चाहिए।
"कॉपी ऑन राइट" ट्री
यदि हम रैखिकता की कमी का सामना कर सकते हैं (अर्थात हम एक मान लिखते हैं, लेकिन जब हम इसके नहीं मिलने के तुरंत बाद इसकी खोज करते हैं, तो यह अंततः मिल जाएगा, लेकिन 100ms-10s के बाद), एक "कॉपी ऑन राइट" ट्री लागू किया जा सकता है:सभी लेखन एक थ्रेड (पुनर्संतुलन के साथ) द्वारा किए जाते हैं, और हम समय-समय पर पेड़ को केवल-पढ़ने के लिए प्रतिलिपि में कॉपी करते हैं जिसे बिना किसी समवर्ती नियंत्रण के धागे को पढ़कर कार्यान्वित किया जा सकता है, हमें इसे परमाणु रूप से प्रकाशित करने की आवश्यकता होती है।
समवर्ती छोड़ें सूची
एक अन्य विकल्प एक समवर्ती स्किप सूची को लागू करना है:यह लॉगरिदमिक औसत केस सर्च/डिलीट/इन्सर्ट समय प्रदान करता है और अधिक आसानी से समानांतर होता है। यदि आप इसे लागू करते हैं तो जावा के लिए एक मानक लॉक-फ्री कार्यान्वयन है। हम समवर्ती स्किप सूचियों और संतुलित खोज ट्री के बारे में अधिक जानकारी यहाँ प्राप्त कर सकते हैं। विशेष रूप से, हम एक रंगीन पेड़ का उल्लेख प्राप्त कर सकते हैं, जिसे एक द्विआधारी खोज पेड़ के रूप में दर्शाया गया है जो समवर्ती पुनर्संतुलन के लिए अनुकूलित है।