मुझे लगता है कि आपके पेज का निर्माण उल्टा है। जब एक नोड विभाजित होता है तो यह पदानुक्रम के नीचे अधिक नोड्स नहीं बनाता है (आपके नामकरण में बेटा नोड्स)। इसके बजाय यह जड़ की ओर अधिक ऊपर की ओर बनाता है । जैसा कि किताब कहती है
ध्यान दें कि विकास पेड़ के शीर्ष पर है, और यह महत्वपूर्ण गुणों को सुनिश्चित करने के लिए एक बी-ट्री की आंतरिक विशेषता है कि इसमें हमेशा एक ही स्तर पर सभी पत्ते होते हैं, और प्रत्येक नोड मूल से अलग है कम से कम 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 पर एक खंड है, जिसे "डेटा लोडिंग" कहा जाता है, यह दर्शाता है कि महत्वपूर्ण अनुक्रम से लोड करके पूर्ण पृष्ठ कैसे प्राप्त किए जा सकते हैं जो मेरे कूबड़ का समर्थन करता है। हालांकि, मुझे आशा है कि मैंने आपको पर्याप्त संकेत दिए हैं और आप अपने लिए काम करने के लिए पुस्तक के पॉइंटर संरचना का उपयोग करने में सक्षम होंगे।
मैं इस इंटरैक्टिव सिमुलेशन में आया हूं कि बी-ट्री कैसे बढ़ता है।