एक लाल और काले पेड़ की व्यवस्था


14

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

बस स्पष्ट होने के लिए, मैं एक एल्गोरिथ्म के बारे में बात कर रहा हूं, जो एक लाल और काले पेड़ और दो सीमाओं को देखते हुए, पहले पेड़ के सभी तत्वों के साथ एक नया लाल और काला पेड़ पैदा करेगा जो उन सीमाओं के भीतर हैं।

बेशक, जटिलता के लिए एक ऊपरी सीमा एक पेड़ को पीछे हटाने और तत्वों को जोड़कर दूसरे का निर्माण करने की जटिलता होगी।


3
@Radu: टिप्पणी संपादन सुविधा में एक बग है। यदि आप एक टिप्पणी में लेटेक्स का उपयोग करते हैं और टिप्पणी को संपादित करते हैं, तो आप अजीब व्यवहार देखते हैं, जैसे दोहराव आदि
आर्यभट्ट

@Radu मैंने अपने प्रश्न को बेहतर ढंग से समझाने के लिए कुछ पैराग्राफ जोड़े।
डैनियल सी। सोबराल

क्या पेड़ अपरिवर्तनीय हैं?
त्सुयोशी इतो

इसके अलावा, क्या आपका मतलब पिछले पैराग्राफ में निचली बाउंड के बजाय ऊपरी बाउंड से है?
त्सुयोशी इतो सेप

2
ऐसा लगता है कि लाल-काले पेड़ों पर विभाजित ऑपरेशन को सबसे खराब समय ओ (लॉग एन) में लागू किया जा सकता है, जहां एन एक पेड़ में तत्वों की संख्या है। यह दावा पेपर के परिचय में पाया जा सकता है "शुद्ध रूप से कार्यात्मक सबसे खराब स्थिति निरंतर समय के दौरान निरंतर सॉर्ट की गई सूचियाँ" गेर्थ स्टाल्टिंग ब्रोडल, क्रिस्टोस माक्रिस और कोस्तास साइक्लस, ईएसए 2006: cs.au.k / ~gerth / pub / esa06trees.html । जैसा कि मैंने अपनी पिछली टिप्पणी में उल्लेख किया है, यह सब-ऑपरेशन के सबसे खराब स्थिति ओ (लॉग एन) -टाइम कार्यान्वयन की अनुमति देता है।
त्सुयोशी इतो

जवाबों:


10

यह उत्तर मेरी कुछ टिप्पणियों को प्रश्न से जोड़ता है और उनका विस्तार करता है।

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

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

