검색 트리

Download Report

Transcript 검색 트리

쉽게 배우는 알고리즘
5장. 검색트리
http://academy.hanb.co.kr
IT COOKBOOK
5장. 검색 트리
나는 보다 응용력 있는 유형의 수학이라는
이유 때문에
컴퓨터 과학을 하고 싶었다.
-로버트 타잔
-2-
한빛미디어㈜
IT COOKBOOK
학습목표
• Search에서 Record와 Key의 역할을 구분한다.
• Binary Search Tree(BST)에서의 검색·삽입·삭제 작업의
원리를 이해한다.
• BST의 균형이 작업의 효율성에 미치는 영향을 이해하
고, Red-Black Tree의 삽입·삭제 작업의 원리를 이해한
다.
• B-Tree의 도입 동기를 이해하고 검색·삽입·삭제 작업의
원리를 이해한다.
• Search Tree 관련 작업의 점근적 수행시간을 이해한다.
-3-
한빛미디어㈜
IT COOKBOOK
Record, Key, Search Tree
• Record
– 개체에 대해 수집된 모든 정보를 포함하고 있는 저장 단위
– e.g., 사람의 레코드
• 주민번호, 이름, 집주소, 집 전화번호, 직장 전화번호, 휴대폰 번호, 최종
학력, 연 소득, 가족 상황 등의 정보 포함
• Field
– 레코드에서 각각의 정보를 나타내는 부분
– e.g., 위 사람의 레코드에서 각각의 정보를 나타내는 부분
• Search Key / Key
– 다른 레코드와 중복되지 않도록 각 레코드를 대표할 수 있는 필드
– 키는 하나의 필드로 이루어질 수도 있고, 두 개 이상의 필드로
이루어질 수도 있다
• Search Tree
– 각 Node가 규칙에 맞도록 하나씩의 키를 갖고 있다
– 이를 통해 해당 레코드가 저장된 위치를 알 수 있다
한빛미디어㈜
IT COOKBOOK
Record, Key, Search Tree (Continued…)
Field Name
Record
Char [10]
Char [8]
Char [20]
Char [14]
Char [25]
Char [13]
Char [13]
ID
PASSWD
NAME
JUMIN_NO
ADDR
HOME_TEL
MOBILE_NO
2011001
********
Kim
880204-1232834
Seoul
02-1234-5678
010-1234-5678
2011002
********
Lee
890405-1234567
Wonju
033-324-4567
010-4321-0987
2011003
********
Park
870608-1546743
Chunchun
033-245-6789
010-3456-8796
2011004
********
Jung
881011-1615162
Daejun
041-346-4567
010-5609-1010
2011005
********
Song
901209-1813456
Inchon
031-678-0908
010-3950-0678
Key
Field
한빛미디어㈜
IT COOKBOOK
Search Algorithms
1. 순차 검색(Sequential Search)
2. 이진 검색(Binary Search)
3. 이진 나무 검색(Binary Tree Search) / 이진 검색 트리(Binary Search Tree)
4. 균형 잡는 나무 검색(Balanced Search Tree)
4-1. AVL Tree
4-2. 2-3 Tree
4-3. 2-3-4 Tree
4-4. Red-Black Tree
5. 해시(Hash)
6. 기수 검색(Radix Search)
6-1. Binary Radix Tree Search
6-2. Binary Radix Trie Search
7. 외부 검색(External Search)
7-1. ISAM(Indexed Sequential Access Method)
7-2. 연장 해시(Extendible Hashing 또는 Dynamic Hashing)
7-3. B-Tree
한빛미디어㈜
IT COOKBOOK
Sequential Search
 배열로 표현된 데이터에 대한 순차 검색 알고리즘
struct rec {
int key;
 레코드를 하나씩 순차적으로 찾는 방법
…
 비 정렬 자료의 검색에 적절
} A[N+1];
 n개의 비 정렬 자료의 순차 검색은
int seqsearch1 (int k) {
// 입력 : k – 검색 Key
// 출력 : i – k의 존재 위치
int i = 1;
검색에 실패할 경우 n+1번의 비교,
검색에 성공할 경우에는 평균적으로
(n+1)/2번의 비교 요구
while ( (i < N+1) && (A[i].key != k) ) i++;
return ( i );
}
한빛미디어㈜
IT COOKBOOK
Sequential Search (Continued…)
 포인터로 표현된 데이터에 대한 순차 검색 알고리즘
