วิธีการใส่บันทึกด้วยกุญแจไปยังต้นไม้ B + ที่ว่างเปล่าในตอนแรก?


11

แสดงผลลัพธ์ของการป้อนระเบียนด้วยคีย์ตามลำดับ (1, 2, 3, 4, 5) ไปยัง B + ที่ว่างเปล่าเริ่มต้นของลำดับ m = 3 ในกรณีที่มีการล้นให้แบ่งโหนดและไม่กระจายอีกครั้ง กุญแจสู่เพื่อนบ้าน เป็นไปได้หรือไม่ที่จะป้อนระเบียนด้วยคีย์ต่าง ๆ เพื่อให้มีต้นไม้ที่มีความสูงน้อยกว่า

จากภายใน DBMS เชิงสัมพันธ์บทที่ 5: โครงสร้างต้นไม้แบบไดนามิกหน้า 50

ฉันไม่เก่งในเรื่องนี้ แต่ฉันพยายามทำ≤ทางซ้ายและ> ทางขวา:

จนกระทั่งการแทรก 1,2:

ป้อนคำอธิบายรูปภาพที่นี่

จากนั้นเท่าที่เราต้องแบ่งโหนดและไม่แจกจ่ายคีย์ให้เพื่อนบ้าน (ฉันเข้าใจว่าเป็นโหนดลูก) ฉันแทรกเฉพาะที่ด้านขวาของเซลล์ด้วย 2:

ป้อนคำอธิบายรูปภาพที่นี่

และฉันก็ทำแบบเดียวกันกับตอนที่แทรก 5:

ป้อนคำอธิบายรูปภาพที่นี่

แต่นี่มันค่อนข้างแปลกฉันไม่เคยเห็นโหนดว่างเปล่าแบบนี้ ... และฉันไม่รู้ว่ามันเคารพคุณสมบัติของต้นบีพื้นฐานหรือไม่:

  • แต่ละโหนดมีคีย์มากที่สุด(m-1)และอย่างน้อย(⌈ (m / 2) ⌉-1)คีย์เว้นแต่ว่าคีย์จะว่างเปล่าและฉันจะเข้าใจคีย์เป็น "ตัวชี้"

ความพยายามครั้งแรก: ข้อผิดพลาดในการสั่งซื้อเผยให้เห็นต้นไม้ที่ไม่ชัดเจน

ในตอนแรกฉันเข้าใจผิดว่า "คำสั่งซื้อ" คืออะไร (จำนวนสูงสุดของลูกต่อโหนด) ดังนั้นฉันคิดว่าโหนดอาจมีช่องว่างสาม (และดังนั้นเด็ก 4 คนฉันกำลังสร้างลำดับต้นไม้ 4 ฉันคิดว่า:

จนกระทั่งการแทรก 1,2,3:

ป้อนคำอธิบายรูปภาพที่นี่

การแทรก 4 เท่าที่เราต้องแยกโหนดและไม่ต้องกระจายกุญแจไปยังเพื่อนบ้าน (ซึ่งดูเหมือนขัดแย้งกัน) ฉันจะให้ 1,2,3 และ 4,5 บนใบไม้ทางขวาหลังจาก 3:

ต้นไม้ลำดับ B 3 หลังจากแทรก 4 และ 5

คำตอบ:


6

ฉันคิดว่าคุณมีการสร้างหน้าของคุณคว่ำ เมื่อโหนดแยกมันไม่ได้สร้างโหนดเพิ่มเติมลงลำดับชั้น (โหนดลูกชายในศัพท์ของคุณ) แทนที่จะสร้างขึ้นไปทางราก อย่างที่หนังสือบอก

โปรดทราบว่าการเจริญเติบโตอยู่ที่ด้านบนของต้นไม้และนี่คือลักษณะที่แท้จริงของต้นไม้ B – tree เพื่อให้แน่ใจว่าคุณสมบัติที่สำคัญที่จะมีใบทั้งหมดอยู่ในระดับเดียวกันเสมอและแต่ละโหนดแตกต่างจากรากอย่างน้อย เต็ม 50%

(ความสำคัญของฉัน)

จาก ebook ที่เชื่อมโยง:

คำจำกัดความ 5.1 AB – tree of order m (m ≥ 3) ... แต่ละโหนดมีได้มากที่สุด m - 1 คีย์

การออกกำลังกายสำหรับ 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 มาถึง; ทำตามอัลกอริทึมที่เราค้นหาเพื่อค้นหาหน้าที่ควรจะอยู่ ควรเป็นหน้า B มีที่ว่างสำหรับมันเราจึงอัปเดตหน้านั้นและตัวชี้ในหน้า C:

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

ต่อไปเราจะใส่รหัส 5 ควรไปที่หน้า B แต่เต็มแล้ว ดังนั้นมันจึงแยก

      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, ]

ต้นไม้จะรักษาระดับความลึกที่เหมือนกันในทุกสาขา สิ่งนี้สำคัญสำหรับประสิทธิภาพที่คาดการณ์ได้ (บางคนบอกว่า B ใน B-Tree ย่อมาจาก "balance" ด้วยเหตุผลอย่างนี้)


สำหรับส่วนที่สอง - "เป็นไปได้หรือไม่ที่จะป้อนระเบียนด้วยปุ่มต่างๆเพื่อให้มีต้นไม้ที่มีความสูงน้อยกว่า" ด้วย 5 คีย์และสองปุ่มต่อโหนดเราต้องการโหนดใบไม้อย่างน้อย 3 โหนดเพื่อเก็บค่าทั้งหมดและความสูง 3 เพื่อสร้างต้นไม้ ดังนั้นการจัดเรียงของฉันจึงเหมาะสมที่สุดสำหรับข้อมูลลำดับและอัลกอริธึมที่กำหนด

หนังสือเล่มนี้ใช้การจัดเรียงตัวชี้ที่แตกต่างกันอย่างมากกับสิ่งที่ฉันใช้และการจัดเรียงหน้าแยกที่แตกต่างกัน สิ่งนี้จะมีความสำคัญนำไปสู่หน้าเต็มส่วน มีส่วนในหน้า 42 ที่เรียกว่า "การโหลดข้อมูล" ที่แสดงว่าหน้าเต็มรูปแบบสามารถทำได้โดยการโหลดออกจากลำดับที่สำคัญรองรับลางสังหรณ์ของฉัน อย่างไรก็ตามฉันหวังว่าฉันจะให้พอยน์เตอร์เพียงพอแก่คุณและคุณจะสามารถใช้โครงสร้างตัวชี้ของหนังสือเพื่อทำงานนั้นด้วยตัวคุณเอง


ฉันเจอการจำลองแบบโต้ตอบนี้ของวิธีการที่ต้นไม้ B เติบโตขึ้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.