शुरू में खाली बी + पेड़ की चाबियाँ के साथ रिकॉर्ड कैसे दर्ज करें?


11

आदेश में कुंजियों के साथ रिकॉर्ड दर्ज करने का परिणाम (1, 2, 3, 4, 5) को आदेश m = 3. के प्रारंभ में खाली B + –tree में देखें। अतिप्रवाह के मामले में, नोड को विभाजित करें और फिर से वितरित न करें पड़ोसियों की चाबी। क्या कम ऊंचाई के पेड़ के लिए एक अलग क्रम में कुंजियों के साथ रिकॉर्ड दर्ज करना संभव है?

से गतिशील ट्री-संरचना संगठनों, p.50: संबंधपरक DBMS Internals, अध्याय 5

मैं इस पर अच्छा नहीं हूँ फिर भी मैंने बाईं ओर on और दाईं ओर yet करने की कोशिश की:

1,2 डालने तक:

यहाँ छवि विवरण दर्ज करें

फिर जहां तक ​​हमें नोड को विभाजित करना है और पड़ोसियों को कुंजियों का पुनर्वितरण नहीं करना है (मैं इसे बेटा-नोड के रूप में समझता हूं) मैंने केवल 2 के साथ सेल के दाईं ओर डाला:

यहाँ छवि विवरण दर्ज करें

और मैं 5 डालने के दौरान भी ऐसा ही करता रहा:

यहाँ छवि विवरण दर्ज करें

