쉽게 배우는 알고리즘

57
http://academy.hanb.co.kr 쉽쉽 쉽쉽쉽 쉽쉽쉽쉽 쉽쉽 쉽쉽쉽 쉽쉽쉽쉽 5 5 . . 장장장장 장장장장

Upload: arden-daniel

Post on 03-Jan-2016

119 views

Category:

Documents


2 download

DESCRIPTION

쉽게 배우는 알고리즘. 5 장 . 검색트리. 5 장 . 검색 트리. 나는 보다 응용력 있는 유형의 수학이라는 이유 때문에 컴퓨터 과학을 하고 싶었다. - 로버트 타잔. 학습목표. Search 에서 Record 와 Key 의 역할을 구분한다. Binary Search Tree(BST) 에서의 검색·삽입·삭제 작업의 원리를 이해한다. BST 의 균형이 작업의 효율성에 미치는 영향을 이해하고, Red-Black Tree 의 삽입·삭제 작업의 원리를 이해한다. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 쉽게 배우는 알고리즘

http://academy.hanb.co.kr

쉽게 배우는 알고리즘쉽게 배우는 알고리즘

55 장장 . . 검색트리검색트리

Page 2: 쉽게 배우는 알고리즘

- 2 -

IT COOKBOOKIT COOKBOOK

한빛미디어㈜

55 장장 . . 검색 트리검색 트리

나는 보다 응용력 있는 유형의 수학이라는 이유 때문에

컴퓨터 과학을 하고 싶었다 .

- 로버트 타잔

Page 3: 쉽게 배우는 알고리즘

- 3 -

IT COOKBOOKIT COOKBOOK

한빛미디어㈜

학습목표

• Search 에서 Record 와 Key 의 역할을 구분한다 .• Binary Search Tree(BST) 에서의 검색 · 삽입 · 삭제

작업의 원리를 이해한다 .• BST 의 균형이 작업의 효율성에 미치는 영향을

이해하고 , Red-Black Tree 의 삽입 · 삭제 작업의 원리를 이해한다 .

• B-Tree 의 도입 동기를 이해하고 검색 · 삽입 · 삭제 작업의 원리를 이해한다 .

• Search Tree 관련 작업의 점근적 수행시간을 이해한다 .

Page 4: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

Record, Key, Search Tree

• Record– 개체에 대해 수집된 모든 정보를 포함하고 있는 저장 단위– e.g., 사람의 레코드

• 주민번호 , 이름 , 집주소 , 집 전화번호 , 직장 전화번호 , 휴대폰 번호 , 최종 학력 , 연 소득 , 가족 상황 등의 정보 포함

• Field – 레코드에서 각각의 정보를 나타내는 부분– e.g., 위 사람의 레코드에서 각각의 정보를 나타내는 부분

• Search Key / Key– 다른 레코드와 중복되지 않도록 각 레코드를 대표할 수 있는 필드– 키는 하나의 필드로 이루어질 수도 있고 , 두 개 이상의 필드로

이루어질 수도 있다• Search Tree

– 각 Node 가 규칙에 맞도록 하나씩의 키를 갖고 있다– 이를 통해 해당 레코드가 저장된 위치를 알 수 있다

Page 5: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

Record, Key, Search Tree (Continued…)

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

Field

Record

Key

Char [10] Char [8] Char [14] Char [25] Char [13] Char [13]Char [20]

Field Name

Page 6: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

Search Algorithms1. 순차 검색 (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

Page 7: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

Sequential Search 배열로 표현된 데이터에 대한 순차 검색 알고리즘struct rec {

int key;

} A[N+1];

int seqsearch1 (int k) {

// 입력 : k – 검색 Key

// 출력 : i – k 의 존재 위치int i = 1;

while ( (i < N+1) && (A[i].key != k) ) i++;

return ( i );

}

레코드를 하나씩 순차적으로 찾는

방법

비 정렬 자료의 검색에 적절

n 개의 비 정렬 자료의 순차 검색은

검색에 실패할 경우 n+1 번의 비교 ,

검색에 성공할 경우에는 평균적으로

(n+1)/2 번의 비교 요구

레코드를 하나씩 순차적으로 찾는

방법

비 정렬 자료의 검색에 적절

n 개의 비 정렬 자료의 순차 검색은

검색에 실패할 경우 n+1 번의 비교 ,

검색에 성공할 경우에는 평균적으로

(n+1)/2 번의 비교 요구

Page 8: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT 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);

}

Page 9: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

Binary Searchint 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;

}

return (0);

}

정렬된 레코드의 선형 리스트에 분할정복을 적용한 방법

검색 범위의 중간 위치를 비교해 나가는 방법

정렬된 레코드의 선형 리스트에 분할정복을 적용한 방법

검색 범위의 중간 위치를 비교해 나가는 방법

