दो बाइनरी सर्च ट्री को मर्ज करना


17

मैं मनमाने आकार और सीमा के दो बाइनरी सर्च ट्री को मर्ज करने के लिए एक एल्गोरिथ्म की तलाश कर रहा हूं। जिस स्पष्ट तरीके से मैं इसे लागू करने के बारे में जाऊंगा वह पूरे उपप्रकार को खोजने के लिए होगा जिसकी सीमा दूसरे पेड़ में एक मनमाना बाहरी नोड में फिट हो सकती है। हालांकि, सबसे ज्यादा मामले एल्गोरिथ्म के इस प्रकार के लिए समय चल रहा है के आदेश पर हो रहा है O(n+m), जहां nऔर mक्रमश: प्रत्येक पेड़ के आकार के होते हैं।

हालांकि, मुझे बताया गया है कि इसमें किया जा सकता है O(h), जहां hपेड़ की ऊंचाई बड़ी है। और मैं इस पर पूरी तरह से हार गया हूं कि यह कैसे संभव है। मैंने पहले एक पेड़ को घुमाने के साथ प्रयोग करने की कोशिश की है, लेकिन एक पेड़ को रीढ़ में घुमाना पहले से ही ओ (एच) है।


मुझे पता नहीं है कि मेरे पास एक ही सवाल है।

निष्पक्ष होने के लिए, यह एक एल्गोरिथम होमवर्क में दिया गया प्रश्न था। यह पता चला है कि हे (एच) एक रनटाइम के लिए बहुत सख्त है, क्योंकि प्रश्न अधिक आवश्यक जानकारी देना भूल गया : कि एक पेड़ से सभी चाबियाँ सही पेड़ की सभी चाबियों से छोटी थीं।
efritz

क्या मुझे कुछ याद आ रहा है, बाइनरी पेड़ों को मर्ज करना O(log n)सरल चाल नोड फ़ंक्शन के साथ आसानी से नहीं होगा ?
एटी

@ हां, लेकिन हम नहीं जानते थे कि एक BST की कुंजी दूसरे से परस्पर अनन्य थी।
इफ्रिट्ज़

1
यह एक लाल-काला पेड़ है, न कि BST। एक लाल काला (और साथ ही एवीएल पेड़ और ढेर) विशेष प्रकार के पेड़ हैं जो ऊंचाई वाली संपत्ति रखते हैं। वेनिला बीएसटी एक एकल रीढ़ हो सकती है। एक BST में गैर-घटती या गैर-बढ़ती श्रृंखलाओं को सम्मिलित करने का प्रयास करें और आप देखेंगे कि इन पेड़ों की ऊंचाई वास्तव में है n। केवल पूर्ण या पूर्ण बाइनरी पेड़ों में उनके कुल नोड्स की ऊंचाई लॉगरिदमिक होती है।
एफ़्रिट्ज़

जवाबों:


24

में arXiv: 1002.4248 , जॉन Iacono और Özgür Özkan में मर्ज दो द्विआधारी खोज के पेड़ के लिए एक अपेक्षाकृत सरल एल्गोरिथ्म का वर्णन परिशोधित समय; विश्लेषण कठिन हिस्सा है। [ अद्यतन: के रूप में जो सही ढंग से अपने जवाब में देखता, इस एल्गोरिथ्म ब्राउन और Tarjan के कारण है।] उन्होंने यह भी एक और अधिक जटिल शब्दकोश डेटा संरचना, पक्षपाती छोड़ सूचियों के आधार पर वर्णन है, कि में समर्थन का आपस में विलय हे ( लॉग एन ) परिशोधित समय।O(log2n) O(logn)

दूसरी ओर, का एक सबसे खराब मामला असंभव है। N नोड्स के साथ दो बाइनरी सर्च ट्री पर विचार करें , एक 2 और 2 n के बीच सम पूर्णांक को संग्रहीत करता है, दूसरा 1 और 2 n - 1 के बीच विषम पूर्णांक को संग्रहीत करता है । दो पेड़ों को मिलाने से एक नया बाइनरी सर्च ट्री बनता है जो सभी पूर्णांकों को 1 और 2 n के बीच जमा करता है । ऐसे किसी भी पेड़ में, नोड्स के एक निरंतर अंश में उनके माता-पिता की तुलना में अलग समानता है। (प्रमाण: एक विषम पत्ती का जनक भी होना चाहिए।) इस प्रकार, सम और विषम वृक्षों को मिलाने के लिए परिवर्तन की आवश्यकता होती हैO(logn)n22n12n112n संकेत।Ω(n)


