01. 트리기초다지기 -...

56
01. 트리 기초 다지기 02. 이진 트리 03. 수식 트리 04. 분리 집합 4. 트리

Transcript of 01. 트리기초다지기 -...

Page 1: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

01. 트리기초다지기02. 이진트리03. 수식트리04. 분리집합

4장. 트리

Page 2: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

트리 : 나무를닮은자료구조.

뿌리, 가지, 잎으로이루어져있다.

운영체제의파일시스템, DOM(Document Object Model), 검색엔진, 데이터베이스, 컴파일러등활용분야가다양한자료구조.

트리(Tree) (1)

Page 3: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

트리 - 계층적인구조를나타내는자료구조

트리는부모-자식관계의노드들로이루어진다.

응용분야: 계층적인조직표현

파일시스템

인공지능에서의결정트리

트리(Tree) (2)

대표이사

총무부 생산부영업부

전산팀 구매팀 경리팀 생산1팀 생산2팀

Page 4: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

트리(Tree) (3)

Page 5: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

트리(Tree) (4)

Page 6: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

트리(Tree) (5)

Page 7: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

부모와자식, 그리고형제 B는C와 D의부모(Parent)이고, C와 D는 B의자식(Children)

C와 D는형제(Sibling)

트리(Tree) (6)

A

B G I

DC J

FE K

H

루트노드

줄기노드

잎(터미널) 노드

Page 8: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

트리의구조

트리(Tree) (7)

뿌리(Root)

가지(Branch) 가지(Branch) 가지(Branch)

가지(Branch)가지(Branch) 가지(Branch)

잎(Leaf)잎(Leaf) 잎(Leaf)

잎(Leaf)

Page 9: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

경로(Path) “B, D, F”는 B에서 F까지의경로

트리(Tree) (8)

A

B G I

DC J

FE K

H

Page 10: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

깊이(Depth) 루트노드에서해당노드까지의경로의길이

레벨(Level) - 같은깊이를가지는노드의집합

높이(Height) - “가장깊은곳”에있는잎노드까지의깊이

트리(Tree) (9)

A

B G I

DC J

FE K

H

깊이 0

깊이 1

깊이 2

깊이 3

Page 11: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

차수(Degree) 자식노드의개수

트리의차수는트리내에있는노드중에서자식노드가가장많은노드의차수를말함

트리(Tree) (10)

A

B G I

DC J

FE K

H

차수 : 3

차수 : 1차수 : 2

Page 12: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

노드(node): 트리의 구성요소

루트(root): 부모가 없는 노드(A)

서브트리(subtree): 하나의 노드와그 노드들의 자손들로 이루어진 트리

트리(Tree) (11)

A

B C D

E F G H I J

단말노드(terminal node): 자식이 없는 노드(A,B,C,D)

비단말노드: 적어도 하나의 자식을 가지는 노드(E,F,G,H,I,J)

자식, 부모, 형제, 조상, 자손 노드: 인간과동일

레벨(level): 트리의 각층의 번호

높이(height): 트리의 최대 레벨(3)

차수(degree): 노드가 가지고 있는 자식 노드의 개수

Page 13: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

트리의표현

중첩된괄호

중첩된집합

들여쓰기

트리(Tree) 표현 (1)

A

B G I

DC J

FE K

H