최악의 시간 복잡도는 O(log n) 삽입이나 삭제 시 최악의 경우 n 번의 자료 이동이

필요하며 평균적으로도 약 n/2 번의 이동을 요구 삽입이나 삭제가 빈번한 경우 부적절

최악의 시간 복잡도는 O(log n) 삽입이나 삭제 시 최악의 경우 n 번의 자료 이동이

필요하며 평균적으로도 약 n/2 번의 이동을 요구 삽입이나 삭제가 빈번한 경우 부적절

Page 10: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

Binary Search Tree (BST)

• 각 Node 는 하나씩의 Key 값을 갖는다 . 각 Node 의 Key

값은 다르다 .

• 최상위 레벨에 Root Node 가 있고 , 각 Node 는 최대 두

개의 자식을 갖는다 .

• 임의의 Node 의 Key 값은 자신의 왼쪽 자식 Node 의

Key 값보다 크고 , 오른쪽 자식의 Key 키 값보다 작다 .

Page 11: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

30

4020

2510 4535

30

40

20

2510

45

35

(a) (b)

BST 의 예

Page 12: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

30

4020

2510 4535

20

2510

40

4535

(a)

(b) Node r 의 왼쪽 Subtree

r

(c) Node r 의 오른쪽 Subtree

Subtree 의 예

Page 13: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

BST 에서의 검색

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);       

}

t: Tree 의 Root Nodex: 검색하고자 하는 Key

Page 14: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

t

left[t] right[t]

검색에서 재귀적 관점

Page 15: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

BST 에서의 삽입

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;}

}

t: Tree 의 Root Nodex: 삽입하고자 하는 Key

Page 16: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

30

4020

2510 35

30 30

20

30

20

25

30

4020

25

30

4020

2510

(a) (b) (c) (d)

(e) (f)

삽입의 예

Page 17: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

BST 에서의 삭제

• 3 가지 경우에 따라 다르게 처리한다

– Case 1 : r 이 Leaf Node 인 경우

– Case 2 : r 의 자식 Node 가 하나인 경우

– Case 3 : r 의 자식 Node 가 두 개인 경우

t: Tree 의 Root Noder: 삭제하고자 하는 Node

Page 18: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

BST 에서의 삭제

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 자리에 놓는다 ;

}

t: Tree 의 Root Noder: 삭제하고자 하는 Node

Page 19: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT 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];

else left[parent] ← right[s];return r;

        } }

t: Tree 의 Root Noder: 삭제하고자 하는 Nodep: r 의 Parent Node

Page 20: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

55

288

6015

90

48

3018

38

3

50

r

(a) r 의 자식이 없음 (b) 단순히 r 을 제거한다

3632

33

55

288

6015

90

48

30

38

3

50

3632

33

삭제의 예 : Case 1

Page 21: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

55

288

6015

90

48

3018

38

3

50

r

(a) r 의 자식이 하나뿐임

55

288

6015

90

48183

50

(c) r 자리에 r 의 자식을 놓는다

3632

33

38

3632

33

55

288

6015

90

48

18

38

3

50

(b) r 을 제거

3632

33

삭제의 예 : Case 2

Page 22: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

55

288

6015

90

48

30

4518

41

38

3

50

r

s

(a) r 의 직후원소 s 를 찾는다

3632

33

55

30

8

6015

90

48

4518

41

38

3

50s

(b) r 을 없앤다

3632

33

삭제의 예 : Case 3

Page 23: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

55

308

6015

90

48

4518

41

3

50

s

(d) s 가 있던 자리에 s 의 자식을 놓는다

38

3632

33

55

308

6015

90

48

4518

41

38

3

50

s

(c) s 를 r 자리로 옮긴다

3632

33

Page 24: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT 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 를 가리킨다고 가정한다 .

Page 25: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

NIL NIL

NIL NIL NIL

NIL NIL

NIL

NIL

(a) BST 의 한 예 (b) (a) 를 RB Tree 로 만든 예

NIL

(c) 실제 구현시의 NIL Node 처리 방법

BST 를 RB Tree 로 만든 예

Page 26: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

RB Tree 에서의 삽입• BST 에서의 삽입과 같다 . 다만 삽입 후 삽입된 Node 를 Red 로

칠한다 . ( 이 Node 를 x 라 하자 )

• 만일 x 의 부모 Node p 의 색상이– Black 이면 아무 문제 없다 .

– Red 이면 Red Black 특성 ④가 깨진다 .

x

p

x

p

그러므로 p 가 Red 인 경우만 고려하면 된다

Page 27: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

RB Tree 에서의 삽입

?

x

p s

p2

주어진 조건 : p is red

• p2 와 x 의 형제 Node 는 반드시 Black 이다• s 의 색상에 따라 두 가지로 나눈다