ओ (लॉग एन) समय में लाल-काले पेड़ों पर विभाजन ऑपरेशन कैसे करते हैं? खैर, यह पता चला कि एक प्रसिद्ध विधि थी। (मुझे यह नहीं पता था, लेकिन मैं डेटा संरचनाओं का कोई विशेषज्ञ नहीं हूं।) उस जुड़ने वाले ऑपरेशन पर विचार करें , जिसमें दो पेड़ L और R लगते हैं, जैसे L का प्रत्येक मान R के प्रत्येक मान से कम है और एक पेड़ से मिलकर बनता है। L और R में मान शामिल हैं। ऑपरेशन को सबसे खराब स्थिति में लागू किया जा सकता है O ((r r L Rr R | +1), जहाँ r L और r R |क्रमशः एल और आर के रैंक हैं, (जो रूट से प्रत्येक पत्ती के मार्ग पर काले नोड्स की संख्या है)। स्प्लिट ऑपरेशन को ज्वाइन ऑपरेशन O (लॉग एन) समय का उपयोग करके लागू किया जा सकता है, और टेलीस्कोपिंग योग पर विचार करके अभी तक का सबसे खराब-केस टाइम O (लॉग एन) है।

टार्जन द्वारा एक पुस्तक [टार 83] के खंड ४.१ और ४.२ का वर्णन है कि कैसे सबसे खराब समय ओ (लॉग एन) में लाल-काले पेड़ों पर शामिल होने और विभाजन के संचालन को लागू करना है। ये कार्यान्वयन मूल पेड़ों को नष्ट कर देते हैं, लेकिन उन्हें संशोधित करने के बजाय नोड्स की नकल करके उन्हें अपरिवर्तनीय, कार्यात्मक कार्यान्वयन में बदलना आसान है।

एक साइड नोट के रूप में, सेट और मैप मोड ऑफ़ ऑब्जेक्टिव कैमल विभाजित ऑपरेशन के साथ-साथ अन्य मानक संचालन (अपरिवर्तनीय) संतुलित बाइनरी सर्च ट्री पर प्रदान करते हैं। हालांकि वे लाल-काले पेड़ों का उपयोग नहीं करते हैं (वे बाधा के साथ संतुलित द्विआधारी खोज पेड़ों का उपयोग करते हैं कि बाईं ऊंचाई और दाईं ऊंचाई अधिकतम 2 से भिन्न होती है), उनके कार्यान्वयन को देखते हुए उपयोगी भी हो सकता है। यहाँ सेट मॉड्यूल का कार्यान्वयन है

संदर्भ

[Tar83] रॉबर्ट एंड्रे टार्जन। डेटा संरचनाएं और नेटवर्क एल्गोरिदमएप्लाइड मैथमेटिक्स , SIAM, 1983 में CBMS-NSF क्षेत्रीय सम्मेलन श्रृंखला का खंड 44 ।


@Radu GRIGore: हां, जब तक मैं कुछ याद नहीं कर रहा हूं।
त्सुयोशी इतो

@Radu GRIGore: या शायद नहीं, अब मुझे यकीन नहीं है। स्प्लिट ऑपरेशन का यह कार्यान्वयन आउटपुट ट्री के लिए O (लॉग एन) नए नोड्स आवंटित करता है, लेकिन मुझे लगता है कि पूरे ऑपरेशन को संभवतः पूंछ-पुनरावर्ती तरीके से लागू किया जा सकता है, केवल ओ (1) कार्य स्थान की आवश्यकता होती है। यदि यह सही है, तो आपके प्रश्न का उत्तर इस बात पर निर्भर करेगा कि आपका "अतिरिक्त स्थान" क्या है।
अक्टूबर को त्सुयोशी इतो

@Radu GRIGore: उस स्थिति में, मुझे लगता है कि अतिरिक्त स्थान O (1) है, हालांकि मैंने इसे ध्यान से नहीं देखा है।
त्सुयोशी इतो

@Radu GRIGore: मैं इस कारण को नहीं देख सकता कि किसी व्यक्ति को कार्यक्षेत्र की मात्रा के बारे में परवाह किए बिना परिणाम की मात्रा के बारे में परवाह किए बिना परिणाम को संग्रहीत करने की आवश्यकता है। जटिलता सिद्धांत में, समस्या आमतौर पर निर्दिष्ट करती है कि परिणाम क्या है और इसलिए परिणाम को संग्रहीत करने के लिए आवश्यक स्थान एल्गोरिदम पर निर्भर नहीं करता है। हालांकि, वर्तमान समस्या में, आवश्यक संचालन को लागू करने के कई तरीके हैं और कुछ कार्यान्वयन को दूसरों की तुलना में परिणाम को संग्रहीत करने के लिए अधिक स्थान की आवश्यकता होती है। यदि आप इस राशि के अंतर को नजरअंदाज करते हैं, तो मुझे नहीं लगता कि आपको इस बात की परवाह है कि हमें कितने कार्यक्षेत्र की आवश्यकता है।
त्सुयोशी इतो

अपरिवर्तनीय पेड़ों के लिए समस्या उत्परिवर्तित पेड़ों के लिए एक से अलग है। मैं अंतर समझता हूं इसलिए मेरे पास इसके बारे में पूछने के लिए कुछ भी नहीं था। अब, दो समस्याओं में से एक पर ज़ूम करने पर चर्चा करने के दो पहलू हैं --- स्मृति और समय। आपने यह नहीं कहा कि आप कितनी मेमोरी का उपयोग करते हैं और यह मुझे स्पष्ट नहीं लगता कि मैंने क्या जवाब दिया है। मैं यह देखने में विफल हूं कि इससे आपको कैसे लगा कि मैं दोनों समस्याओं के बीच के अंतर को अनदेखा करता हूं।
रादु GRIGore 20

8

इसका उपाय लाल-काले पेड़ों का उपयोग नहीं करना है। स्प्ले ट्री और एवीएल पेड़ों में विभाजन और जुड़ने के लिए कोड बहुत सरल है। मैं आपको इस तरह का समर्थन करने वाले स्प्ले पेड़ों और एवीएल पेड़ों के लिए जावा कोड के साथ निम्नलिखित यूआरएल का उल्लेख करता हूं। निम्न URL पर जाएं और Set.java (avl ट्री) और SplayTree.java (स्प्ले ट्री) देखें।

ftp://ftp.cs.cmu.edu/usr/ftp/usr/sleator/splaying/

--- डैनी स्लेटोर


5
साइट पर आपका स्वागत है, डैनी!
सुरेश वेंकट

2
इससे कम में सबरंग का समर्थन करने के लिए स्कैला रेड ब्लैक कार्यान्वयन को कैसे संशोधित करने में मदद मिलेगी O(n)? मैंने यह नहीं पूछा है कि किस तरह के पेड़ों में साधारण सब इंप्रूवमेंट होता है क्योंकि मेरे पास कोई समस्या नहीं है। यह उत्तर, हालांकि अच्छी तरह से इरादा है, हाथ से समस्या के लिए विषय और बेकार है।
डैनियल सी। सोबरल

6

(यह टिप्पणी करने के लिए है, लेकिन मैं टिप्पणी छोड़ने के लिए बहुत नया हूं।)

मैं केवल यह नोट करना चाहता हूं कि आप "एक्सेशन" ऑपरेशन में भी दिलचस्पी ले सकते हैं, जो सबरेंज को एक नए पेड़ के रूप में और दूसरे के रूप में सबरेंज के बिना इनपुट ट्री को लौटाता है। आपको पेड़ के अंतर्निहित प्रतिनिधित्व पर नियंत्रण रखने की आवश्यकता है, क्योंकि ज्ञात विधि स्तर लिंक पर निर्भर करती है। समय छोटे पेड़ के आकार के लिए लघुगणक में चलता है , परिशोधित अर्थों में यद्यपि ("amortized" isirc है, क्योंकि मेरे पास कागज तक पहुंच नहीं है) देखें:

के। हॉफमैन, के। मेहल्होर्न, पी। रोसेन्स्टिहल और आरई टार्जन, जॉर्डन अनुक्रमों को रेखीय समय में क्रमबद्ध खोज पेड़ों, सूचना और नियंत्रण, 68 (1986), 170-184 का उपयोग करते हुए

PS उपरोक्त उद्धरण सेडेल के treap राइटअप से आया है। Treaps भी अंश का समर्थन करता है।


यह विधि मानती है कि पहले से ही दो सीमाओं के लिए संकेत (या "उंगलियां") हैं।
jbapple

3

nm[a,b]

  1. O(lgn)aa
  2. O(m)
  3. O(m)

O(m+lgn)O(n+mlgm)

o(m)Ω(lgm)klgm

मैंने विवरणों पर काम नहीं किया, इसलिए मुझे यकीन नहीं है कि अतिरिक्त बहीखाता पद्धति चलने के समय को कैसे प्रभावित करती है।

O(1)Ω(lgm)


इस बारे में सोचते हुए, मुझे लगता है कि मुझे एक कठिन गिनती मिल सकती है O(logn), जिसके साथ मैं अस्थायी सरणी से बच सकता हूं।
डैनियल सी। सोबरल सेप

आप उनकी जड़ों में उप-आकार का भंडारण करके O (lg n) में गिनती प्राप्त कर सकते हैं।
राडू GRIGore

... लेकिन नोड्स में भंडारण का आकार सहायक स्थान का उपयोग नहीं करने की आवश्यकता के खिलाफ जाता है, इसलिए मेरा अवलोकन स्मृति के बारे में आपकी चिंता का समाधान नहीं करता है।
राडू GRIGore

1
बाइनरी पेड़ों को पूरी तरह से केवल कंस्टेंट अतिरिक्त स्थान (पेड़ के अलावा) का उपयोग करके पुन: संतुलित किया जा सकता है: eecs.umich.edu/~qstout/abs/CACM86.html
Jeffε

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