& µ v u v o } ( ^ µ µ v o p } ] z u > µ ì ô w rd · Ý ð/6-- ë a ó ö ú aüÝ...
TRANSCRIPT
![Page 1: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/1.jpg)
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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/2.jpg)
แนวคิดในการพัฒนา B-Trees
• ขอมูลที่มีขนาดใหญไมสามารถเกบ็ใน main memory
• ปกติแลวใชในระบบฐานขอมูลและระบบไฟล
![Page 3: & µ v u v o } ( ^ µ µ v o P } ] Z u > µ ì ô W rd · Ý ð/6-- ë a ó ö ú aüÝ îüîÿö ß Ö ö ` Ö î ðN Ö ö `ê a Üì øê ` ð ê `ë a ó ö ú aüÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/3.jpg)
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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/4.jpg)
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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/5.jpg)
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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/6.jpg)
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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/7.jpg)
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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/8.jpg)
ถาเพ่ิมแลวจํานวนสมาชิกไมเกิน 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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/9.jpg)
ตวัอย่าง
จาก 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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/10.jpg)
เริ่มจาก 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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/11.jpg)
ตวัอย่าง
จาก 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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/12.jpg)
ทําการเปรียบเทียบ 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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/13.jpg)
ตัวอยางเพ่ิมเติม
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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/14.jpg)
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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/15.jpg)
สําหรับกรณีท่ี 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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/16.jpg)
ตวัอย่าง
จาก 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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/17.jpg)
แทนที่ 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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/18.jpg)
หรือ
แทนที่ 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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/19.jpg)
สําหรับกรณีท่ี 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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/20.jpg)
จากคุณสมบัติของ 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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/21.jpg)
ตวัอย่าง
จาก 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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/22.jpg)
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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/23.jpg)
แทนที่สมาชกินั้นดวยสมาชิกที่มีคาสูงสุดใน 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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/24.jpg)
หรือ
แทนที่สมาชกินั้นดวยสมาชิกที่มีคาสูงสุดใน 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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/25.jpg)
งานกลุม
จากขอมูลที่กําหนดใหตอไปนี้
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üÝ îüîÿö](https://reader036.vdocuments.mx/reader036/viewer/2022070713/5ed120b8c910782603754c6e/html5/thumbnails/26.jpg)
งานกลุม
จาก B-tree of order 7 หนากอนหนานี้ ให ลบ
• 56
• 24