쉽게 배우는 알고리즘

81
쉽쉽 쉽쉽쉽 쉽쉽쉽쉽 쉽쉽 쉽쉽쉽 쉽쉽쉽쉽 5 5 . . 장장장장 장장장장

Upload: sani

Post on 05-Jan-2016

143 views

Category:

Documents


8 download

DESCRIPTION

쉽게 배우는 알고리즘. 5 장 . 검색트리. 5 장 . 검색트리. 나는 보다 응용력 있는 유형의 수학이라는 이유 때문에 컴퓨터 과학을 하고 싶었다. - 로버트 타잔. 학습목표. 검색에서 레코드와 키의 역할을 구분한다. 이진검색트리에서의 검색 · 삽입 · 삭제 작업의 원리를 이해한다. 이진검색트리의 균형이 작업의 효율성에 미치는 영향을 이해하고, 레드블랙트리의 삽입 · 삭제 작업의 원리를 이해한다. B-트리의 도입 동기를 이해하고 검색 · 삽입 · 삭제 작업의 원리를 이해한다. - PowerPoint PPT Presentation

TRANSCRIPT

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

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

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

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

- 2 -

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

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

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

- 로버트 타잔

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

- 3 -

학습목표

• 검색에서 레코드와 키의 역할을 구분한다 .• 이진검색트리에서의 검색 · 삽입 · 삭제 작업의 원리를

이해한다 .• 이진검색트리의 균형이 작업의 효율성에 미치는

영향을 이해하고 , 레드블랙트리의 삽입 · 삭제 작업의 원리를 이해한다 .

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

• 검색트리 관련 작업의 점근적 수행시간을 이해한다 .• 일차원 검색의 기본 원리와 다차원 검색의 연관성을

이해한다 .

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

레코드 , 키 , 검색트리

• 레코드 record

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

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

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

• 검색키 search key 또는 키 key

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

이루어질 수도 있다• 검색트리 search tree

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

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

Binary Search Tree (BST)

• 각 노드는 하나씩의 키 값을 갖는다 . 각 노드의 키 값은 다르다 .

• 최상위 레벨에 루트 노드가 있고 , 각 노드는 최대 두 개의 자식을 갖는다 .

• 임의의 노드의 키값은 자신의 왼쪽 자식 노드의 키 값보다 크고 , 오른쪽 자식의 키값보다 작다 .

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

30

4020

2510 4535

30

40

20

2510

45

35

(a) (b)

BST 의 예

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

30

4020

2510 4535

20

2510

40

4535

(a)

(b) 노드 r 의 왼쪽 서브트리

r

(c) 노드 r 의 오른쪽 서브트리

서브트리의 예

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

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: 트리의 루트 노드x: 검색하고자 하는 키

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

t

left[t] right[t]

검색에서 재귀적 관점

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

BST 에서의 삽입

treeInsert(t, x)

