& µ v u v o } ( ^ µ µ v o p } ] z u > µ ì ô w rd · Ý ð/6-- ë a ó ö ú aüÝ...

Post on 27-May-2020

10 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

top related