Download - Lecture 39: ( a,b )- and B-Trees
LECTURE 39:(A,B)- AND B-TREES
CSC 213 – Large Scale Programming
Announcements
CSC213 final exam has been scheduled:Tuesday, May 10 from 10:15 – 12:15 in OM200
Lab mastery exam also on the schedule Thursday, May 12 from 2:45 – 3:45 in OM119
Problems with Search Trees
Great at organizing information for searching Processing is maintained at consistent O(log n) time
But sucks at locality (both spatial and temporal) Each node contains only 1 piece of data Jumps to child after using that piece of data All of these references means nodes
spaced randomly
Big Search Trees
Excellent way to test roommates system
Big Search Trees
Excellent way to test roommates system
Big Search Trees
Excellent way to test roommates system
(a,b) Trees to the Rescue!
Real solution to frequent hikes to Germany Linux & MacOS to track files & directories MySQL & other databases use this to hold
all the data Found in many other places where paging
occurs Simple rules define working of any (a,b)
tree Grows upward so that all leaves found at
same level At least a children for each internal node Every internal node has at most b children
What is “the BTree?”
Common multi-way tree implementation Describe B-Tree using order (“BTree of order m”)
m/2 to m children per internal node Root node can have m or fewer elements
Many variants exist to improve some failing Each variant is specialized for some niche
use Minor differences only between each
variant Describes the most basic B-Tree during
lecture
BTree Order
Select order minimizing paging when created Elements & references to kids in full node fills
page Nodes have at least m/2 elements, even at
their smallest In memory guarantees each page is at least
50% full How many pages touched by each
operation?
Removal from BTree
Swap element with successor in parent of a leaf Process is similar to removal in (2,4) node
If under m/2 elements in node after the removal See if can move element from sibling to
parent & steal element from parent
Else, merge with sibling & steal element from parent But this might propagate underflow to parent
node!
Removal from BTree
Swap element with successor in parent of a leaf Process is similar to removal in (2,4) node
If under m/2 elements in node after the removal See if can move element from sibling to
parent & steal element from parent
Else, merge with sibling & steal element from parent But this might propagate underflow to parent
node!
Remind anyone else of another structure?
(2,4) Tree Is An (a,b) Tree
Grows upward so all leaves found at same level
At least a children for each internal node
Every internal node has at most b children
Underflow and Fusion
Entry deletion may cause underflow Node less than ½ full after removing the Entry
Choice of solution depends on situation Example: remove(15)
15
9 14
10 112 5 7
Underflow and Fusion
Entry deletion may cause underflow Node less than ½ full after removing the Entry
Choice of solution depends on situation Example: remove(15)
15
9 14
2 5 7 10 11
Underflow and Fusion
Entry deletion may cause underflow Node less than ½ full after removing the Entry
Choice of solution depends on situation Example: remove(15)
15
9 14
2 5 7 10 11
Underflow and Fusion
Entry deletion may cause underflow Node less than ½ full after removing the Entry
Choice of solution depends on situation Example: remove(15)
9 14
2 5 7 10 11
Case 1: Transfer
Adjacent sibling Node has Entry to lend Steal parent’s Entry closest to underfilled
node Prevent loneliness & promote sibling’s Entry
No further processing needed in this case Example: remove(15)
9 14
2 5 7 10 11
Case 1: Transfer
Adjacent sibling Node has Entry to lend Steal parent’s Entry closest to underfilled
node Prevent loneliness & promote sibling’s Entry
No further processing needed in this case Example: remove(15) 14
9
2 5 7 10 11
Case 1: Transfer
Adjacent sibling Node has Entry to lend Steal parent’s Entry closest to underfilled
node Prevent loneliness & promote sibling’s Entry
No further processing needed in this case Example: remove(15) 14
9
2 5 7 10 11
Case 1: Transfer
Adjacent sibling Node has Entry to lend Steal parent’s Entry closest to underfilled
node Prevent loneliness & promote sibling’s Entry
No further processing needed in this case Example: remove(15) 14
9 11
2 5 7 10
Case 1: Transfer
Adjacent sibling Node has Entry to lend Steal parent’s Entry closest to underfilled
node Prevent loneliness & promote sibling’s Entry
No further processing needed in this case Example: remove(15) 14
9 11
2 5 7 10
Case 2: Fusion
Emptied node has only ½ filled siblings Merge node & sibling into single nearly
filled node Look to parent & steal Entry between
siblings May propagate underflow to parent!
Example: remove(14)
Mom
14
9 11
2 5 7 10
Case 2: Fusion
Emptied node has only ½ filled siblings Merge node & sibling into single nearly
filled node Look to parent & steal Entry between
siblings May propagate underflow to parent!
Example: remove(14)
Mom
9 11
102 5 7
Case 2: Fusion
Emptied node has only ½ filled siblings Merge node & sibling into single nearly
filled node Look to parent & steal Entry between
siblings May propagate underflow to parent!
Example: remove(14)
Mom
9 11
102 5 7
Case 2: Fusion
Emptied node has only ½ filled siblings Merge node & sibling into single nearly
filled node Look to parent & steal Entry between
siblings May propagate underflow to parent!
Example: remove(14)
Mom
9
10 112 5 7
Case 2: Fusion
Emptied node has only ½ filled siblings Merge node & sibling into single nearly
filled node Look to parent & steal Entry between
siblings May propagate underflow to parent!
Example: remove(14)
Mom
9
10 112 5 7
Case 2: Fusion
Emptied node has only ½ filled siblings Merge node & sibling into single nearly
filled node Look to parent & steal Entry between
siblings May propagate underflow to parent!
Example: remove(14)
Mom
9
10 112 5 7
In Case Of Overflow…
If addition overfills node, split into 2 new nodes ½ of the Entrys (& children) for the new
nodes Splitting now makes sure nodes at least ½
full!
15 24
12 18 27 30 32 35
In Case Of Overflow…
If addition overfills node, split into 2 new nodes ½ of the Entrys (& children) for the new
nodes Splitting now makes sure nodes at least ½
full!
15 24
12 18 27 30 32 35 12 27 3018 35
In Case Of Overflow…
If addition overfills node, split into 2 new nodes ½ of the Entrys (& children) for the new
nodes Splitting now makes sure nodes at least ½
full!
15 24
12 18 27 30 32 35 12 18 35
15 24 32
27 30
In Case Of Overflow…
If addition overfills node, split into 2 new nodes ½ of the Entrys (& children) for the new
nodes Splitting now makes sure nodes at least ½
full! Check parent for overflow, since added
1 Entry15 24
12 18 27 30 32 35 12 18 35
15 24 32
27 30
For Next Lecture
Remember, must submit program #3 on Friday Should start today and work through the
week 2nd best debugging technique? Taking a
(short) break! Weekly activity due tomorrow
Come and ask me any questions you may have!
Final problem day in class on Wednesday
At end of lab time Friday, lab phase #4 due