struct node {
int key;
struct node *link;
};
struct node *seqsearch2 (int k)
// 입력 : k – 검색 Key
// 출력 : t – Node 포인트
{
struct node *t;
t = head->link;
while ( (t != NULL) && (t->key != k) ) t = t->link;
return (t);
}
한빛미디어㈜
IT COOKBOOK
Binary Search
int bisearch (int k) {
// 입력 : k – 검색 Key
// 출력 : k의 존재 위치
 정렬된 레코드의 선형 리스트에
분할정복을 적용한 방법
int low, high, mid;
 검색 범위의 중간 위치를 비교해
low = 1, high = n;
나가는 방법
while (low <= high) {
mid = (low + high)/2;
if (k < A[mid].key) high = mid –1;
if (k == A[mid].key) return (mid);
if (k > A[mid].key) low = mid + 1;
}
 최악의 시간 복잡도는 O(log n)
return (0);
 삽입이나 삭제 시 최악의 경우 n번의 자료 이동이
필요하며 평균적으로도 약 n/2번의 이동을 요구
}
 삽입이나 삭제가 빈번한 경우 부적절
한빛미디어㈜
IT COOKBOOK
Binary Search Tree (BST)
• 각 Node는 하나씩의 Key 값을 갖는다. 각 Node의 Key
값은 다르다.
• 최상위 레벨에 Root Node가 있고, 각 Node는 최대 두
개의 자식을 갖는다.
• 임의의 Node의 Key 값은 자신의 왼쪽 자식 Node의 Key
값보다 크고, 오른쪽 자식의 Key 키 값보다 작다.
한빛미디어㈜
IT COOKBOOK
BST의 예
40
30
30
20
10
(a)
35
35
20
40
25
45
45
10
25
(b)
한빛미디어㈜
IT COOKBOOK
Subtree의 예
r
30
20
10
40
25
35
45
(a)
20
10
40
25
(b) Node r의 왼쪽 Subtree
35
45
(c) Node r의 오른쪽 Subtree
한빛미디어㈜
IT COOKBOOK
BST에서의 검색
t: Tree의 Root Node
x: 검색하고자 하는 Key
treeSearch(t, x)
{
if (t=NIL or key[t]=x) then return t;
if (x < key[t])
then return treeSearch(left[t], x);
else return treeSearch(right[t], x);
}
한빛미디어㈜
IT COOKBOOK
검색에서 재귀적 관점
t
left[t]
right[t]
한빛미디어㈜
IT COOKBOOK
BST에서의 삽입
t: Tree의 Root Node
x: 삽입하고자 하는 Key
treeInsert(t, x)
{
if (t=NIL) then {
key[r] ← x;
▷ r : New Node
return r;
}
if (x < key(t))
then {left[t] ← treeInsert(left[t], x); return t;}
else {right[t] ← treeInsert(right[t], x); return t;}
}
한빛미디어㈜
IT COOKBOOK
삽입의 예
30
30
30
30
20
20
20
25
(a)
25
(c)
(b)
(d)
30
30
20
10
20
40
25
(e)
40
10
40
25
35
(f)
한빛미디어㈜
IT COOKBOOK
BST에서의 삭제
t: Tree의 Root Node
r: 삭제하고자 하는 Node
• 3가지 경우에 따라 다르게 처리한다
– Case 1 : r이 Leaf Node인 경우
– Case 2 : r의 자식 Node가 하나인 경우
– Case 3 : r의 자식 Node가 두 개인 경우
한빛미디어㈜
IT COOKBOOK
BST에서의 삭제
t: Tree의 Root Node
r: 삭제하고자 하는 Node
Sketch-TreeDelete(t, r)
{
if (r이 Leaf Node) then
▷ Case 1
그냥 r을 버린다;
else if (r의 자식이 하나만 있음) then
▷ Case 2
r의 부모가 r의 자식을 직접 가리키도록 한다;
else
▷ Case 3
r의 오른쪽 Subtree의 최소 원소 Node s를 삭제하고,
s를 r 자리에 놓는다;
}
한빛미디어㈜
IT COOKBOOK
BST에서의 삭제
treeDelete(t, r, p)
{
if (r = t) then root ← deleteNode(t);
▷ r이 Root Node인 경우
else if (r = left[p])
▷ r이 Root가 아닌 경우
then left[p] ← deleteNode(r);
▷ r이 p의 왼쪽 자식
else right[p] ← deleteNode(r);
▷ r이 p의 오른쪽 자식
}
deleteNode(r)
{
if (left[r] = right[r] = NIL) then return NIL;
▷ Case 1
else if (left[r] = NIL and right[r] ≠ NIL) then return right[r];
▷ Case 2-1
else if (left[r] ≠ NIL and right[r] = NIL) then return left[r];
▷ Case 2-2
else {
▷ Case 3
s ← right[r];
while (left[s] ≠ NIL)
{parent ← s; s ← left[s];}
key[r] ← key[s];
if (s = right[r]) then right[r] ← right[s];
t: Tree의 Root Node
else left[parent] ← right[s];
return r;
r: 삭제하고자 하는 Node
}
p: r의 Parent Node
}
한빛미디어㈜
IT COOKBOOK
삭제의 예: Case 1
55
55
60
15
8
60
15
90
28
8
90
28
r
3
18
30
30
3
48
38
48
50
38
33
32
50
33
36
(a) r의 자식이 없음
32
36
(b) 단순히 r을 제거한다
한빛미디어㈜
IT COOKBOOK
삭제의 예: Case 2
3
18
8
90
28
r
30
3
3
18
38
50
33
36
(a) r의 자식이 하나뿐임
32
90
28
18
48
38
48
33
32
8
90
28
48
38
60
15
60
15
60
15
8
55
55
55
50
50
33
32
36
36
(b) r을 제거
(c) r 자리에 r의 자식을 놓는다
한빛미디어㈜
IT COOKBOOK
삭제의 예: Case 3
55
55
60
15
60
15
r
8
18
3
s
45
41
48
50
30
18
3
45
41
90
8
90
28
s
50
30
38
38
33
33
32
48
36
(a) r의 직후원소 s를 찾는다
32
36
(b) r을 없앤다
한빛미디어㈜
IT COOKBOOK
55
55
60
15
60
15
s
8
3
s
90
30
18
45
41
8
90
30
18
3
48
45
41
50
38
48
50
38
33
33
32
32
36
36
(c) s를 r자리로 옮긴다
(d) s가 있던 자리에 s의 자식을 놓는다
한빛미디어㈜
IT COOKBOOK
Red-Black Tree (RB Tree)
•
BST의 모든 Node에 Black 또는 Red의 색을 칠하되 다음의 Red
Black 특성을 만족해야 한다
① 모든 Node는 Red 혹은 Black이다. / Every node is either red or black
② Root는 Black이다./ The root is black
③ 모든 Leaf는 Black이다. / Every leaf is black
④ Node가 Red이면 그 Node의 자식은 반드시 Black이다.
 If a node is red, then both its children are black
