쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/al/ch07.pdf · -22...

23
http://www.hanbit.co.kr 쉽게 배우는 알고리즘 7 . 상호 배타적 집합의 처리

Upload: others

Post on 13-Feb-2020

9 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

http://www.hanbit.co.kr

쉽게 배우는 알고리즘

7장. 상호 배타적 집합의 처리

Page 2: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

- 2 -

IT COOKBOOK

한빛아카데미㈜

7장. 상호 배타적 집합의 처리

얼마 전 나는 학술회의 준비차 다윈을 읽었다.

읽으면서 그 동안 읽지 않기를 잘했다는 생각이 들었다.

다른 때 다윈을 읽었더라면 여전히 이해할 수 없었을 것이기 때문이다.

... 결국, 읽을 준비가 되었을 때 읽어야 한다는 것이다.

-로저 생크

Page 3: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

- 3 -

IT COOKBOOK

한빛아카데미㈜

학습목표

• 연결 리스트를 이용한 상호배타적 집합의 처리 방법을 이해한다.

• 연결 리스트를 이용한 집합의 처리를 위한 연산들의 수행시간을 분석할 수 있도록 한다.

• 트리를 이용한 상호배타적 집합의 처리 방법을 이해한다.

• 트리를 이용한 집합의 처리를 위한 연산들의수행시간을 기본적인 수준에서 분석할 수 있도록 한다.

Page 4: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 4 -

Set의처리

• 이 장에서는 disjoint set(배타적집합) 만을대상으로 한다

• 그러므로 교집합은 없다

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

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

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

집합의 합집합

• Linked list를이용하는 방법과 tree를이용하는방법이 있다

Page 5: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 5 -

Linked List를이용한처리

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

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

Page 6: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 6 -

a tail

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

Page 7: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 7 -

a b c

d e f g h

tail

tail

Linked List로된두집합

Page 8: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 8 -

a b c

d e f g h

tail

tail

d e f g h

tail

a b c

(a)

(b)

합집합을만드는예

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

Page 9: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 9 -

Weight을고려한 Union

• Linked list로된 두 집합을 합할 때 작은 집합을 큰집합의 뒤에 붙인다– 대표원소를가리키는포인터갱신작업을최소화하기위한

Page 10: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 10 -

수행시간

[정리 1]

Linked list를이용해 표현되는 배타적 집합들을만들면서 Weight을고려한 Union을 사용할 때,

m번의 Make-Set, Union, Find-Set 중 n번이 Make-

Set이라면 이들의 총 수행시간은 O(m + n log

n)이다.

Page 11: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 11 -

Tree를이용한처리

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

– child가 parent를가리킨다

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

Page 12: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 12 -

c

a e

hb

d f g

Tree를이용한집합표현의예

Page 13: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 13 -

c

a

hb

e

d f g

c

a

hb e

d f g

두집합의합집합

+

=

Page 14: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 14 -

a

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

Page 15: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 15 -

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 16: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 16 -

연산의효율을높이는방법

• Rank를 이용한 Union

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

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

• Path compression

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

Page 17: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 17 -

랭크를이용한 Union의예

c

a

e

hb d f

00

0

1

1 0

2c

a

ehb

d f

000

11 0

2

+ =

Page 18: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 18 -

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

c

a

e

hb d f

01

0

2

1 0

2c

a

ehb

d f

010

21 0

3

+ =

g0

g0

Page 19: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 19 -

c

a e

hb

d f g

c

a

ehb

d f

g

Find-Set(g)

Path Compression의예

Page 20: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 20 -

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 21: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 21 -

Find-Set(x)

{

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

return p[x];

}

Path Compression을이용한 Find-Set

Page 22: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

한빛아카데미㈜- 22 -

수행시간

[정리 5]

Tree를 이용해 표현되는 Exclusive set에서랭크를 이용한 Union과 경로압축을 이용한Find-Set을 동시에 사용하면, m번의 Make-Set,

Union, Find-Set 중 n번이 Make-Set일 때 이들의수행시간은 O(m log*n)이다.

k

log*n = min {k : log log … logn ≤ 1}

사실상 linear time임

Page 23: 쉽게 배우는 알고리즘 강의노트 - jbnu.ac.krnlp.jbnu.ac.kr/AL/ch07.pdf · -22 한빛아카데미㈜ 수행시간 [정리5] Tree를이용해표현되는Exclusive set에서

- 23 -

IT COOKBOOK

한빛아카데미㈜

Thank you