लेकिन यह काफी अजीब है, मैंने कभी भी इन जैसे खाली नोड्स नहीं देखे ... और मुझे नहीं पता कि क्या यह कुछ बहुत ही बुनियादी बी-पेड़ों के गुणों का सम्मान करता है:

  • प्रत्येक नोड में अधिकतम (m-1) कुंजियाँ होती हैं और कम से कम (m (m / 2) (-1) कुंजियाँ तब तक होती हैं जब तक कि एक कुंजी खाली नहीं हो सकती है और मैं कुंजी को "सूचक" के रूप में समझूँगा

पहला प्रयास: आदेश पर त्रुटि एक अस्पष्ट पेड़ से पता चला

शुरुआत में मैंने गलत समझा कि "ऑर्डर" क्या था (प्रति नोड बच्चों की अधिकतम संख्या)। इसलिए मुझे लगा कि एक नोड में तीन स्थान हो सकते हैं (और इसलिए 4 बच्चे हैं। मैं ऑर्डर 4 का एक पेड़ बना रहा हूं जो मुझे लगता है:

1,2,3 के सम्मिलन तक:

यहाँ छवि विवरण दर्ज करें

4 का सम्मिलन, जहां तक ​​हमें नोड को विभाजित करना है और पड़ोसियों (जो विरोधाभासी लगता है) को पुनर्वितरण की चाबियाँ नहीं देना है, मैं 3 के बाद सही पत्ती पर 1,2,3 और 4,5 देता हूं:

4 और 5 डालने के बाद आदेश 3 का बी पेड़

जवाबों:


6

मुझे लगता है कि आपके पेज का निर्माण उल्टा है। जब एक नोड विभाजित होता है तो यह पदानुक्रम के नीचे अधिक नोड्स नहीं बनाता है (आपके नामकरण में बेटा नोड्स)। इसके बजाय यह जड़ की ओर अधिक ऊपर की ओर बनाता है । जैसा कि किताब कहती है

ध्यान दें कि विकास पेड़ के शीर्ष पर है, और यह महत्वपूर्ण गुणों को सुनिश्चित करने के लिए एक बी-ट्री की आंतरिक विशेषता है कि इसमें हमेशा एक ही स्तर पर सभी पत्ते होते हैं, और प्रत्येक नोड मूल से अलग है कम से कम 50% भरा हुआ।

(मेरा जोर।)

लिंक्ड ईबुक से:

परिभाषा ५.१ एबी-ट्री ऑफ़ ऑर्डर m (m ... 3) ... प्रत्येक नोड में अधिकतम m - १ कुंजी होती है

अभ्यास m = 3 के लिए है, इसलिए प्रति नोड में अधिकतम 2 कुंजी।

पहले दो कुंजी आसान हैं - वे पहले पृष्ठ पर जाते हैं:

A:[1,2]

मैं ASCII कला का उपयोग करने जा रहा हूं। मैं प्रत्येक पृष्ठ को उनके द्वारा बनाए गए अनुक्रम में लेबल करूँगा और पृष्ठ के भीतर कुंजियाँ / संकेत दिखाऊँगा। तो पृष्ठ P जिसमें प्रमुख मान k1 और k2 होंगे P:[k1,k2]

अब कुंजी 3 साथ आती है। धारा 5.2.1 ... प्रविष्टि के अनुसार, पहला कार्य खोज करना है। यह निर्धारित करता है कि कुंजी 3 पृष्ठ A पर होनी चाहिए - हमारे पास एकमात्र पृष्ठ। इसके अलावा "यदि [वह नोड] भरा हुआ है, तो इसे दो नोड्स में विभाजित किया जाएगा।" पेज भरा हुआ है इसलिए इसे विभाजित होना चाहिए। अब हमारे पास है

A:[1,2]    B:[3, ]

लेकिन यह एक पेड़ नहीं है! जैसा कि पुस्तक कहती है:

[नया नोड] के लिए सूचक, [वर्तमान नोड] के पिता नोड में डाला जाता है , इस नोड में प्रविष्टि ऑपरेशन को दोहरा रहा है [अर्थात पिता नोड]। यदि आवश्यक हो तो यह विभाजन और अपग्रेड प्रक्रिया जारी रह सकती है, और यदि इसे विभाजित किया जाना चाहिए, तो एक नया रूट नोड बनाया जाएगा।

(प्रसंस्करण दिखाने के लिए मेरा जोर पेड़ को जड़ की ओर जारी रखता है, पत्तों की ओर नहीं।)

इसलिए हमें नए पृष्ठ (B) के वर्तमान पृष्ठ (A) के पिता में एक सूचक रखना चाहिए। एक नया रूट नोड होना चाहिए:

      C:[2,3]
      /     \
A:[1,2]    B:[3, ]

मेरे पास एक बच्चे (पुत्र) नोड में उच्चतम मूल्य को इंगित करने वाले गैर-पत्ती पृष्ठों में संकेत हैं। आपका लिंक किया हुआ पाठ इसे अलग तरीके से कर सकता है लेकिन परिणाम समकक्ष होगा।

मुख्य मूल्य 4 आता है; एल्गोरिथ्म का अनुसरण करते हुए हम खोज करते हैं कि यह किस पृष्ठ पर होना चाहिए। यह पृष्ठ बी होना चाहिए। इसके लिए जगह है इसलिए हम उस पृष्ठ और पृष्ठ सी पर सूचक को अपडेट करते हैं:

      C:[2,4]
      /     \
A:[1,2]    B:[3,4]

अगला हम कुंजी डालते हैं 5. यह पृष्ठ बी में जाना चाहिए लेकिन यह पूर्ण है। इसलिए यह विभाजित होता है

      C:[2,4]
      /     \
A:[1,2]    B:[3,4]   D:[5, ]

हमें पिता के नोड को अपडेट करना चाहिए। यह भी पूर्ण है, इसलिए यह विभाजित है:

      C:[2,4]    E:[5, ]
      /     \         \
A:[1,2]    B:[3,4]   D:[5, ]

विभाजन का प्रसार होता है और एक नया रूट नोड बनता है:

            F:[4,5]
            /     \
      C:[2,4]    E:[5, ]
      /     \         \
A:[1,2]    B:[3,4]   D:[5, ]

ऊपर की ओर बढ़ने से वृक्ष हर शाखा में समान गहराई बनाए रखता है। यह पूर्वानुमेय प्रदर्शन के लिए महत्वपूर्ण है। (कुछ लोग कहते हैं कि बी-ट्री में बी इस कारण से "संतुलित" है।)


दूसरे भाग के रूप में - "क्या कम ऊंचाई का पेड़ लगाने के लिए एक अलग क्रम में कुंजियों के साथ रिकॉर्ड दर्ज करना संभव है?" 5 कुंजी और दो कुंजी प्रति नोड के साथ हमें पेड़ बनाने के लिए सभी मूल्यों और 3 की ऊंचाई रखने के लिए कम से कम 3 पत्ती नोड्स की आवश्यकता होती है। इसलिए मेरी व्यवस्था दिए गए डेटा, अनुक्रम और एल्गोरिदम के लिए इष्टतम है।

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


मैं इस इंटरैक्टिव सिमुलेशन में आया हूं कि बी-ट्री कैसे बढ़ता है।

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