⑤ Root Node에서 임의의 Leaf Node에 이르는 경로에서 만나는
Black Node의 수는 모두 같다.
 For each node, all paths from the node to descendant leaves
contain the same number of black nodes.
 여기서 Leaf Node는 일반적인 의미의 Leaf Node와 다르다.
모든 NIL 포인터가 NIL이라는 Leaf Node를 가리킨다고 가정한다.
한빛미디어㈜
IT COOKBOOK
BST를 RB Tree로 만든 예
NIL
NIL NIL
NIL
NIL
NIL
NIL
NIL
NIL
(b) (a)를 RB Tree로 만든 예
(a) BST의 한 예
NIL
(c) 실제 구현시의 NIL Node 처리 방법
한빛미디어㈜
IT COOKBOOK
RB Tree에서의 삽입
•
•
BST에서의 삽입과 같다. 다만 삽입 후 삽입된 Node를 Red로
칠한다. (이 Node를 x라 하자)
만일 x의 부모 Node p의 색상이
–
–
Black이면 아무 문제 없다.
Red이면 Red Black 특성 ④가 깨진다.
p
p
x
x
 그러므로 p가 Red인 경우만 고려하면 된다
한빛미디어㈜
IT COOKBOOK
RB Tree에서의 삽입
주어진 조건: p is red
•
•
p2와 x의 형제 Node는 반드시 Black이다
s의 색상에 따라 두 가지로 나눈다
–
–
Case 1: s가 Red
Case 2: s가 Black
p2
s
p
?
x
한빛미디어㈜
IT COOKBOOK
Case 1: s가 Red
: 색상이 바뀐 Node
p2
p2
Case 1
p
p
s
s
x
x
 p2에서