( A ( B ( C ( D ( E ) ( F ) ) ) ( G ( H ) ) ( I ( J ( K ) ) ) )

A

B G I

DC J

FE K

H

CE

H

K

A

B

F

D

G

I J

A

B G I

DC J

FE K

H

A

B

C

D

E

F

G

H

I

J

K

Page 14: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

노드표현하기 N-Link 표현법

왼쪽자식-오른쪽형제(LCRS)표현법

트리(Tree) 표현 (2)

DATA

1 ...2 n

DATA

1 ...2 n

DATA

1 ...2 n

DATA

1 ...2 n

DATA

Left Child

Right Sibling

DATA

Left Child

Right Sibling

DATA

Left Child

Right Sibling

DATA

Left Child

Right Sibling

DATA

Left Child

Right Sibling

DATA

Left Child

Right Sibling

DATA

Left Child

Right Sibling

Page 15: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

모든노드가최대 “2 개”의자식을가질수있는트리

이진트리(Binary Tree) (1)

Page 16: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

이진트리(binary tree) 모든노드가 2개의서브트리를가지고있는트리

서브트리는공집합일수있다.

이진트리의노드에는최대 2개까지의자식노드가존재

모든노드의차수가 2 이하가된다구현하기가편리함

이진트리에는서브트리간의순서가존재

이진트리(Binary Tree) (2)

Page 17: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

이진 트리의 성질 노드의 개수가 n개이면 간선의 개수는 n-1

높이가 h인 이진트리의 경우, 최소 h개의 노드를 가지며 최대 2h-1개의 노드를 가진다.

이진트리(Binary Tree) (3)

Page 18: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

이진 트리의 성질 n개의노드를가지는이진트리의높이는최대 n이거나최소

이진트리(Binary Tree) (4)

Page 19: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

포화이진트리(Full Binary Tree) 모든노드가대대손손이자식을둘씩가지고있는이진트리

완전이진트리(Complete Binary Tree) 잎노드들이트리의왼쪽부터차곡차곡채워진트리

이진트리(Binary Tree) (5)

A

B

C D F G

E

A

B

C D

E

A

B

C

E

A

B

C D F

E

Page 20: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

높이균형트리(Height Balanced Tree) 루트노드를기준으로왼쪽하위트리와오른쪽하위트리의높이

가 1 이상차이나지않는이진트리

이진트리(Binary Tree) (6)

A

B

F G

E

C

H I

D

J

이 : 2 이 : 1

Page 21: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

완전높이균형트리(Completely Height Balanced Tree) 루트노드를기준으로왼쪽하위트리와오른쪽하위트리의높이가

같은이진트리

이진트리(Binary Tree) (7)

A

B

G

E

C

H I

D

J

이 : 2 이 : 2

K

F

Page 22: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

이진트리의분류

이진트리(Binary Tree) (8)

Page 23: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

배열표현법 모든이진트리를포화이진

트리라고가정

각노드에번호를붙여서그번호를배열의인덱스로삼아노드의데이터를배열에저장하는방법

링크표현법 포인터를이용하여부모노

드가자식노드를가리키게하는방법

이진트리의표현

Page 24: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

순회(traversal)

트리의 노드들을 체계적으로 방문하는 것

3가지의 기본적인 순회방법 전위순회(preorder traversal) : VLR

자손 노드보다 루트 노드를 먼저 방문한다.

중위순회(inorder traversal) : LVR

왼쪽 자손, 루트, 오른쪽 자손 순으로 방문한다.

후위순회(postorder traversal) : LRV

루트 노드보다 자손을 먼저 방문한다.

이진트리의순회 (1)

Page 25: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

전위순회(Preorder Traversal)

이진트리의순회 (2)

A

B

C D F G

E

1

2

3 4

5

6 7

Page 26: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

이진트리의순회 (3)

전위순회

루트를먼저방문하는순회방법

응용분야: (예) 구조화된문서출력

// 전위 순회

preorder( TreeNode *root ){

if ( root ){

printf("%d", root->data ); // 노드 방문

preorder( root->left );// 왼쪽서브트리 순회

preorder( root->right );// 오른쪽서브트리 순회

}

}

자료구조

1. 자료구조와 알고리즘이란? 2. 기초적인 자료구조 3. 고급자료구조

1.1 자료구조 1.2 알고리즘 2.1 스택 2.2 큐 2.3 리스트 3.1 트리 3.2 그래프

1

2 5

10

3

4 6 7 8

9

11

Page 27: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

중위순회(Inorder Traversal)

이진트리의순회 (4)

A

B

C D F G

E

4

2

1 3

6

5 7

Page 28: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

이진트리의순회 (5)

중위순회

왼쪽서브트리->루트->오른쪽서브트리순으로방문

+

* /

a b c d

1

2

3

5

6

7

8

// 중위 순회

inorder( TreeNode *root ){

if ( root ){

inorder( root->left );// 왼쪽서브트리 순회

printf("%d", root->data ); // 노드 방문

inorder( root->right );// 오른쪽서브트리 순회

}

}

Page 29: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

후위순회(Postorder Traversal)

이진트리의순회 (6)

A

B

C D F G

E

7

3

1 2

6

4 5

Page 30: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

이진트리의순회 (7)

후위순회

루트->왼쪽서브트리->오른쪽서브트리순으로방문

(예) 디렉토리용량계산// 후위 순회

postorder( TreeNode *root ){

if ( root ){

postorder( root->left );// 왼쪽서브트리 순회

postorder( root->right );// 오른쪽서브트리순회

printf("%d", root->data ); // 노드 방문

}

}

1

2 3

4

5

Page 31: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

수식을표현하는이진트리

수식이진트리(Expression Binary Tree)라고부르기도함.

수식트리 (1)

+

*

1 2 7 8

- 잎

이 가지

Page 32: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

수식트리: 산술식을 트리형태로 표현한 것 비단말노드: 연산자(operator)

단말노드: 피연산자(operand)

예)