एक नोट: अगर मैंने इस पेपर में विवरण को सही ढंग से पढ़ा है, तो ये पेड़ डालने और हटाने का समर्थन नहीं करते हैं। मर्ज बस (जो जवाब में वर्णित) उंगली खोज पेड़ विलय के लिए प्रक्रिया इस प्रकार है। संचालन का प्रतिबंधित सेट ( एन एलजी) से बेहतर विश्लेषण के लिए अनुमति देता हैO(lg2n)एक। O(nlgmn)
jbapple

1
सुधारित विश्लेषण परिशोधन के कारण है, अनुमत संचालन का प्रतिबंध नहीं है। आवेषण और विलोपन को एक ही परिशोधित समय सीमा में विभाजन और विलय (वास्तव में "जॉइन") के साथ समर्थित किया जा सकता है । O(logn)
जेफ

जिज्ञासा से बाहर, क्या समय प्रभावित होता है अगर पेड़ लिंक्ड-इन के बजाय सरणियों में संग्रहीत किए जाते हैं (जो मुझे लगता है कि जब आप "बदलते ... संकेत " कहते हैं तो इसका क्या मतलब है )? Ω(n)
mtahmed

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

1
@ J @ ɛ E: मैं मानता हूं कि विभाजन और जुड़ाव का समर्थन किया जाता है, लेकिन मुझे नहीं लगता कि पेड़ बनाना या नष्ट करना है। इसलिए, उदाहरण के लिए, अगर मैं वर्णमाला से "x" हटाना चाहता हूं, तो मुझे "a..wyz" नहीं मिलता, बल्कि "x" भी मिलता है। ब्रह्मांड का आकार (जो , खंड 2.1 देखें) नहीं बदलता है। इसके अलावा, खंड 1 नोटों के लिए परिचय कि सेटों को ब्रह्मांड का विभाजन करना चाहिए, जिसकी मैं व्याख्या करता हूं (शायद गलत तरीके से) इसका मतलब है कि ब्रह्मांड में प्रत्येक तत्व किसी न किसी पेड़ में है। इसलिए, जिस तरह से मैंने इसे पढ़ा है, यह निर्माण अनबाउंड ब्रह्मांडों पर काम नहीं करता है। यही कारण है कि मुझे अपनी टिप्पणी ऊपर लिखनी चाहिए। n
jbapple

9

आपको यह संदर्भ सहायक लग सकता है: ब्राउन और टार्जन, एक फास्ट मर्जिंग एल्गोरिदम , जिसमें लेखक दिखाते हैं कि ( एन लॉग में संतुलित बाइनरी (एवीएल) पेड़ों को कैसे मर्ज किया जाए।जो इष्टतम है (तुलना आधारित एल्गोरिदम के लिए)। मीऔरएनबाइनरी सर्च ट्री द्वारा दर्शाए गए सॉर्ट किए गए सूचियों की लंबाई हैं, और यह माना जाता है किएमO(nlogmn)mnmn

आप इस पेपर की धारा 11.5 में फिंगर सर्च ट्री पर मर्ज किए गए सेट के लिए विभिन्न तकनीकों की चर्चा भी देख सकते हैं


2
दोनों समयबद्ध और मिलान कम बाध्य मान लेते हैं किमीटरएनO(nlogmn)mn
जेफ

मैंने सोचा था कि यह समयबद्धता द्वारा निहित था, लेकिन मैंने इसे स्पष्ट करने के लिए प्रश्न को संपादित किया।
जो

0

1
उनकी डेटा संरचना O (1) परिशोधित समय में शामिल होने का समर्थन करती है , विलय नहीं। एक पेड़ के सभी तत्व दूसरे में सभी तत्वों से छोटे होने चाहिए।
जेफ

आह, सच। लेख को फिर से पढ़ना था: "Join ( , T j ), एक पेड़ में दो पेड़ जोड़ते हैं। T पेड़ T i और T j को इस अर्थ में आदेशित किया जाता है कि T j के सभी तत्व या तो सबसे छोटे या बड़े से छोटे होते हैं या T i का सबसे बड़ा तत्व । मान लें कि सामान्यता की हानि के बिना w ( T i ) = w ( T j ) । इस मामले में, पेड़ T j को पेड़ से जोड़ा जाता है T i T iT jTiTjTiTjTjTiw(Ti)=w(Tj)TjTi , और इस आपरेशन के परिणाम का पेड़ हैTiTj , की रीढ़ पर एक नोड से जुड़ा हुआ है । "Ti
AT
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.