방금과 같은 문제가 발생할 수 있다: recursive problem!
한빛미디어㈜
IT COOKBOOK
Case 2-1: s가 Black이고, x가 p의 오른쪽 자식
Case 2-1
Case 2-2로!
p2
s
x
s
p
p2
p
x
y
y
1
2
2
1
한빛미디어㈜
IT COOKBOOK
Case 2-2: s가 Black이고, x가 p의 왼쪽 자식
: 색상이 바뀐 Node
Case 2-2
p
p2
s
p
x
y
p2
x
s
y
 삽입
완료!
한빛미디어㈜
IT COOKBOOK
RB Tree에서의 삭제
•
삭제 Node의 자식이 없거나 1개만을 가진 Node로 제한해도 된다
–
–
•
•
텍스트의 p.146의 첫 문단 참조
삭제 Node를 m이라 하자
삭제 Node가 Red이면 아무 문제 없다
삭제 Node가 Black이라도 (유일한) 자식이 Red이면 문제 없다
m
x
x
x
m
x
한빛미디어㈜
IT COOKBOOK
 x 옆의 -1은 Root에서 x 를 통해 Leaf에 이르는
경로에서 Black Node의 수가 하나 모자람을 의미한다.
p
p
p
?
x
m
x
-1
?
-1
s
x
l
m 삭제 후 문제 발생
(Red Black 특성 ④ 위반)
r
?
?
x의 주변 상황에 따라 처리 방법이 달라진다
한빛미디어㈜
IT COOKBOOK
경우의 수 나누기
p is red
x
p is black
x
-1
-1
Case 1
Case 2
한빛미디어㈜
IT COOKBOOK
p
p
Case 1-1
s
x
p
Case 1-2
x
-1
Case 1-3
s
-1
r
l
p
-1
r
l
s
x
r
l
p
p
Case 2-2
Case 2-1
s
x
x
-1
-1
l
r
l
Case 2-3
s
r
s
x
-1
l
r
p
Case 2-4
x
s
-1
l
r
한빛미디어㈜
IT COOKBOOK
p
Case 1-1
Case *-2
s
x
x
-1
r
l
p
p
Case *-3
s
-1
l
s
x
r
-1
l
r
p
Case 2-1
s
x
-1
r
l
최종적으로 5가지 경우로 나뉜다
p
Case 2-4
x
s
-1
l
r
한빛미디어㈜
IT COOKBOOK
각 경우에 따른 처리
p
Case 1-1
p
s
x
-1
l
s
x
r
l
r
 삭제
완료!
한빛미디어㈜
IT COOKBOOK
s
p
Case *-2
x
s
-1
p
r
r
 삭제
x
1
3
2
Case *-3
3
2
1
완료!
p
p
Case *-2로
x
x
s
-1
l
-1
s
r
l
1
1
2
r
2
한빛미디어㈜
IT COOKBOOK
p
p
Case 2-1
x
s
s
x
-1
r
l
p
-1
r
l
s
Case 1-1, Case 1-2,
Case 1-3 중의 하나로
p
s
Case 2-4
x
방금과 같은 문제가
발생. Recursive problem.
재귀적으로 처리.
 p에서
r
-1
l
r
l
x
-1
한빛미디어㈜
IT COOKBOOK
B-Trees
 디스크의 접근 단위는 블록(페이지)
 디스크에 한 번 접근하는 시간은 수십만 명령어의 처리 시간과
맞먹는다
 Access time = Seek time + Latency + Transfer time;
 Seek time : 디스크 헤드를 정확한 트랙 위로 이동시키는
시간
 Latency : 디스크를 회전시켜 해당 블록이 디스크 헤드
아래로 오게 하는 시간 (전체 접근 시간의 50%정도 차지)
 Transfer time : 디스크 블록을 메모리로 전송하는 시간
 보통 디스크 접근 시간 단위가 milli-second인데 CPU는 mircosecond나 nano-second 단위로 일을 처리
 디스크보다 CPU가 적어도 약 1000~1000000배 빠르며 이렇게
느린 디스크 I/O를 위해 색인(Index) 구조인 B-Tree 탄생
한빛미디어㈜
IT COOKBOOK
B-Trees (Continued…)
 Index(색인)가 가져야 할 특성
 보조 기억 장치에서의 검색은 시간적인 부하가 많이 걸리기 때문에
탐색을 쉽게 하기 위해 File과는 별도로 Index를 만들어 사용한다.
 Index가 커질 경우 Index 역시 보조 기억 장치에 저장하는데 보조 기억