수식트리 (2)

수식 a + b a - (b × c) (a < b) or (c < d)

전위순회 + a b - a × b c or < a b < c d

중위순회 a + b a - b × c a < b or c < d

후위순회 a b + a b c × - a b < c d < or

Page 33: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

수식트리는가장아래에있는하위수식트리(즉, 잎노드)로부터수또는계산결과를병합해올라가는과정을반복하여계산을수행

수식트리 (3)

+

*

1 2 7 8

-

+

1 * 2 7 - 8

Page 34: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

수식트리계산 - 후위순회를사용 서브트리의값을순환

호출로계산

비단말노드를방문할때양쪽서브트리의값을저장된연산자를이용하여계산한다

수식트리 (4)

evaluate(exp)

if exp = NULL

then return 0;

else x←evaluate(exp->left);

y←evaluate(exp->right);

op←exp->data;

return (x op y);

Page 35: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

수식트리의구축 중위표기식보다는후위표기식을이용해트리를구축하는것이

훨씬수월

수식트리 (5)

1. 수식을뒤에서부터앞쪽으로읽어나간다.

2. 수식에서제일마지막에있는토큰은루트노드가된다(후위표기식에서가장마지막에있는토큰은항상연산자이다.).

3. 수식에서읽어낸토큰이연산자인경우에는가지노드가되며, 이토큰다음에따라오는두개의토큰은각각오른쪽자식노드와왼쪽자식노드가된다. 단, 다음토큰에도연속해서연산자인경우에는이토큰으로부터만들어지는하위트리가완성된이후에읽어낸토큰이왼쪽자식노드가된다.

4. 수식에서읽어낸토큰이숫자이면이노드는잎노드이다.

Page 36: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

수식트리의구축예 “1 2 * 7 8 - +”로부터수식트리를만들어보자.

수식트리 (6)

+

1 2 * 7 8 - + 1 2 * 7 8 - +

+

-

1 2 * 7 8 - +

+

7 8

-

1 2 * 7 8 - +

7 8

-*

+

1 2 * 7 8 - +

7 8

-

+

1 2

*

Page 37: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

집합 : “원소의모임”

분리집합(Disjoint Set) 서로공통된원소를갖지않는집합(두개이상의집합을일컬을때만사용할수있

는개념)

분리집합 (1)

1

2 34

56

7

A

C

8

B

1

2 3

45

6

A B1

2 3

45

6

A B

7

Page 38: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

분리집합 (2)

지원연산 Make-Set(x): 원소 x로만이루어진집합을만든다

Find-Set(x): 원소 x를가지고있는집합을알아낸다

Union(x, y): 원소 x를가진집합과원소 y를가진

집합의합집합

구현 Linked list를이용하는방법

Tree를이용하는방법

Page 39: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

Linked List를 이용한 처리(1)

연결리스트를이용한구현

