Upload
others
View
10
Download
0
Embed Size (px)
Citation preview
305214Fundamental of Data Structures and
Algorithms
Lecture08: B-Tree
แนวคิดในการพัฒนา B-Trees
• ขอมูลที่มีขนาดใหญไมสามารถเกบ็ใน main memory
• ปกติแลวใชในระบบฐานขอมูลและระบบไฟล
B-Tree of order m
ถาไมวางเปลา (ไมมีขอมลู) จะตองมีคุณสมบัติดังนี้
1. root node มีจํานวนสมาชิกอยางนอย 1 จํานวน
2. ทุก node ที่ไมใช root node และ external node (pointer ชี้ไปที่ NULL) จะมีจํานวนสมาชิกอยางนอย
ceil( m/2 ) - 1
3. ทุก nodes มีจํานวนสมาชิกไมเกิน m-1
4. leaf nodes จะอยู level เดียวกันทั้งหมด
5. สําหรับ node ใดๆ ที่มีจํานวนสมาชิก p ตัว
ให k1,…,kp คือ คาของสมาชิก
ให c0 ,c1,…cp คือ child node
สมาชิกใน subtree ที่มี root ของ subtree เปน c0 จะมีคาของสมาชิกนอยกวา k1
สมาชิกใน subtree ที่มี root ของ subtree เปน cp จะมีคาของสมาชิกมากกวา kp
สมาชิกใน subtree ที่มี root ci ใด ๆ จะมีคาของสมาชิกมากกวา ki แตนอยกวา ki+1 โดย 0 < i < p
Example B-Tree of order 7
searchsearch(x)
คลายกับการคนหาขอมูลใน binary search tree คือเร่ิมจาก
root node แลวเปรียบเทียบคา ถาคาที่ตองการคนหาไมอยูใน
root node ก็ไปยัง node ถัดไปโดยเทียบคาที่ตองการคนหากับ
คาใน root node วาควรไปเสนทางใด แลวทําตอไปเร่ือย ๆ
จนกระทั่งพบขอมูลหรือเจอ NULL
insertinsert(x)
ถาตองการเพิ่มขอมูลใน B-tree ก็จะตองทําการคนหาขอมูลและ
ตําแหนงที่จะเพิ่มขอมูล คนหาจนกระทั่งเจอ NULL ก็ทําการเพิ่ม
ขอมูลใน node กอนหนาที่เจอ NULL
ถาเพ่ิมแลวจํานวนสมาชิกไมเกิน m-1 ก็ไมตองทําอะไรตอ แตถา
เพิ่มแลวจํานวนสมาชิกเกิน m-1 ตัว ใหทําการ “split” node
หรือแบง node ที่เกินนั้นออกเปน 2 node ซ่ึงแบงที่สมาชิก ed
ซ่ึง d = ceil( m/2 ) โดยใหสมาชิกนี้ไปอยูที่ parent node
ตวัอย่าง
จาก B-tree of order 7
insert(2)
เริ่มจาก root พบวา 2 นอยกวา 15 ไปที่ซายสุด เนื่องจาก node
ซายสุดมีสมาชิก 4 ตัว และแตละ node สามารถมีจํานวนสมาชิกไดถึง 6 ตัว
ก็เพ่ิมเขาไปไดเลยจะได
ตวัอย่าง
จาก B-tree of order 7insert(38)
ทําการเปรียบเทียบ 38 เร่ิมจาก root พบวาจะเพิ่มที่ node (22,
35, 42, 48, 53, 77) ทําการเพิ่ม 38 เขาไปจะได node (22, 35, 38, 42,
48, 53, 77) ซึ่งเกิน 6 ตัว จะตองทําการ split เปน 2 nodes โดย split ที่
ed ซึ่ง d = ceil( 7/2 ) = 4 ซึ่ง e4 จะขึ้นไปอยูใน parent node จะได
ตัวอยางเพ่ิมเติม
http://www.youtube.com/watch?v=coRJrcIYbF4
Deletedel(x)
เมื่อจะลบขอมูลใน B-tree ก็ตองหาขอมูลที่ตองการลบกอน แลว
ทําการลบขอมูลนั้น แบงเปน 2 กรณีคือ
1. สมาชิกที่ตองการลบไมอยูใน leaf node
2. สมาชิกที่ตองการลบอยูใน leaf node
สําหรับกรณีท่ี 1
• แทนที่สมาชิกนั้นดวยสมาชิกที่มีคาสูงสุดใน left child node
ของสมาชิกนั้น “หรือ”
• แทนที่สมาชิกนั้นดวยสมาชิกที่มีคาตํ่าสุดใน right child node
ของสมาชิกนั้น
ตวัอย่าง
จาก B-tree of order 7
del(15)
แทนที่ 15 ดวยสมาชิกที่มีคาสูงสุดใน left child node ของ 15
นั้น คือ “12” จะได
หรือ
แทนที่ 15 ดวยสมาชิกที่มีคาตํ่าสุดใน right child node ของ 15
นั้น คือ “22” จะได
สําหรับกรณีท่ี 2
• แทนที่สมาชิกนั้นดวยสมาชิกที่มีคาสูงสุดใน left sibling
node ของสมาชิกนั้น “หรือ”
• แทนที่สมาชิกนั้นดวยสมาชิกที่มีคาตํ่าสุดใน right sibling
node ของสมาชิกนั้น
จากคุณสมบัติของ B-Tree
root node (ถาเปน leaf node ดวย) จะมีสมาชิกตํ่าสุด คือ 1 ตัว แตสําหรับ node อ่ืนจะตองมีสมาชิกตํ่าสุด ceil( m/2 ) -1 ตัว ถาตองการลบสมาชิกที่ไมอยูใน root แลว node นั้นมีจํานวนสมาชิกเทากบั ceil( m/2 ) -1 จะทําใหไมเปน B-Tree จะตองปรับปรงุ node ใหมโดยการ merge node (รวม node) คือจะนํา
– node ที่ลบแลวสมาชิกไมพอ
– node ที่เปน sibling node ซ่ึงนําสมาชิกมาใส node ที่ลบทําใหสมาชิกขาด
– สมาชิกใน parent node 1 ตัวที่อยูระหวาง node ทั้งสอง
มารวมกันเปน node ใหม 1 node
ตวัอย่าง
จาก B-tree of order 7
del(48)
ceil( m/2 ) -1 = ceil( 7/2 ) -1 = 3 คือจะมีสมาชิกใน
node อยางนอย 3 ตัว
ถาลบ 48 ใน node (35, 42, 48) ไป ก็จะทําใหเหลือสมาชิก 2
ตัวจึงตองนําสมาชิกใน sibling node มาใสแทน
แทนที่สมาชกินั้นดวยสมาชิกที่มีคาสูงสุดใน left sibling node
คือคา 12 ซึ่งเมื่อนํา 12 มาแลว มสีมาชิกเหลือ 4 ตัว วิธีการคือนํา 12 อยู
ใน parent node แลวนํา 22 ลงมาเปนสมาชิกใน node ที่ถูกลบขอมลู
นั้น จะได
หรือ
แทนที่สมาชกินั้นดวยสมาชิกที่มีคาสูงสุดใน right sibling node
คือคา 85 ซึ่งเมื่อนํา 85 มาแลว มสีมาชิกเหลือ 2 ตัว ทําใหสมาชิกขาด จึง
ตองใชวิธีการ merge node คอืนํา node (35, 42) รวมกับ 80 จาก
parent node และรวมกับ node (85, 89, 91) จะได
งานกลุม
จากขอมูลที่กําหนดใหตอไปนี้
10 34 24 3 66 47 18 8
26 55 82 29 32 17 6 72
27 23 9 44 12 60 89 10 57
46 54 7 33 95 56
ใหวาดรูป B-tree of order 7 โดยการนําเขาชุดขอมูลขางตน
งานกลุม
จาก B-tree of order 7 หนากอนหนานี้ ให ลบ
• 56
• 24