장치는 상대적으로 느리므로 보조 기억 장치의 Access 회수를 최대한
억제시켜야 한다.
 Index에의 Access 회수를 줄이기 위해서는 최대 탐색 길이 즉, Tree
높이를 줄여야 한다.
 높이를 낮추기 위해서는 하나의 Node에서 나가는 Branch의 개수를
증가시킨다.
 Search Tree가 디스크에 저장되어 있다면 Tree의 높이를 최소화하는 것이
유리하다
 B-Tree는 다진 Search Tree가 균형을 유지하도록 하여 최악의 경우 디스크
접근 횟수를 줄인 것이다
한빛미디어㈜
IT COOKBOOK
B-Trees (Continued…)
 각 Node는 최대 m개, 최소 (m/2)개의 Sub-tree를 가져야 한다.
 Tree의 각 Node가 적어도 반 이상은 key값으로 채워져 있도록
한다. 따라서 Sub-tree가 없는 Node가 발생하지 않고 key 값이
가능한 효율적으로 Sub-tree에 분배될 수 있도록 한다.
 Root Node는 최소한 두 개의 Sub-tree를 가져야 한다.
 단 Tree에 Root 만 있을 경우 Sub-tree는 없다.
 모든 Leaf Node는 같은 Level에 있어야 한다.
 모든 Leaf Node가 Root로부터 같은 거리에 있으므로 어느
Leaf Node를 탐색하든 처리 횟수가 같도록 한다.
 각 Leaf Node의 key 값의 개수는 최소 (m/2)-1개, 최대 m-1개이다
한빛미디어㈜
IT COOKBOOK
다진 Search Tree
key0
T0
key1
T1
…
key2
T2
T3
…
keyk-1
Tk
keyi-1 < T < keyi
i
한빛미디어㈜
IT COOKBOOK
B-Tree