{

        if (t=NIL) then {

                key[r] ← x;                              r : ▷ 새 노드                 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: 트리의 루트 노드x: 삽입하고자 하는 키

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

30

4020

2510 35

30 30

20

30

20

25

30

4020

25

30

4020

2510

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

(e) (f)

삽입의 예

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

BST 에서의 삭제

• 3 가지 경우에 따라 다르게 처리한다– Case 1 : r 이 리프 노드인 경우 – Case 2 : r 의 자식 노드가 하나인 경우– Case 3 : r 의 자식 노드가 두 개인 경우

t: 트리의 루트 노드r: 삭제하고자 하는 노드

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

BST 에서의 삭제

Sketch-TreeDelete(t, r) {         if (r 이 리프 노드 ) then                   Case 1 ▷                 그냥 r 을 버린다 ;         else if (r 의 자식이 하나만 있음 ) then     Case 2 ▷                r 의 부모가 r 의 자식을 직접 가리키도록 한다 ;         else                                   Case 3 ▷                r 의 오른쪽 서브트리의 최소원소 노드 s 를 삭제하고 ,                 s 를 r 자리에 놓는다 ; }

t: 트리의 루트 노드r: 삭제하고자 하는 노드

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

BST 에서의 삭제

treeDelete(t, r, p) {

if (r = t) then root ← deleteNode(t);     r▷ 이 루트 노드인 경우     else if (r = left[p]) r▷ 이 루트가 아닌 경우

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: 트리의 루트 노드r: 삭제하고자 하는 노드p: r 의 부모 노드

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

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 16: 쉽게 배우는 알고리즘

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 17: 쉽게 배우는 알고리즘

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 18: 쉽게 배우는 알고리즘

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 19: 쉽게 배우는 알고리즘

Red-Black Tree (RB Tree)

• BST 의 모든 노드에 블랙 또는 레드의 색을 칠하되 다음의 레드블랙특성을 만족해야 한다

① 루트는 블랙이다② 모든 리프는 블랙이다③ 노드가 레드이면 그 노드의 자식은 반드시 블랙이다④ 루트 노드에서 임의의 리프 노드에 이르는 경로에서 만나는 블랙 노드의

수는 모두 같다

여기서 리프 노드는 일반적인 의미의 리프 노드와 다르다 . 모든 NIL 포인터가 NIL 이라는 리프 노드를 가리킨다고 가정한다 .

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

NIL NIL

NIL NIL NIL

NIL NIL

NIL

NIL

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

NIL

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

BST 를 RB Tree 로 만든 예

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

RB Tree 에서의 삽입• BST 에서의 삽입과 같다 . 다만 삽입 후 삽입된 노드를 레드로

칠한다 . ( 이 노드를 x 라 하자 )• 만일 x 의 부모 노드 p 의 색상이

– 블랙이면 아무 문제 없다 .

– 레드이면 레드블랙특성 ③이 깨진다 .

x

p

x

p

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

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

RB Tree 에서의 삽입

?

x

p s

p2

주어진 조건 : p is red

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

– Case 1: s 가 레드 – Case 2: s 가 블랙

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

x

p s

x

p s

Case 1p2 p2

Case 1: s 가 레드

: 색상이 바뀐 노드

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

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

y

p

s

p2

x

x

p

1

s

p2

y

2

2

1

Case 2-1 Case 2-2 로 !

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

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

x

p sx

p

s

p2

p2

yy

Case 2-2

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

: 색상이 바뀐 노드

삽입 완료 !

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

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

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

• 삭제 노드가 레드이면 아무 문제 없다• 삭제 노드가 블랙이라도 ( 유일한 ) 자식이 레드이면 문제 없다

x

x

x

xm m

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

x

xm

-1

?

x

-1?

s

? ?l r

p

m 삭제 후 문제 발생( 레드블랙특성 ④ 위반 )

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

p p

x 옆의 -1 은 루트에서 x 를 통해 리프에 이르는 경로에서 블랙 노드의 수가 하나 모자람을 의미한다 .

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

x

Case 1

-1x

Case 2

-1

경우의 수 나누기

p is red p is black

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

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 30: 쉽게 배우는 알고리즘

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 31: 쉽게 배우는 알고리즘

Case 1-1

x-1

s

p

l r

x s

p

l r

각 경우에 따른 처리

삭제 완료 !

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

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 33: 쉽게 배우는 알고리즘

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 34: 쉽게 배우는 알고리즘

B-Trees

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

맞먹는다• 검색트리가 디스크에 저장되어 있다면 트리의 높이를

최소화하는 것이 유리하다• B- 트리는 다진검색트리가 균형을 유지하도록 하여 최악의 경우

디스크 접근 횟수를 줄인 것이다

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

T0

key0 key1 key2 … keyk-1

T1TkT2 T3

Tikeyi-1 < < keyi

다진검색트리

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

B-Tree

B-Tree 는 균형잡힌 다진검색트리로 다음의 성질을 만족한다

– 루트를 제외한 모든 노드는 k/2 ~ k 개의 키를 갖는다– 모든 리프 노드는 같은 깊이를 가진다

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

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

부모 노드의 페이지

B- 트리의 노드 구조

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

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

페이지 pi

키 keyi 를 가진 record

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

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

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

        if (r 에 오버플로우 발생 ) then clearOverflow(r); } clearOverflow(r) {       if (r 의 형제 노드 중 여유가 있는 노드가 있음 ) then {r 의 남는 키를 넘긴다 };      else {                 r 을 둘로 분할하고 가운데 키를 부모 노드로 넘긴다 ;                 if ( 부모 노드 p 에 오버플로우 발생 ) then clearOverflow(p);      } }

▷ t : 트리의 루트 노드 ▷ x : 삽입하고자 하는 키

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

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 41: 쉽게 배우는 알고리즘

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

오버플로우 !

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 42: 쉽게 배우는 알고리즘

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

오버플로우 !

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 43: 쉽게 배우는 알고리즘

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 44: 쉽게 배우는 알고리즘

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

오버플로우 !

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

오버플로우 !

(f)6 13 25 34 40

27 28 30 31 32 33

분할 !

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

B-Tree 에서의 삭제BTreeDelete(t, x, v) {         if (v 가 리프 노드 아님 ) then {          x 의 직후원소 y 를 가진 리프 노드를 찾는다 ;          x 와 y 를 맞바꾼다 ;         }          리프 노드에서 x 를 제거하고 이 리프 노드를 r 이라 한다 ;         if (r 에서 언더플로우 발생 ) then clearUnderflow(r); } clearUnderflow(r) {          if ( r 의 형제 노드 중 키를 하나 내놓을 수 있는 여분을 가진 노드가 있음 )          then { r 이 키를 넘겨받는다 ;}          else {                  r 의 형제 노드와 r 을 합병한다 ;                  if ( 부모 노드 p 에 언더플로우 발생 ) then clearUnderflow(p);          } }

▷ t : 트리의 루트 노드 ▷ x : 삭제하고자 하는 키 ▷ v : x 를 갖고 있는 노드

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

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 47: 쉽게 배우는 알고리즘

15

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

19 225 8

언더플로우 !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 48: 쉽게 배우는 알고리즘

15

1 2 5 6 10 16 18 24 25 2620 21

19 223 8

(d)

언더플로우 !

15

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

19 223

언더플로우 !

병합 !

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

3 15 19 22

병합 !

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

- 49 -

다차원 검색

• 검색키가 두 개 이상의 필드로 이루어진 검색• 3 개의 다차원 검색트리와 하나의 다차원 저

장 /검색 방법 소개– KD- 트리 – KDB- 트리– R- 트리– 그리드 파일

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

- 50 -

KD-Tree

• 각 레벨에서 필드를 번갈아가며 검색에 사용한다

− 한 level 에서는 하나의 필드만 사용한다 − 총 k 개의 필드를 사용하는 검색이라면 , k 개의 level

을 내려가면 검색에 사용하는 필드가 일치한다

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

aa00 aa1 1 … a… ak-1k-1

bb0 0 bb11 … b… bk-1k-1 cc0 0 cc11 … c… ck-1k-1

dd0 0 dd1 1 dd22 ……

rr0 0 rr1 1 … … rrk-1k-1

ee0 0 ee1 1 ee22 ……

…………

……

xx00 xx1 1 … x… xk-1k-1……

…………

레벨 레벨 00

레벨레벨 11

레벨 레벨 22

레벨 레벨 k-1k-1

레벨 레벨 kk

KD-Tree

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

50 50 5050

10 10 7070 8080 8585

25 25 2020 40 40 8585 70 70 8585

10 10 6060

AA

BB CC

DD EE FF

GG

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

A(A(5050,50),50)

B(10,B(10,7070))

C(80,C(80,8585))

D(D(2525,20),20)

E(E(4040,85),85)F(F(7070,85),85)

G(10,G(10,6060))

50 50 5050AA

10 10 7070BB 8080 8585CC

25 25 2020DD 40 40 8585EE

10 10 6060GG

70 70 8585FF

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

50 50 5050AA

55 55 7070CC3030 5555BB

65 65 2020EE 60 60 8585FF

61 61 6060GG

40 40 8585DD

7070 6060HH

75 75 5555JJ 70 70 7575KK

6565 8080II

7676 7878MM68 68 7272LL

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

50 50 5050AA

55 55 7070CC3030 5555BB

65 65 2020EE 60 60 8585FF

61 61 6060GG

40 40 8585DD

7070 6060HH

75 75 5555JJ 70 70 7575KK

6565 8080II

7676 7878MM68 68 7272LL

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

50 50 5050AA

55 55 7070CC3030 5555BB

65 65 2020EE 60 60 8585FF

61 61 6060GG

40 40 8585DD

7070 6060HH

75 75 5555JJ 70 70 7575KK

6565 8080II

7676 7878MM68 68 7272LL

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

50 50 5050AA

55 55 7070CC

3030 5555BB

65 65 2020EE 60 60 8585FF

61 61 6060GG

40 40 8585DD

7070 6060HH

75 75 5555JJ 70 70 7575KK

6565 8080II

7676 7878MM68 68 7272LL

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

55 55 7070CC

3030 5555BB

65 65 2020EE 60 60 8585FF

61 61 6060GG

40 40 8585DD

7070 6060HH

75 75 5555JJ 70 70 7575KK

6565 8080II

7676 7878MM68 68 7272LL

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

68 68 7272

55 55 7070CC

3030 5555BB

65 65 2020EE 60 60 8585FF

61 61 6060GG

40 40 8585DD

7070 6060HH

75 75 5555JJ 70 70 7575KK

6565 8080II

7676 7878MM

LL

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

68 68 7272

55 55 7070CC

3030 5555BB

65 65 2020EE 60 60 8585FF

61 61 6060GG

40 40 8585DD

7070 6060HH

75 75 5555JJ 70 70 7575KK

6565 8080II

7676 7878MM

LL

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

KDB-Tree

• KD-Tree 와 B-Tree 의 특성 결합– KD-Tree 의 특성

• 다차원 key

– B-Tree 의 특성• 디스크의 한 페이지가 한 노드와 일치• Balanced tree

• 각 레코드는 k 차원 공간에서 하나의 점에 해당– 자신이 속한 공간을 담당하는 색인 node들을 따라감

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

KDB-Tree 의 Node들

• Internal node 하나는 k 차원 공간에서 한 영역을 담당한다– 루트 노드는 k 차원 공간 전체를 커버– 이하의 노드들은 k 차원 공간의 부분 영역을 담당– 같은 level 에 있는 모든 노드들은 서로 겹치는 영역이 없다– 같은 level 에 있는 모든 노드들의 담당 영역을 합하면 k

차원 공간 전체가 됨

• 리프 노드는 데이터 페이지 정보를 저장

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

: : 제외된 영역제외된 영역

: : 점 점 (( 하나의 레코드 포인터하나의 레코드 포인터 ))

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

x 의 자식 노드에서 분할

(a) 분할 전

(b) 노드 x 분할 후

x

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

……

DiskDisk 의 한 페이지의 한 페이지

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

R-Tree

• B- 트리의 다차원 확장• 균형잡힌 검색트리• 모든 레코드는 리프 노드에서만 가리킴• 다차원 도형의 저장 가능

– 점 , 선 , 면 , 폐공간 , 각종 도형– MBR(Minimum Bounding Rectangle) 로 근사

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

이름 Key1 Key2

A 8 100

B 4 10

C 6 35

D 1 10

E 6 40

F 5 45

G 7 85

H 3 20

I 10 70

J 2 30

K 8 50

L 4 50

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

1 2 3 4 5 6 7 8 9 10 11 121 2 3 4 5 6 7 8 9 10 11 12

120120

110110

100100

9090

8080

7070

6060

5050

4040

3030

2020

1010

AA

BBDD

JJCC

HH

LLFF

EE

GG

KK

II

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

1 2 3 4 5 6 7 8 9 10 11 121 2 3 4 5 6 7 8 9 10 11 12

120120

110110

100100

9090

8080

7070

6060

5050

4040

3030

2020

1010

AA

BBDD

JJCC

HH

LLFF

EE

GG

KK

II

R1 R2

R3 R4 R5 R6 R7

E KA I C G B F J LD H

R1R1

R2R2

R4R4

R5R5

R3R3

R7R7

R6R6

x

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

1 2 3 4 5 6 7 8 9 10 11 121 2 3 4 5 6 7 8 9 10 11 12

120120

110110

100100

9090

8080

7070

6060

5050

4040

3030

2020

1010

AA

BBDD

JJCC

HH

LLFF

EE

GG

KK

II

R1 R2

R3 R4 R5 R6 R7

E KA I C G B F J LD H

R1R1

R2R2

R4R4

R5R5

R3R3

R7R7

R6R6 MM

NN

M

N

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

1 2 3 4 5 6 7 8 9 10 11 121 2 3 4 5 6 7 8 9 10 11 12

120120

110110

100100

9090

8080

7070

6060

5050

4040

3030

2020

1010

AA

BBDD

JJCC

HH

LLFF

EE

GG

KK

II

R1 R2

R3 R4 R5 R6 R7

E KA I C G J N L FD H B M

R1R1

R2R2

R4R4

R5R5

R3R3

R7R7

R6R6 MM

NN

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

1 2 3 4 5 6 7 8 9 10 11 121 2 3 4 5 6 7 8 9 10 11 12

120120

110110

100100

9090

8080

7070

6060

5050

4040

3030

2020

1010

AA

BBDD

JJCC

HH

LL

FF

EE

GG

KK

II

R1 R2

R3 R4 R5 R6 R7

E KA I C G J N L FD H B M P

R1R1

R2R2

R4R4

R5R5

R3R3

R7R7

R6R6 MM

NNOO

PP

O

Q

QQ

y

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

1 2 3 4 5 6 7 8 9 10 11 121 2 3 4 5 6 7 8 9 10 11 12

120120

110110

100100

9090

8080

7070

6060

5050

4040

3030

2020

1010

AA

CC

EE

GG

KK

II

R1 R2

R3 R4 R5 R6

J N L F OD H P Q

R1R1

R4R4

R5R5

R3R3

B M

R7 R8

BBDD

JJ

HH

LL

FF

R2R2

R7R7

R6R6 MM

NNOO

PPQQ

R8R8

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

100100

6060

00

00

a(10, 50)a(10, 50)

b(10, 10)b(10, 10) c(80, 10)c(80, 10)

e(60, 40)e(60, 40)d(85, 45)d(85, 45)f(30, 45)f(30, 45)

g(55, 5)g(55, 5)

h(80, 35)h(80, 35)

k(55, 45)k(55, 45)

i(65, 35)i(65, 35)

j(40, 15)j(40, 15)

l(25, 25)l(25, 25)

Grid File

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

100100

6060

00

00

a(10, 50)a(10, 50)

b(10, 10)b(10, 10) c(80, 10)c(80, 10)

P1P1

aa bb cc

3030

6060

00

a(10, 50)a(10, 50)

b(10, 10)b(10, 10) c(80, 10)c(80, 10)

a b

P1P1

d(85, 45)d(85, 45)c d

P2P2

3030

(a)

(b)

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

100100

6060

5050

00

00

a(10, 50)a(10, 50)

b(10, 10)b(10, 10) c(80, 10)c(80, 10)

a b

P1P1

d(85, 45)d(85, 45)c d

P2P2

e(60, 40)e(60, 40) ee

3030

6060

00

a(10, 50)a(10, 50)

b(10, 10)b(10, 10) c(80, 10)c(80, 10)

a b

P1P1

d(85, 45)d(85, 45)c d

P2P2

e(60, 40)e(60, 40) ee

ff

3030

f(30, 45)f(30, 45)

(c)

(d)

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

P2P2

de

gc

P3P3

100100

6060

5050

00

00

a(10, 50)a(10, 50)

b(10, 10)b(10, 10) c(80, 10)c(80, 10)

a b

P1P1

d(85, 45)d(85, 45)e(60, 40)e(60, 40)

ff

g(55, 5)g(55, 5)

P2P2

de

gc

P3P3

3030

f(30, 45)f(30, 45)

6060

00

a(10, 50)a(10, 50)

b(10, 10)b(10, 10) c(80, 10)c(80, 10)

a b

P1P1

d(85, 45)d(85, 45)e(60, 40)e(60, 40)

ff

g(55, 5)g(55, 5)

hh

3030

f(30, 45)f(30, 45)

h(80, 35)h(80, 35)

(e)

(f)

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

100100

6060

5050 7575

00

00

a(10, 50)a(10, 50)

b(10, 10)b(10, 10) c(80, 10)c(80, 10)

a b

P1P1

d(85, 45)d(85, 45)e(60, 40)e(60, 40)

ff

g(55, 5)g(55, 5) gc

P3P3

hd

P4P4

P2P2

ie

3030

f(30, 45)f(30, 45)

h(80, 35)h(80, 35)i(65, 35)i(65, 35)

6060

00

a(10, 50)a(10, 50)

b(10, 10)b(10, 10) c(80, 10)c(80, 10)

d(85, 45)d(85, 45)e(60, 40)e(60, 40)

g(55, 5)g(55, 5)

j(40, 15)j(40, 15)

jb

P5P5

P1P1

fa

hd

P4P4

P2P2

ie

gc

P3P3

3030

f(30, 45)f(30, 45)

h(80, 35)h(80, 35)i(65, 35)i(65, 35)

(g)

(h)

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

1001005050 757500

6060

00

a(10, 50)a(10, 50)

b(10, 10)b(10, 10) c(80, 10)c(80, 10)

d(85, 45)d(85, 45)e(60, 40)e(60, 40)

g(55, 5)g(55, 5)

j(40, 15)j(40, 15)

ljb

P5P5

P1P1

fa

hd

P4P4

P2P2

kie

gc

P3P3

3030

f(30, 45)f(30, 45)

h(80, 35)h(80, 35)i(65, 35)i(65, 35)

l(25, 25)l(25, 25)

k(55, 45)k(55, 45)

(i)

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

50 75

30

1 2

5 3

4

3

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

- 81 -

Thank you