– Case 1: s 가 Red

– Case 2: s 가 Black

Page 28: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

x

p s

x

p s

Case 1p2 p2

Case 1: s 가 Red

: 색상이 바뀐 Node

p2 에서 방금과 같은 문제가 발생할 수 있다 : recursive problem!

Page 29: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

y

p

s

p2

x

x

p

1

s

p2

y

2

2

1

Case 2-1 Case 2-2 로 !

Case 2-1: s 가 Black 이고 , x 가 p 의 오른쪽 자식

Page 30: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

x

p sx

p

s

p2

p2

yy

Case 2-2

Case 2-2: s 가 Black 이고 , x 가 p 의 왼쪽 자식

: 색상이 바뀐 Node

삽입 완료 !

Page 31: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

RB Tree 에서의 삭제• 삭제 Node 의 자식이 없거나 1 개만을 가진 Node 로 제한해도

된다– 텍스트의 p.146 의 첫 문단 참조– 삭제 Node 를 m 이라 하자

• 삭제 Node 가 Red 이면 아무 문제 없다• 삭제 Node 가 Black 이라도 ( 유일한 ) 자식이 Red 이면 문제

없다

x

x

x

xm m

Page 32: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

x

xm

-1

?

x

-1?

s

? ?l r

p

m 삭제 후 문제 발생(Red Black 특성 ④ 위반 )

x 의 주변 상황에 따라 처리 방법이 달라진다

p p

x 옆의 -1 은 Root 에서 x 를 통해 Leaf 에 이르는 경로에서 Black Node 의 수가 하나 모자람을 의미한다 .

Page 33: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

x

Case 1

-1x

Case 2

-1

경우의 수 나누기

p is red p is black

Page 34: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

Case 1-1

x-1

s

p

l r

x-1

s

pCase 1-2

x

-1

Case 2-4

s

l r

p

x-1

Case 2-1

s

l r

p

l r

Case 1-3

x-1

s

p

l r

Case 2-3

x-1

s

p

l r

x-1

s

pCase 2-2

l r

Page 35: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

Case 1-1

x-1

s

p

l r

x

-1

Case 2-4

s

l r

p

x-1

Case 2-1

s

l r

p

Case *-3

x-1

s

p

l r

x-1

s

pCase *-2

l r

최종적으로 5 가지 경우로 나뉜다

Page 36: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

Case 1-1

x-1

s

p

l r

x s

p

l r

각 경우에 따른 처리

삭제 완료 !

Page 37: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

Case *-3

x-1

s

p

l r1

x-1

s

p

l

r

21 2

Case *-2 로

1

x-1

s

p

2 3

Case *-2

1

x

s

p

2 3

r

r

삭제 완료 !

Page 38: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

x-1

Case 2-4

s

l r x

-1

s

l

r

p

p

Case 1-1, Case 1-2,Case 1-3 중의 하나로

p

x-1

Case 2-1

s

l r

x

-1

s

l r

p

p 에서 방금과 같은 문제가 발생 . Recursive problem. 재귀적으로 처리 .

Page 39: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

B-Trees 디스크의 접근 단위는 블록 ( 페이지 ) 디스크에 한 번 접근하는 시간은 수십만 명령어의 처리 시간과

맞먹는다 Access time = Seek time + Latency + Transfer time;

Seek time :  디스크 헤드를 정확한 트랙 위로 이동시키는 시간 Latency : 디스크를 회전시켜 해당 블록이 디스크 헤드 아래로

오게 하는 시간 ( 전체 접근 시간의 50% 정도 차지 ) Transfer time : 디스크 블록을 메모리로 전송하는 시간

보통 디스크 접근 시간 단위가 milli-second 인데 CPU 는 mirco-second 나 nano-second 단위로 일을 처리

디스크보다 CPU 가 적어도 약 1000~1000000 배 빠르며 이렇게 느린 디스크 I/O 를 위해 색인 (Index) 구조인 B-Tree 탄생

Page 40: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

B-Trees (Continued…)

Index( 색인 ) 가 가져야 할 특성 보조 기억 장치에서의 검색은 시간적인 부하가 많이 걸리기 때문에 탐색을 쉽게 하기 위해 File 과는 별도로 Index 를 만들어 사용한다 .

Index 가 커질 경우 Index 역시 보조 기억 장치에 저장하는데 보조 기억 장치는 상대적으로 느리므로 보조 기억 장치의 Access 회수를 최대한 억제시켜야 한다 .

Index 에의 Access 회수를 줄이기 위해서는 최대 탐색 길이 즉 , Tree 높이를 줄여야 한다 .

높이를 낮추기 위해서는 하나의 Node 에서 나가는 Branch 의 개수를 증가시킨다 .

Search Tree 가 디스크에 저장되어 있다면 Tree 의 높이를 최소화하는 것이 유리하다