B-Tree는 균형 잡힌 다진 Search Tree로 다음의 성질을
만족한다
– Root를 제외한 모든 Node는 k/2 ~ k 개의 키를
갖는다
– 모든 Leaf Node는 같은 깊이를 가진다
한빛미디어㈜
IT COOKBOOK
B-Tree의 Node 구조
부모 Node의 페이지
<key0, p0>
<key1, p1>
…
<keyk-1, pk1>
…
한빛미디어㈜
IT COOKBOOK
B-Tree를 통해 Record에 접근하는 과정
<key0, p0>
…
<keyi, pi>
…
키 keyi를 가진 record
페이지 pi
한빛미디어㈜
IT COOKBOOK
B-Tree에서의 삽입
BTreeInsert(t, x)
{
x를 삽입할 Leaf Node r을 찾는다;
x를 r에 삽입한다;
▷ t : Tree의 Root Node
▷ x : 삽입하고자 하는 Key
if (r에 Overflow 발생) then clearOverflow(r);
}
clearOverflow(r)
{
if (r의 형제 Node 중 여유가 있는Node가 있음) then {r의 남는 Key를 넘긴다};
else {
r을 둘로 분할하고 가운데 키를 부모 Node로 넘긴다;
if (부모 Node p에 Overflow 발생) then clearOverflow(p);
}
}
한빛미디어㈜
IT COOKBOOK
B-Tree에서 삽입의 예
(a)
7 13 25 34
1 2 3 4 6
8 10
15 17 19 20
27 28 30 33
37 38 40 41 45
9, 31 삽입
(b)
1 2 3 4 6
7 13 25 34
8 9 10
15 17 19 20
27 28 30 31 33
37 38 40 41 45
5 삽입
한빛미디어㈜
IT COOKBOOK
(c)
1 2 3 4 5 6
7 13 25 34
8 9 10
15 17 19 20
27 28 30 31 33
37 38 40 41 45
27 28 30 31 33
37 38 40 41 45
Overflow!
6 13 25 34
1 2 3 4 5
7 8 9 10
15 17 19 20
39 삽입
한빛미디어㈜
IT COOKBOOK
39 삽입
(d)
6 13 25 34
1 2 3 4 5
7 8 9 10
15 17 19 20
27 28 30 31 33
37 38 39 40 41 45
Overflow!
6 13 25 34 40
1 2 3 4 5
7 8 9 10
15 17 19 20
27 28 30 31 33
23, 35, 36 삽입
37 38 39
41 45
분할!
한빛미디어㈜
IT COOKBOOK
23, 35, 36 삽입
(e)
6 13 25 34 40
1 2 3 4 5
7 8 9 10
15 17 19 20 23
27 28 30 31 33
35 36 37 38 39
41 45
32 삽입
한빛미디어㈜
IT COOKBOOK
32 삽입
(f)
6 13 25 34 40
1 2 3 4 5
7 8 9 10
15 17 19 20 23 27 28 30 31 32 33 35 36 37 38 39
41 45
Overflow!
Overflow!
6 13 25 31 34 40
1 2 3 4 5
7 8 9 10
15 17 19 20 23
27 28 30
31
32 33
분할!
6 13 25
1 2 3 4 5
7 8 9 10
15 17 19 20 23
35 36 37 38 39
41 45
분할!
34 40
27 28 30
32 33
35 36 37 38 39
41 45
한빛미디어㈜
IT COOKBOOK
B-Tree에서의 삭제
▷ t : Tree의 Root Node
BTreeDelete(t, x, v)
{
▷ x : 삭제하고자 하는 Key
if (v가 Leaf Node 아님) then {
▷ v : x를 갖고 있는 Node
x의 직후원소 y를 가진 Leaf Node를 찾는다;
x와 y를 맞바꾼다;
}
Leaf Node에서 x를 제거하고 이 Leaf Node를 r이라 한다;
if (r에서 Underflow 발생) then clearUnderflow(r);
}
clearUnderflow(r)
{
if ( r의 형제 Node 중 키를 하나 내놓을 수 있는 여분을 가진 Node가 있음)
then { r이 Key를 넘겨받는다;}
else {
r의 형제 Node와 r을 합병한다;
if (부모 Node p에 Underflow 발생) then clearUnderflow(p);
}
}
한빛미디어㈜
IT COOKBOOK
B-Tree에서 삭제의 예
15
(a)
19 22
4 8
1 2 3
5 6 7
9 10
16 18
20 21
24 25 26
7 삭제
15
(b)
19 22
4 8
1 2 3
5 6
9 10
16 18
20 21
24 25 26
4 삭제
한빛미디어㈜
IT COOKBOOK
(c)
15
4, 5 교환
19 22
5 8
1 2 3
4 6
9 10
16 18
20 21
24 25 26
15
4 제거
19 22
5 8
1 2 3
6
9 10
16 18
20 21
24 25 26
Underflow!
15
재분배
19 22
3 8
1 2
5 6
9 10
16 18
20 21
24 25 26
9 삭제
한빛미디어㈜
IT COOKBOOK
15
(d)
3 8
1 2
5 6
10
16 18
20 21
24 25 26
15
Underflow!
3
1 2
19 22
Underflow!
19 22
병합!
5 6 8 10
16 18
20 21
24 25 26
병합!
3 15 19 22
1 2
5 6 8 10
16 18
20 21
24 25 26
한빛미디어㈜
IT COOKBOOK
B Tree, B+ Tree, B* Tree



B Tree

Balanced Tree, 차수가 2이상 가능

m-원 Tree의 단점인 한 쪽으로 편중된 Tree가 생성되는 경우를 보완하고자
Root Node로부터 Leaf Node의 Level이 같도록 유지

대용량의 데이터를 효율적으로 관리하기 위해 고안

모든 Leaf Node가 Root Node로부터 같은 거리에 있어야 한다.

항상 균형을 유지해야 하므로 삽입, 삭제가 일어날 때
Tree의 균형을 유지하기 위해 보조연산이 필요

Node의 차수가 여유가 있으면 보조연산이 필요 없지만,
차수가 꽉 차면 Leaf Node의 중간 값을 부모 Node로부터 두 갈래로 분열
B+ Tree

B Tree의 문제점(보조연산 필요)을 보완하기 위해 B Tree를 약간 변형한 트리

보조연산 회수를 줄였다

B Tree에 비해 공간 활용도를 높일 수 있다.

B Tree는 최소 ½면 분할할 수 있지만, B* Tree는 최소 2/3가 되야 분열

Node의 분열을 줄여서 보조연산 회수를 감소.

Node가 꽉 차면 분열하지 않고 형제 Node로 재배치(인접 Node가 찰 때까지 지연 가능)
B* Tree

Index 부분과 순차 데이터 부분으로 구성

모든 데이터를 가진 Node들이 Leaf Node로서 Tree의 마지막 높이에 존재하도록 유지하고
연결 리스트로 순차적 접근

접근 시간을 동일하게 유지
한빛미디어㈜
IT COOKBOOK
Thank you
- 57 -
한빛미디어㈜