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

26
305214 Fundamental of Data Structures and Algorithms Lecture08: B-Tree

Upload: others

Post on 27-May-2020

10 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

305214Fundamental of Data Structures and

Algorithms

Lecture08: B-Tree

Page 2: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

แนวคิดในการพัฒนา B-Trees

• ขอมูลที่มีขนาดใหญไมสามารถเกบ็ใน main memory

• ปกติแลวใชในระบบฐานขอมูลและระบบไฟล

Page 3: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

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 เดียวกันทั้งหมด

Page 4: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

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

Page 5: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

Example B-Tree of order 7

Page 6: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

searchsearch(x)

คลายกับการคนหาขอมูลใน binary search tree คือเร่ิมจาก

root node แลวเปรียบเทียบคา ถาคาที่ตองการคนหาไมอยูใน

root node ก็ไปยัง node ถัดไปโดยเทียบคาที่ตองการคนหากับ

คาใน root node วาควรไปเสนทางใด แลวทําตอไปเร่ือย ๆ

จนกระทั่งพบขอมูลหรือเจอ NULL

Page 7: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

insertinsert(x)

ถาตองการเพิ่มขอมูลใน B-tree ก็จะตองทําการคนหาขอมูลและ

ตําแหนงที่จะเพิ่มขอมูล คนหาจนกระทั่งเจอ NULL ก็ทําการเพิ่ม

ขอมูลใน node กอนหนาที่เจอ NULL

Page 8: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

ถาเพ่ิมแลวจํานวนสมาชิกไมเกิน m-1 ก็ไมตองทําอะไรตอ แตถา

เพิ่มแลวจํานวนสมาชิกเกิน m-1 ตัว ใหทําการ “split” node

หรือแบง node ที่เกินนั้นออกเปน 2 node ซ่ึงแบงที่สมาชิก ed

ซ่ึง d = ceil( m/2 ) โดยใหสมาชิกนี้ไปอยูที่ parent node

Page 9: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

ตวัอย่าง

จาก B-tree of order 7

insert(2)

Page 10: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

เริ่มจาก root พบวา 2 นอยกวา 15 ไปที่ซายสุด เนื่องจาก node

ซายสุดมีสมาชิก 4 ตัว และแตละ node สามารถมีจํานวนสมาชิกไดถึง 6 ตัว

ก็เพ่ิมเขาไปไดเลยจะได

Page 11: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

ตวัอย่าง

จาก B-tree of order 7insert(38)

Page 12: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

ทําการเปรียบเทียบ 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 จะได

Page 13: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

ตัวอยางเพ่ิมเติม

http://www.youtube.com/watch?v=coRJrcIYbF4

Page 14: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

Deletedel(x)

เมื่อจะลบขอมูลใน B-tree ก็ตองหาขอมูลที่ตองการลบกอน แลว

ทําการลบขอมูลนั้น แบงเปน 2 กรณีคือ

1. สมาชิกที่ตองการลบไมอยูใน leaf node

2. สมาชิกที่ตองการลบอยูใน leaf node

Page 15: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

สําหรับกรณีท่ี 1

• แทนที่สมาชิกนั้นดวยสมาชิกที่มีคาสูงสุดใน left child node

ของสมาชิกนั้น “หรือ”

• แทนที่สมาชิกนั้นดวยสมาชิกที่มีคาตํ่าสุดใน right child node

ของสมาชิกนั้น

Page 16: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

ตวัอย่าง

จาก B-tree of order 7

del(15)

Page 17: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

แทนที่ 15 ดวยสมาชิกที่มีคาสูงสุดใน left child node ของ 15

นั้น คือ “12” จะได

Page 18: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

หรือ

แทนที่ 15 ดวยสมาชิกที่มีคาตํ่าสุดใน right child node ของ 15

นั้น คือ “22” จะได

Page 19: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

สําหรับกรณีท่ี 2

• แทนที่สมาชิกนั้นดวยสมาชิกที่มีคาสูงสุดใน left sibling

node ของสมาชิกนั้น “หรือ”

• แทนที่สมาชิกนั้นดวยสมาชิกที่มีคาตํ่าสุดใน right sibling

node ของสมาชิกนั้น

Page 20: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

จากคุณสมบัติของ 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

Page 21: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

ตวัอย่าง

จาก B-tree of order 7

del(48)

Page 22: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

ceil( m/2 ) -1 = ceil( 7/2 ) -1 = 3 คือจะมีสมาชิกใน

node อยางนอย 3 ตัว

ถาลบ 48 ใน node (35, 42, 48) ไป ก็จะทําใหเหลือสมาชิก 2

ตัวจึงตองนําสมาชิกใน sibling node มาใสแทน

Page 23: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

แทนที่สมาชกินั้นดวยสมาชิกที่มีคาสูงสุดใน left sibling node

คือคา 12 ซึ่งเมื่อนํา 12 มาแลว มสีมาชิกเหลือ 4 ตัว วิธีการคือนํา 12 อยู

ใน parent node แลวนํา 22 ลงมาเปนสมาชิกใน node ที่ถูกลบขอมลู

นั้น จะได

Page 24: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

หรือ

แทนที่สมาชกินั้นดวยสมาชิกที่มีคาสูงสุดใน right sibling node

คือคา 85 ซึ่งเมื่อนํา 85 มาแลว มสีมาชิกเหลือ 2 ตัว ทําใหสมาชิกขาด จึง

ตองใชวิธีการ merge node คอืนํา node (35, 42) รวมกับ 80 จาก

parent node และรวมกับ node (85, 89, 91) จะได

Page 25: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

งานกลุม

จากขอมูลที่กําหนดใหตอไปนี้

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 โดยการนําเขาชุดขอมูลขางตน

Page 26: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö

งานกลุม

จาก B-tree of order 7 หนากอนหนานี้ ให ลบ

• 56

• 24