अनुरोध के बाद, यहां वह संरचना है जिसे मैंने प्रश्न तैयार करने के बाद पाया है:
मूल विचार न्यूनतम के लिए एक सूचक के साथ एक थ्रेडेड स्कैपेगोट पेड़ का उपयोग करना है (और अच्छे उपाय के लिए, अधिकतम अच्छी तरह से)। थ्रेडिंग का एक सरल विकल्प प्रत्येक नोड में पूर्ववर्ती और उत्तराधिकारी बिंदुओं को बनाए रखना है (जो समकक्ष, सरल है, लेकिन अधिक उपरि है)। मैं इसे एक Scapegoat ढेर कहने के लिए आया हूं , बस इसे कुछ नाम देने के लिए।
बस यह मूल संरचना आपको ये कार्य देती है:
- खोज: एक कुंजी दी गई, समय में संबंधित नोड के लिए एक संकेतक लौटाता है ।ओ ( लॉग)n )
- सम्मिलित करें: एक कुंजी दी गई है, संरचना में कुंजी सम्मिलित करता है, एक पॉइंटर को समय में उस नोड पर लौटाता है ।ओ ( लॉग)n )
- पूर्ववर्ती / उत्तराधिकारी: एक सूचक दिया जाता है, समय में उत्तराधिकारी या पूर्ववर्ती लौटाता है ।ओ ( 1 )
- गेट-मिन / मैक्स: पॉइंटर को न्यूनतम या अधिकतम पर लौटाता है।
Scapegoat पेड़ों के विश्लेषण में, विलोपन के संतुलन ओवरहेड का विश्लेषण रूप में किया जाता है , लेकिन विश्लेषण वास्तव में O ( 1 ) का एक ओवरहेड देता है (जो कागज में अनदेखा किया जाता है क्योंकि वे भी O ( लॉग एन) की गणना करते हैं ) समय उस नोड को खोजने के लिए लेता है जिसे हटा दिया जाना है)। इसलिए, यदि हमारे पास एक नोड के लिए एक पॉइंटर है, तो हम इसे निरंतर समय में हटा सकते हैं (आप इसे O ( 1 ) समय में थ्रेडेड बाइनरी सर्च ट्री में कर सकते हैं ) और O ( 1 ) के साथ बैलेंसिंग के ओवरहेड के साथ जोड़ सकते हैं , यह एक देता है ओ (ओ ( लॉग)n )ओ ( 1 )ओ ( लॉग)n )ओ ( 1 )ओ ( 1 ) समय हटाएं:ओ ( 1 )
- हटाएं: एक पॉइंटर दिया गया है, समय में नोड को हटाता है ।ओ ( 1 )
इसका संयोजन:
- Extract-Min / Max: समय में न्यूनतम / अधिकतम नोड को हटाता है ।ओ ( 1 )
आप पॉइंटर्स के साथ थोड़ा अधिक कर सकते हैं: उदाहरण के लिए, मध्यिका या कुछ अन्य ऑर्डर स्टेटिस्टिक के लिए पॉइंटर को बनाए रखना मुश्किल नहीं है, इसलिए यदि आप उनकी आवश्यकता है तो आप ऐसे पॉइंटर्स की निरंतर संख्या बनाए रख सकते हैं।
कुछ अन्य बातें:
- निर्माण: छांटे गए क्रम में कुंजी, O ( n ) समय में एक Scapegoat ढेर का निर्माण ।nओ (एन)
- संतुलन: पेड़ को संतुलित करें ताकि यह समय में एक पूरी तरह से संतुलित द्विआधारी खोज ट्री (खोज के ऊपरी हिस्से को कम करता है ) का निर्माण करता है (आप ऐसा कर सकते हैं एक निरंतर कारक तेजी से कागज से पता चलता है, पूर्ववर्ती / उत्तराधिकारी का उपयोग करके) संकेत दिए गए)।ओ (एन)
और अंत में, मुझे पूरा यकीन है कि आप इन ऑपरेशनों का समर्थन कर सकते हैं, लेकिन मुझे यह जानने से पहले इन पर थोड़ा और सोचने की जरूरत है:
- इन्सर्ट-न्यू-मिन / मैक्स: एक ऐसी कुंजी दी गई है जो संरचना में पहले से मौजूद किसी भी कुंजी से छोटी / बड़ी है, संरचना में कुंजी सम्मिलित करती है, जो समय में उस नोड के लिए एक पॉइंटर लौटाती है ।ओ ( 1 )