B-Tree 는 다진 Search Tree 가 균형을 유지하도록 하여 최악의 경우 디스크 접근 횟수를 줄인 것이다

Page 41: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT 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

개이다

Page 42: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

T0

key0 key1 key2 … keyk-1

T1TkT2 T3

Tikeyi-1 < < keyi

다진 Search Tree

Page 43: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

B-Tree

B-Tree 는 균형 잡힌 다진 Search Tree 로 다음의 성질을 만족한다

– Root 를 제외한 모든 Node 는 k/2 ~ k 개의 키를 갖는다

– 모든 Leaf Node 는 같은 깊이를 가진다

Page 44: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

<key0, p0> <key1, p1> … <keyk-1, pk-1>

부모 Node 의 페이지

B-Tree 의 Node 구조

Page 45: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

<key0, p0> … <keyi, pi> …

페이지 pi

키 keyi 를 가진 record

B-Tree 를 통해 Record 에 접근하는 과정

Page 46: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

B-Tree 에서의 삽입BTreeInsert(t, x) {         x 를 삽입할 Leaf Node r 을 찾는다 ;         x 를 r 에 삽입한다 ;

        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);      } }

▷ t : Tree 의 Root Node ▷ x : 삽입하고자 하는

Key

Page 47: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

1 2 3 4 6 8 10 15 17 19 20

7 13 25 34(a)

37 38 40 41 4527 28 30 33

1 2 3 4 6 8 9 10 15 17 19 20

7 13 25 34(b)

37 38 40 41 4527 28 30 31 33

9, 31 삽입

5 삽입

B-Tree 에서 삽입의 예

Page 48: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

1 2 3 4 5 6 8 9 10 15 17 19 20

7 13 25 34(c)

37 38 40 41 4527 28 30 31 33

Overflow!

1 2 3 4 5 7 8 9 10 15 17 19 20

6 13 25 34

37 38 40 41 4527 28 30 31 33

39 삽입

Page 49: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

1 2 3 4 5 7 8 9 10 15 17 19 20

6 13 25 34

37 38 39 40 41 4527 28 30 31 33

Overflow!

39 삽입(d)

1 2 3 4 5 7 8 9 10 15 17 19 20

6 13 25 34 40

37 38 3927 28 30 31 33 41 45

분할 !23, 35, 36 삽입

Page 50: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

23, 35, 36 삽입

1 2 3 4 5 7 8 9 10 15 17 19 20 23

6 13 25 34 40

35 36 37 38 3927 28 30 31 33 41 45

32 삽입

(e)

Page 51: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

1 2 3 4 5 7 8 9 10 15 17 19 20 23

6 13 25 31 34 40

35 36 37 38 3927 28 30 41 4532 33

Overflow!

1 2 3 4 5 7 8 9 10 15 17 19 20 23

6 13 25

35 36 37 38 3927 28 30 41 4532 33

분할 !

34 40

31

32 삽입

1 2 3 4 5 7 8 9 10 15 17 19 20 23 35 36 37 38 39 41 45

Overflow!

(f)6 13 25 34 40

27 28 30 31 32 33

분할 !

Page 52: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

B-Tree 에서의 삭제BTreeDelete(t, x, v) {         if (v 가 Leaf Node 아님 ) then {          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);          } }

▷ t : Tree 의 Root Node ▷ x : 삭제하고자 하는 Key ▷ v : x 를 갖고 있는 Node

Page 53: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

15

1 2 3 5 6 7 9 10 16 18 24 25 2620 21

19 224 8

7 삭제

(a)

(b) 15

1 2 3 5 6 9 10 16 18 24 25 2620 21

19 224 8

4 삭제

B-Tree 에서 삭제의 예

Page 54: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

15

1 2 3 6 9 10 16 18 24 25 2620 21

19 225 8

Underflow!15

1 2 5 6 9 10 16 18 24 25 2620 21

19 223 8

9 삭제

(c)15

1 2 3 4 6 9 10 16 18 24 25 2620 21

19 225 8

4 제거

4, 5 교환

재분배

Page 55: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT COOKBOOK

15

1 2 5 6 10 16 18 24 25 2620 21

19 223 8

(d)

Underflow!

15

1 2 5 6 8 10 16 18 24 25 2620 21

19 223

Underflow!

병합 !

1 2 5 6 8 10 16 18 24 25 2620 21

3 15 19 22

병합 !

Page 56: 쉽게 배우는 알고리즘

한빛미디어㈜

IT COOKBOOKIT 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 의 마지막 높이에 존재하도록 유지하고

연결 리스트로 순차적 접근 접근 시간을 동일하게 유지

Page 57: 쉽게 배우는 알고리즘

- 57 -

IT COOKBOOKIT COOKBOOK

한빛미디어㈜

Thank you