B-TREES
Multiway Search Trees
d e p v
s t u
b c h j k l r w x y z
a f g i m n o q
A balanced 5-way search tree
Multiway Search Trees
#define NUMKEY_MAX 4 /* maximum number of keys */
typedef int KeyType;
typedef struct NodeTag {
int count;
KeyType key[ NUMKEY_MAX + 1 ];
InfoType *pInfo[ NUMKEY_MAX + 1 ];
struct NodeTag *pBranch[ NUMKEY_MAX + 1 ];
} NodeType;
d e p key[]
pBranch[]
0 1 2 3 4
count 3
d e p
pInfo[]
Multiway Search Trees
Nodetype *MSearch(KeyType Target, NodeType *pRoot, int *pPos ) {
if ( pRoot == NULL ) return( NULL );
if ( LT(Target, pRoot-key[1]) )
return( MSearch( Target, pRoot->pBranch[0], pPos ) );
else {
*pPos = 1;
while( *pPos <= pRoot->count && GT(Target,pRoot->key[*pPos]) (*pPos)++;
if ( EQ( Target, pRoot->key[ *pPos ] ) ) return( pRoot );
else
return( MSearch( Target, pRoot->pBranch[*pPos], pPos );
}
} key[]
pBranch[]
count 3
d e p
pInfo[]
B-Trees
A B-tree of order 5
h i j k l
a b c e f m n p q r t u v x y z
d g o s w
B-Trees
! B-tree of order m คือ m-way search tree ที่
! แตละจุดเก็บคียไดอยางมาก m-1 คีย
! จุดที่ไมใชราก จะตองเก็บคียอยางนอย ?m/2 - 1 คีย
! รากจะตองเก็บคียอยางนอย 1 (ยกเวนวาตนไมไมมีขอมูล)
! ใบทุกใบของตนไมอยูในระดับเดียวกัน
Insertion into a B-Tree
f
a b d g h j
e i k m p s
Insert q
k m p q s median
f
a b d g h
j
e i k m
Insert p
q s
f
a b d g h
j
e i k m q s
p
Split
Growth of a B-Tree
a a g a f g a b f g
f
a b g k
f
a b d g h k m
f
a b d g h j
k m
f
a b d g h j
e i k m r s
Insert: j Insert: e,s,i,r
Insert: d,h,m
Growth of a B-Trees
f
a b d g h
j
e i k m s
r
x
f
a b d g h
j
k m
e i
r
s x
c
l n t u Insert: c,l,n,t,u
Insert: x
Growth of a B-Trees
a b d e g h i k n
j
l p s t u x
c f m r
Insert: p
Binary Search-Trees vs B-Trees
Seach Trees
B-Trees
Deletion from a B-Tree
สมมติวาตองการลบขอมูลที่คียมีคา x ถาคีย x นี้อยูใน node ภายใน B-tree
1. ใหหาคียที่มีคามากที่สุดที่นอยกวา x หรือหาคียที่มีคานอยที่สุดที่มากกวา x 2. ส ใหคียดังกลาวนี้คือ y ใหยายคีย y นี้ไปแทนที่ ณ ตํ าแหนงที่ x อยู
ซึ่งเหมือนกับกรณีที่ลบคียใน binary search tree หรือ AVL-tree
ใหสังเกตุวา คีย y ที่หาไดนี้ จะตองอยูใน node ที่เปนใบเสมอ จึงเปนการเปลี่ยนป หาการล ใน node ใดๆ เปนการลบคีย y ที่อยูในใบ
f
a b d g h j
m p
f
a b d g h h
m p
Delete : j Delete : h
Deletion from a B-Tree
f
a b d g h j
m p Delete : h
i
f
a b d g i j
m p
f
a b d g i j
m p
x x
x
f
a b d g j m
p x
A B C D A B C D
Deletion from a B-Tree
f
a b d g m p x
A B C D E
Delete j : Combine g,m,p,x f
a b d g j m
p x
A B C D E
Deletion : Example
Delete : h,r,p,d
a b d e g h i k n
j
l p t u x
c f m r s
z
Secondary Storages
Cost measure
1. เวลาในการเคลื่อนหัวอาน/เขียนขอมูล ไปยัง track ที่ตองการ
2. เวลาในการรอให block ที่เก็บขอมูลบน track หมุนมาที่ตรงหัวอาน 3. เวลาในการอาน/เขียน (ถายเท) ขอมูล 1 ไบต
(b = จํ านวนไบตตอหนึ่ง block)
( )ts
( )ts ( )ts
( t
s)
disk
magnetic surface
read/write head disk track
The Height of a B-Tree
. . . . . .
...
.. ...
..
...
.. ...
..
t-1
t-1
t-1 t-1 t-1 t-1 t-1 t-1 t-1 t-1
t-1 t-1
t-1
t-1 1
จํ านวน nodes
1
2
2t
2t2
( t s )
Searching a B-Tree : Analysis
สมมติวาเวลาในการอาน 1 node ของ B-tree ที่มี order m จาก disk คือ โดยใช binary search ในการหาคียที่ตองการใน node ที่อานได ซึ่งใชเวลา
และจํ านวน nodes ที่ตองอาน (worst case) ใน B-tree (ซึ่งมี n nodes) เพื่อหาคียที่ตองการ จะ เทากับความสูงของตนไม h ดังนั้นเวลาในการหาคียคือ
a bm+
a + bm
a bm + เวลา
Insertion into a B-Tree : Analysis
สมมติให B-tree order m สูง h มี p nodes และเก็บขอมูล n ขอมูล การแทรกขอมูลประกอบดวย
1. การหาใบที่ตองการ ซึ่งตองอานขอมูล h+1 ครั้ง
2. อาจเกิดการ split node สมมติวาเกิดขึ้น k ครั้ง โดยที่ k ≤ p-2 โดยการ split แตละครั้ง ตองเขียนขอมูล 2 ครั้ง
3. ปดทายดวยการแทรกขอมูลลงใน node ที่ไมเต็ม และเขียนขอมูลอีก 1 ครั้ง
ดังนั้นจํ านวนการอาน/เขียน ในการแทรกขอมูล
a + bm
a bm +
Deletion from a B-Tree : Analysis
Worst case : กรณีที่มีการ combine จากใบขึ้นไปเรื่อยๆ จนถึงระดับที่ 2
แตเมื่อถึงระดับที่ 1 เกิดการยายคียขึ้นลงใน node ขางเคียง กับคียที่ราก (ใหตนไมมีความสูง h)
จํ านวนการอาน/เขียนทั้งหมดที่มากสุด = 2(h+1)+h+1 = 3(h+1)
... . . .
...
.. ...
.. ...
..
t-1
t-1
t-1 t-1
t-1
≥ t 1
...
R&W
R&W R&W
R&W
R&W R
R