같은집합의원소들은하나의 linked list로관리한다

Linked list의맨앞의원소를집합의대표원소로삼는다

Page 40: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

a tail

하나의원소로이루어진집합

tail 포인터- 집합연결리스트에서마지막노드에대한포인터- 합집합연산을용이하게함

Page 41: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

a b c

d e f g h

tail

tail

Linked List로된두집합

Page 42: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

a b c

d e f g h

tail

tail

d e f g h

tail

a b c

(a)

(b)

합집합을만드는예

파란색은변동이생긴간선들

Page 43: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

Linked List를 이용한 처리(2)

Weight을고려한Union

Linked list로된두집합을합할때작은집합을큰집합의뒤에붙인다

대표원소를가리키는포인터갱신작업을최소화

Page 44: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

Tree를 이용한 처리 (1)

같은집합의원소들은하나의 tree로관리한다

child가 parent를가리킨다

tree의 root를집합의대표원소로삼는다

Page 45: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

트리를이용한분리집합의표현 루트노드는집합을대표

루트노드자신을포함한트리내의모든노드들은그집합에소속

Tree를 이용한 처리 (2)

5

2 3 4 6 7

1

Page 46: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

c

a e

hb

d f g

Tree를이용한집합표현의예

Page 47: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

합집합(Union)

탐색(Find) 집합탐색연산은집합에서원소를찾는것이아니라, 원소가속해

있는집합을찾는연산

즉, 이원소가속해있는트리의루트노드를찾으면된다.

Tree를 이용한 처리 (2)

5

2 3 4 6 7

12 3 4

6 7

1

5

Page 48: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

c

a

hb

e

d f g

c

a

hb e

d f g

두집합의합집합

+

=

Page 49: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

a

하나의원소로이루어진집합

Page 50: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

Tree를 이용한 집합 처리 알고리즘

Make-Set(x) ▷ 노드 x를 유일한 원소로 하는 집합을 만든다. {

p[x] ← x ;

}

Union(x, y) ▷노드 x가속한집합과노드 y가속한집합을합친다{

p[Find-Set(y)] ← Find-Set(x) ;

}

Find-Set(x) ▷노드 x가속한집합을알아낸다.

노드 x가속한트리의루트노드를리턴한다.

{

if (x = p[x])

then return x ;

else return Find-Set(p[x]) ;

}

Page 51: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

연산의 효율을 높이는 방법

Rank를이용한 Union

각노드는자신을루트로하는 subtree의높이를랭크Rank라는이름으로저장한다

두집합을합칠때 rank가낮은집합을 rank가높은집합에붙인다

Path compression

Find-Set을행하는과정에서만나는모든노드들이직접 root를가리키도록포인터를바꾸어준다

Page 52: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

랭크를 이용한 Union의 예

c

a

e

hb d f

00

0

1

1 0

2c

a

ehb

d f

000

11 0

2

+ =

Page 53: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

랭크를 이용한 Union에서 랭크가 증가하는 예

c

a

e

hb d f

01

0

2

1 0

2c

a

ehb

d f

010

21 0

3

+ =

g0

g0

Page 54: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

c

a e

hb

d f g

c

a

ehb

d f

g

Find-Set(g)

Path Compression의예

Page 55: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

Make-Set(x){

p[x] ← x; rank[x] ← 0;

}

Union(x, y) {

x' ← Find-Set(x); y' ← Find-Set(y); if (rank[x'] > rank[y'])

then p[y'] ← x' ; else {

p[x'] ← y' ; if (rank[x'] = rank[y']) then rank[y'] ← rank[y'] + 1;

} }

Rank를 이용한 Union과 Make-Set

Page 56: 01. 트리기초다지기 - silla.ac.krmclab.silla.ac.kr/lecture/201601/algorithm/ag_lecture_04... · 2016-03-23 · 트리- 계층적인구조를나 타내는자료구조 트리는부모-자식관계의노

Find-Set(x) {

if (p[x] ≠ x) then p[x] ← Find-Set(p[x]); return p[x];

}

Path Compression을 이용한 Find-Set