๐Ÿ“š ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘๊ฐ„๊ณ ์‚ฌ ์ •๋ฆฌ

๐Ÿ“š ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ค‘๊ฐ„๊ณ ์‚ฌ ์ •๋ฆฌ

์ค‘๊ฐ„๊ณ ์‚ฌ ์ค€๋น„

1

directed graph๋Š” n๊ฐœ์˜ vertex๋ฅผ ๊ฐ€์งˆ ๋•Œ n(n-1)๊ฐœ์˜ edge๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋ฐฉํ–ฅ์„ฑ์ด ์—†์œผ๋‹ˆ ๋ชจ๋“  vertex๊ฐ€ ์ž์‹ ์„ ใ…ˆ[์™ธํ•œ ๋‹ค๋ฅธ vertex๋กœ ๊ฐ€๋Š” edge๋ฅผ ๋ชจ๋‘ count

undirected graph๋Š” n๊ฐœ์˜ vertex๋ฅผ ๊ฐ–๋Š” ๊ทธ๋ž˜ํ”„๋Š” ์ตœ๋Œ€ n(n-1)/2๊ฐœ์˜ edge๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค. ๋ฐฉํ–ฅ์„ฑ์ด ์—†๊ธฐ๋•Œ๋ฌธ์— ์ค‘๋ณต๋˜๋Š” ๊ฑฐ ๊ณ ๋ คํ•ด์„œ 2๋กœ๋‚˜๋ˆ ์คŒ.

์„œ๋ธŒ๊ทธ๋ž˜ํ”„ : ํ•œ ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•ด ๊ทธ๋ž˜ํ”„์˜ ๋ชจ๋“  vertex์™€ ๊ทธ๋ฅผ ์ด์„ ์ˆ˜ ์žˆ๋Š” ์ˆ˜์ค€์˜ edge๋“ค์„ ๊ฐ€์ง€๊ณ ์žˆ๋Š” ๋‹ค๋ฅธ ๊ทธ๋ž˜ํ”„

๊ฒฝ๋กœ : edge๋ฅผ ํ†ตํ•ด ์—ฐ๊ฒฐ ๋˜๋Š” vertex์˜ ์—ฐ์†

์‚ฌ์ดํด : ๊ฒฝ๋กœ์˜ ์‹œ์ž‘๊ณผ ๋์ด ๊ฐ™์œผ๋ฉด ์‚ฌ์ดํด

acyclic : ์‚ฌ์ดํด์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„

์‹ฌํ”Œ : ๊ฒฝ๋กœ์ƒ์— ๋ฐฉ๋ฌธํ–ˆ๋˜๊ณณ์„ ์žฌ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์œผ๋ฉด ์‹ฌํ”Œ

๊ฐ•ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋œ ์š”์†Œ : ์˜ค๊ฐ€๋Š”๊ฒŒ ๋ชจ๋‘ ์žˆ์œผ๋ฉด ๊ฐ•ํ•˜๊ฒŒ ์—ฐ๊ฒฐ๋œ๊ฒƒ

degree : indegree ๋“ค์–ด์˜ค๋Š” edge ๊ฐœ์ˆ˜, outdegree ๋‚˜๊ฐ€๋Š” edge ๊ฐœ์ˆ˜ ๋””๊ทธ๋ฆฌ ๋‹ค ๋”ํ•ด์„œ ๋ฐ˜๋‚˜๋ˆ„๋ฉด edge์ˆ˜๊ฐ€ ๋œ๋‹ค. ์™œ๋ƒ indegree๋Š” ๊ณง outdegree์ด๊ณ  ๊ทธ ์—ญ๋„ ์„ฑ๋ฆฝํ•˜๊ธฐ ๋•Œ๋ฌธ์—..

matrix graph์˜ ๊ณต๊ฐ„ ๋ณต์žก๋„๋Š” O(n^2), ์‹œ๊ฐ„๋ณต๋‹ต๋„๋Š” O(n^2)

2-1

find์˜ ์‹œ๊ฐ„๋ณต์žก๋„๊ฐ€ O(n^2)์ž„. ๋”ฐ๋ผ์„œ ์ตœ์ ํ™”ํ•ด ์ค„ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

weighting rule : unionํ•ด์ค„ ๋–„ ํ•ฉ์น˜๋Š” ๋‘ set์˜ ํฌ๊ธฐ๋ฅผ ๋น„๊ตํ•ด์„œ union ํ•ด์ฃผ์ž. ํ™•๋ฅ ์ ์œผ๋กœ ํฌ๊ธฐ๊ฐ€ ํฐ set๊ฐ€ ๊ธธ์ด๊ฐ€ ๊ธธ ๊ฐ€๋Šฅ์„ฑ์ด ํผ. ๊ธธ์ด๊ฐ€ ๊ธด set์— ์งง์€ set์„ unionํ•ด์ฃผ๋Š”ํŽธ์ด ์ข‹๋‹ค

    public void union(int aMemberA, int aMemberB){
    	int rootOfA = this.find(aMemberA);
    	int rootOfB = this.find(aMemberB);
    	int sizeOfA = this.sizeOfSetFor(rootOfA);
    	int sizeOfB = this.sizeOfSetFor(rootOfB);
    	if(sizeOfA < sizeOfB){
    		this.setParentOf(rootOfA, rootOfB);
    		this.setSizeOf(rootOfB, sizeOfA + sizeOfB);
    	}
    	else{
    		this.setParentOf(rootOfB, rootOfA);
    		this.setSizeOf(rootOfA, sizeOfA + sizeOfB);
    	}
    }

collapsing rule : find์‹œ์— ์ฐพ์•„์ง€๋Š” ๋ชจ๋“  vertex์˜ ๋ถ€๋ชจ๋ฅผ root๋กœ ๋งŒ๋“ค์–ด์„œ ๋†’์ด๋ฅผ ๋‚ฎ์ถ”๋Š”๊ฒƒ.

    public int find(int aMember){
    	int rootCandidate = aMember;
    	while(rootCandidate < this.graph().numberOfVertices() && this.parentDoesExist(aMember)){
    		rootCandidate = this.parentOf(rootCandidate);
    	}
    	int root = rootCandidate;
    	int child = aMember;
    	int parent = this.parentOf(child);
    	if(parent >= 0){
    		while(parent != root){
    			this.setParentOf(child, root);
    			child = parent;
    			parent = parentOf(child);
    		}
    	}
    	return root;
    }

2-2

AdjacencyList์˜ ๋ชจ๋“  Edge๋ฅผ ํ™•์ธํ•˜๊ธฐ ์‹œ๊ฐ„๋ณต์žก๋„ = O(n + e) โ†’ ์ƒ์ˆ˜ ๋ณต์žก๋„ Adjacency List ๊ณต๊ฐ„๋ณต์žก๋„ O(n+e), ์‹œ๊ฐ„ ๋ณต์žก๋„ O(n+e)

๋ชจ๋“  vertex์˜ degree๋“ค์„ ํ™•์ธํ•œ๋‹ค.

DFS : Depth First Search ๊นŠ์ด ์šฐ์„  ํƒ์ƒ‰ : ๋ฐฉ๊ธˆ ํ™•์ธํ•œ vertex ์ค‘ ๋ฐฉ๋ฌธ ์•ˆํ•œ ๋‹ค๋ฅธ vertex๋กœ ์ด๋™, ๋ชจ๋‘ ๋ฐฉ๋ฌธํ–ˆ๋‹ค๋ฉด ์™”๋˜๊ธธ๋กœ ๋Œ์•„๊ฐ adjacencyList์˜ ๊ฒฝ์šฐ O(e), matrix์˜ ๊ฒฝ์šฐ O(n^2)

BFS : Breadth First Search ๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰ : ์‹œ์ž‘ vertex๋ฅผ ํ์— ๋„ฃ๋Š”๋‹ค. ํ๋ฅผ pop์‹œํ‚ค๊ณ  pop๋œ vertex์˜ ์ธ์ ‘ vertex๋ฅผ ๋ชจ๋‘ add, pop โ†’ ์ธ์ ‘๋ชจ๋‘add, popโ†’์ธ์ ‘ add๋ฐ˜๋ณตํ•ด์„œ ๊ฒฐ๊ณผ์ ์œผ๋กœ ํ์— ๋‚จ์€ ์›์†Œ๊ฐ€ ์—†์„ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค. ๊ทธ๋Ÿผ ๋ชจ๋“  vertex๋ฅผ ์ˆœํšŒํ•œ ๊ฒƒ.

์ƒ‰์น ํ•˜๊ธฐ์—์„œ๋Š” BFS๋ฅผ ์ด์šฉ, ํ™•์žฅ ํŠธ๋ฆฌ์—์„œ๋Š” DFS์‚ฌ์šฉ

3

spanning tree, minimum cost spanning tree, greedy algorithm

spanning tree : ๋ชจ๋“  vertex๊ฐ€ ํ•˜๋‚˜์˜ set์— ์œ„์น˜ํ•œ (component ํ•˜๋‚˜๋กœ ์ด๋ค„์ง„) ํŠธ๋ฆฌ

์–ด๋– ํ•œ ์ปดํฌ๋„ŒํŠธ์˜ ์ŠคํŒจ๋‹ํŠธ๋ฆฌ๋Š” ๊ทธ ์ปดํฌ๋„ŒํŠธ(ํŠธ๋ฆฌ)์˜ ์„œ๋ธŒํŠธ๋ฆฌ์ด๋‹ค.

DFS๋ž‘ BFS๋ฅผ ํ†ตํ•ด ์ฐพ์•„์ง€๋Š”๊ฒŒ ๊ฒฐ๋ก ์ ์œผ๋กœ ํ™•์žฅ ํŠธ๋ฆฌ๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Œ.

์ฆ‰ ํ•œ๋ฒˆ ๊ฐ„๊ณณ์€ ๋‹ค์‹œ ์•ˆ๊ฐ€๋Š”, ๊ทธ๋ž˜ํ”„์—์„œ ํŠธ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด๋‚ธ๊ฒŒ ์ŠคํŒจ๋‹ํŠธ๋ฆฌ. ๊ทผ๋ฐ ๊ทธ ๊ณผ์ •์„ DFS๋กœํ•˜๋ƒ BFS๋กœํ•˜๋ƒ์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋Š” ๊ฒƒ. ๊ทธ๋ ‡๊ฒŒ ์ฐพ์•„์ ธ์„œ ๋‚จ๊ฒŒ๋œ edge๋ฅผ tree edge, ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ฒŒ๋œ edge๋ฅผ back edge ๋ผ๊ณ  ํ•œ๋‹ค. ๋‹น์—ฐ tree edge + back edge๋Š” ๊ธฐ์กด graph์˜ edge๊ฐ€ ๋œ๋‹ค.

back edge๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋Š” ๊ทธ edge๋ฅผ ์“ฐ๋ฉด ๋ฐฉ๋ฌธํ–ˆ๋˜ vertex๋ฅผ ์žฌ ๋ฐฉ๋ฌธ ํ•˜๊ฒŒ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‹ค๋ฅธ ๋ง๋กœํ•˜๋ฉด ํ•ด๋‹น edge๋Š” cycle์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” edge๋ผ๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค.

minimum cost spanning tree : ์ตœ์†Œ ๋น„์šฉ ํ™•์žฅ ํŠธ๋ฆฌ : ์ตœ์†Œ์˜ ๋น„์šฉ์„ ๊ฐ–๋Š” ๊ฒฝ๋กœ๋กœ ์ด๋ค„์ง„ ํ™•์žฅ ํŠธ๋ฆฌโ† ์–ด๋–ป๊ฒŒ ์ฐพ์„๊ฒƒ์ธ๊ฐ€? kruskal , primโ€™s sollinโ€™s ๊ฐ€ ์žˆ์ง€๋งŒ kruskal์„ ๋‹ค๋ฃฌ๋‹ค.

์ฃผ์–ด์ง„ ์ƒํ™ฉ์—์„œ ๊ฐ€์žฅ ์ ์€ cost๋ฅผ ๊ฐ€์ง„ edge๋ฅผ ํƒ€๊ณ  ๊ฐ€๋ฉฐ spanning tree๋ฅผ ๋งŒ๋“ ๋‹ค. ์ฆ‰ ์ฃผ์–ด์ง„ ์ƒํ™ฉ์—์„œ ์ตœ์ ์˜ ์„ ํƒ์„ ํ•˜๋Š” ๊ทธ๋ฆฌ๋”” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๊ณ ๋‚˜๋ฉด ๋ชจ๋“  edge์˜ cost ํ•ฉ์ด ์ตœ์†Œ๋ผ๋Š”๊ฑด ๋ณด์žฅํ•  ์ˆ˜ ์—†์ง€๋งŒ, ์ตœ์†Œํ•œ ๊ทธ ์ˆœ๊ฐ„์ˆœ๊ฐ„์—๋Š” ์ตœ์„ ์˜ ์„ ํƒ์„ ํ–ˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

kruskal algorithm : ๊ฐ vertex๋Š” ํ•œ๋ฒˆ ์”ฉ ๋ฐฉ๋ฌธํ•œ๋‹ค. n๊ฐœ vertex๊ฐ€ ์žˆ์œผ๋ฉด n-1๊ฐœ์˜ edge๋งŒ์„ ๋ฝ‘๋Š”๋‹ค. ์ผ๋‹จ ๋ชจ๋“  edge๋ฅผ cost ์ ์€์ˆœ์œผ๋กœ ์ตœ์†Œ์šฐ์„ ์ˆœ์œ„ ํ์— ๋„ฃ๊ณ  ํ์—์„œ ๋นผ๋ฉด์„œ spanning tree๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š” ์„ ์—์„œ๋งŒ ๋ฐ›์•„์ฃผ๋ฉด ๋จ. โ† ์‚ฌ์ดํด์„ ๋งŒ๋“ค์ง€ ์•Š๋„๋ก

time complexity of Kruskal Algorithm = O(e log e)

inplement : ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ƒ์†๋ฐ›์„ ๋•Œ โ† ์•ˆ์— ์žˆ๋Š”๊ฑธ ํ•„์ˆ˜์ ์œผ๋กœ ์ •์˜ํ•ด์ค˜์•ผํ•จ ์ธํ„ฐํŽ˜์ด์Šค์—์„œ๋Š” ๊ธฐ๋Šฅ์„ ์ •์˜ํ•˜์ง€ ์•Š๋Š”๋‹ค. extend : ํด๋ž˜์Šค(์ถ”์ƒ ํด๋ž˜์Šค ํฌํ•จ)๋ฅผ ์ƒ์†๋ฐ›์„ ๋•Œ โ† ๊ทธ๋ƒฅ ์“ธ๊ฑฐ๋Š” ๊ทธ๋ƒฅ ์“ฐ๋ฉด๋˜๊ณ  ์ˆ˜์ •ํ•˜๊ณ ์‹ถ์œผ๋ฉด ์˜ค๋ฒ„๋ผ์ด๋“œํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

ํด๋ž˜์Šค : ๊ฐ€์ ธ๋‹ค ์“ฐ๋˜์ง€ ์˜ค๋ฒ„๋ผ์ด๋“œํ•˜๋˜์ง€ ์•„๋ฌดํŠผ ์“ฐ๋ฉด๋œ๋‹ค! ์ธํ„ฐํŽ˜์ด์Šค : ์„ ์–ธ๋œ ํ•จ์ˆ˜๋ฅผ ๋ฌด์กฐ๊ฑด ๊ตฌํ˜„ํ•ด์•ผํ•ด! ์ถ”์ƒํด๋ž˜์Šค : ๊ฐ€์ ธ๋‹ค ์“ฐ๋˜์ง€ ์˜ค๋ฒ„๋ผ์ด๋“œ ํ•˜๋˜์ง€! ๋‹จ, abstract์ธ๊ฑด ๋ฌด์กฐ๊ฑด ๊ตฌํ˜„ํ•ด์•ผํ•ด!

4

shortest path : ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

Weighted Directed Edge๋กœ ๊ตฌ์„ฑ์ด ๋œ ๊ทธ๋ž˜ํ”„์—์„œ ์‹œ์ž‘์ ์ด ์ฃผ์–ด์งˆ ๋•Œ ์ตœ๋‹จ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š”๋‹ค. ๋‹ค์Œ vertex๊ฐ€ ์ •ํ•ด์กŒ์„๋•Œ ์ตœ๋‹จ๊ฒฝ๋กœ๋ฅผ ๋ชจ๋‘ ์—…๋ฐ์ดํŠธํ•ด์„œ ๊ทธ ์ค‘ ์ตœ๊ณ ์˜ ์„ ํƒ์„ ํ•œ๋‹ค. ์ฆ‰ ๋งค ์ˆœ๊ฐ„ ์ตœ์ƒ์˜ ์„ ํƒ์„ ํ•˜๋Š” ๊ทธ๋ฆฌ๋””์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ผ์ข…์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์Œ์˜ ๋น„์šฉ์„ ๊ฐ–๋Š” edge๋Š” ์žˆ์„ ์ˆ˜ ์—†๋‹ค. ๊ทธ๋ ‡๊ฒŒ๋˜๋ฉด ๊ทธ edge๋ฅผ ๊ณ„์† ํ†ต๊ณผํ•˜๋ฉด ๊ณ„์†ํ•ด์„œ cost๊ฐ€ ์ค„์–ด๋“คํ…Œ๋‹ˆ๊นŒ. edge๊ฐ€ ์—†์Œ์„ ํ‘œ๊ธฐํ•˜๊ธฐ์œ„ํ•ด์„œ๋Š” ๋ฌดํ•œํžˆ ํฐ๊ฐ’์„ ๊ฐ–๋Š”๋‹ค๊ณ  ๊ฐ€์ •ํ•œ๋‹ค.

๋งค๋ฒˆ vertex๋ฅผ ์˜ฎ๊ฒจ๊ฐˆ๋•Œ๋งˆ๋‹ค ์˜ฎ๊ฒจ์˜จ vertex์—์„œ ๊ฐˆ๋•Œ์˜ ๊ฒฝ๋กœ์˜ ๊ธธ์ด์™€ ์ด๋ฏธ ๊ตฌํ•ด๋†จ๋˜ ๊ฒฝ๋กœ ์ค‘ ๋ญ๊ฐ€ ๋” ์ตœ๋‹จ๊ฒฝ๋กœ์ธ์ง€๋ฅผ ๋น„๊ตํ•ด์„œ ์ตœ๋‹จ๊ฒฝ๋กœ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์ค˜์•ผํ•œ๋‹ค.

time complexity of Dijkstraโ€™s Algorithm = O(n^2)

Transitive Closures : ์ดํ–‰ํ์‡„

Aโ†’B Bโ†’C ์ด๋ฉด Aโ†’C์ด๋‹ค. (์ดํ–‰๊ด€๊ณ„) Closure : ์ง‘ํ•ฉ์— ํ–‰์œ„๋ฅผ ๊ฐ€ํ•ด ๋‚˜์˜จ ๊ฒฐ๊ณผ๋ฌผ์„ ์ง‘ํ•ฉ์— ๋„ฃ์„ ๋•Œ ์–ด๋А ์ˆ˜์ค€์ด ๋˜๋ฉด ๋”์ด์ƒ ์ƒˆ๋กœ์šด๊ฒƒ์ด ๋‚˜์˜ค์ง€ ์•Š๋Š”๋‹ค ๊ทธ ์ƒํƒœ๋ฅผ ํ์‡„์ƒํƒœ๋ผ๊ณ  ํ•œ๋‹ค.

๋”์ด์ƒ ์ƒˆ๋กœ์šด ๊ฒฝ๋กœ๊ฐ€ ์—†์„ ๋•Œ ๊นŒ์ง€ ๋ชจ๋“  ๊ฒฝ๋กœ๋ฅผ ์ฐพ๋Š” ๊ฒƒ

Transitive Closure : A+

Reflexive Transitive Closure : A*

5

Activity On Vertex Network์—์„œ vertex๋Š” ์ผ์ข…์˜ ํ–‰์œ„๋ฅผ ์˜๋ฏธํ•œ๋‹ค. edge๋Š” ์ˆœ์„œ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ๋”ฐ๋ผ์„œ Aโ†’B์ด๋ฉด A์˜ ํ›„์— B๊ฐ€ ์‹คํ–‰๋˜๋Š”, ์ฆ‰ A๊ฐ€ B์˜ ์„ ํ–‰์ž, B๊ฐ€ A์˜ ํ›„ํ–‰์ž๊ฐ€ ๋œ๋‹ค.(predecessor, successor) ์ง์ ‘์ ์œผ๋กœ ๋ฐ”๋กœ ์—ฐ๊ฒฐ๋œ predecessor๋Š” immediate predecessor๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

cartesian product. ๋‘ ๊ด€๊ณ„์˜ ์š”์†Œ๋ฅผ ๋ชจ๋‘ ๊ณฑํ•ด์„œ ๋งŒ๋“ค์–ด๋‚ธ ์ƒˆ๋กœ์šด ๊ด€๊ณ„ ์ง‘ํ•ฉ

partial order : irreflexive (reflexive ํ•œ ์š”์†Œ ์—†์Œ), transitive (3๋‹จ๋…ผ๋ฒ•) ๋‘๊ฐ€์ง€๋ฅผ ๋งŒ์กฑ

DAG : Directed Acyclic Graph ์‚ฌ์ดํด์„ ๋งŒ๋“ค์ง€ ์•Š๋Š” ์œ ํ–ฅ๊ทธ๋ž˜ํ”„ partial order๋ฅผ ๋‚˜ํƒ€๋‚ด๊ธฐ์— ์œ ๋ฆฌํ•˜๋‹ค. ์‚ฌ์ดํด์ด ์—†์–ด์•ผํ•จ!(Acyclic : ์‚ฌ์ดํด ์Ž๋‹ค!) ์‹ค์ œ๋กœ partial ํ•˜์ง„ ์•Š๋‹ค. ๋ชจ๋‘ transitiveํ•˜๊ฒŒ ๋งŒ๋“ค์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ. ๊ทผ๋ฐ ๊ตณ์ด transitive๋Š” ์•ˆ๋งŒ๋“ค์–ด์ค˜๋„ ๊ฑ ๋‹ค ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ณ  ํ•ด์ฃผ๋ฉด ๋จ. transitive closure๋ฅผ ์ด์šฉํ•ด์„œ ํ•ด๊ฒฐ ๊ฐ€๋Šฅ

๋ชจ๋“  partial order๋Š” DAG๋กœ ํ‘œํ˜„ํ•ด์ค„ ์ˆ˜ ์žˆ์ง€๋งŒ ์—ญ์€ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š๋Š”๋‹ค. ๊ฐ€์ •์ด ๋ผ์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ.. partial order๋Š” DAG๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. DAG์˜ transitive cloosure๋Š” partial order์ด/๋‹ค. ex) R1 = DAG, R2= Partial order ์ด๋ฉด R1์€ R2์— ์†ํ•˜๊ณ  R1์„ transitive closure๋Š” R2์™€ ๊ฐ™๋‹ค. A^+ : A์˜ transitive closure. A์˜ ๋ชจ๋“  vertex๊ฐ€ transitiveํ•˜๊ฒŒ ๋œ ๊ฒƒ.

Topological sort : ์œ„์ƒ ์ •๋ ฌ. partial order๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ๊ทธ๋ฅผ ์„ ํ˜•์ ์ธ ์ˆœ์„œ๋กœ ์ •๋ ฌํ•ด์ฃผ๋Š” ๊ฒƒ.

immediate predecessor๊ฐ€ ์—†๋Š” vertex๋กœ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์•ผ ํ•  ๊ฒƒ. ํ™•์ธํ•˜๋Š” vertex๋ฅผ ์ œ๊ฑฐ, ๊ทธ vertex์™€ ์—ฐ๊ฒฐ๋œ ๋ชจ๋“  ์—ฃ์ง€๋ฅผ ํ™•์ธ, ๊ทธ ์ค‘์— ํ•œ vertex๋ฅผ ์„ ํƒ, ์ด ๊ณผ์ •์„ ๋ชจ๋“  vertex๊ฐ€ ๋น ์ ธ๋‚˜์˜ฌ ๋•Œ ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

adjacency graph๋กœ ๊ตฌํ˜„ํ•  ๋•Œ ๊ฐ vertex์˜ immediate predecessor๋ฅผ ๊ธฐ๋กํ•˜๋„๋ก ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ฐ’์ด 0์ธ vertex๋ฅผ ์ฐพ์•„ ์ด์šฉํ•˜๋„๋ก ํ•œ๋‹ค.

partial order๋Š” irreflexive ํ•˜๋ฉฐ transitiveํ•œ ๊ด€๊ณ„์ธ๋ฐ ์ด๋Š” DAG๋กœ ํ‘œํ˜„๋  ์ˆ˜ ์žˆ์Œ DAG๋Š” transitiveํ•˜์ง„ ์•Š๋‹ค. irreflexiveํ•˜๋‹ค ์ฆ‰ no cycle์ธ ๊ทธ๋ž˜ํ”„๋กœ ์„œ๋กœ ๋ชจ๋‘ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์Œ. ์—ฌ๊ธฐ์— transitiveํ•˜๋‹ค๋Š” ์†์„ฑ๋งŒ ๋”ํ•ด์ฃผ๋ฉด partial order๊ฐ€ ๋˜๊ธฐ๋•€์‹œ๋กฑ, partial order๋Š” dag๋กœ ํ‘œํ˜„ํ•ด์ค„ ์ˆ˜ ์žˆ์Œ.

time complexity of topological sort is O(n+e)

6

๊ด€๊ณ„๋„ ์ผ์ข…์˜ ์ง‘ํ•ฉ์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. S์˜ cartesian product SXS๋Š” S์—๋Œ€ํ•ด ๊ด€๊ณ„๋ฅผ ๊ฐ–๋Š”๋‹ค

S = {a, b, c} SXS = {<a, a>, <a, b>, <a, c>, <b, a>, <b, b>, <b, c>, <c, a>, <c, b>, <c, c>} R = {<a, a>, <a, b>, <a, c>, <b, b>, <b, c>, <c, c>}

๊ทธ๋ž˜ํ”„์™€ ์œ ์‚ฌํ•˜๊ฒŒ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ฐ ์š”์†Œ๊ฐ€ vertex, ๊ด€๊ณ„๊ฐ€ edge๋ž‘ ๊ฐ™๋‹ค. ๋”ฐ๋ผ์„œ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ทธ๋ž˜ํ”„ G = (V, E)๋กœ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค. (V : vertex ์ง‘ํ•ฉ, E : edge, ๊ด€๊ณ„)

Transitivity : ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•ด Xโ†’Y์™€ Yโ†’Z์ด๋ฉด Xโ†’Z์ธ ๊ฒฝ์šฐ

Reflexivity : ๋ชจ๋“  ๋…ธ๋“œ๊ฐ€ self loop์„ ๊ฐ€์งˆ ๋•Œ. ์ฆ‰ Xโ†’X edge๊ฐ€ ์žˆ์„ ๋•Œ

Symmetricity : ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•ด Xโ†’Y๊ฐ€ ์žˆ์„ ๋•Œ Yโ†’X๋„ ์žˆ์„ ๋•Œ

์œ ์šฉํ•œ ๊ด€๊ณ„ : transitivity, reflexivity, symmetricity ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋Š” ๊ด€๊ณ„ (๋™๋“ฑ๊ด€๊ณ„)

Set๊ณผ Realation์„ ์•Œ ๋•Œ ๊ทธ๋กœ๋ถ€ํ„ฐ ์œ ์šฉํ•œ ์ •๋ณด๋ฅผ ๋ฝ‘์•„๋‚ด๋Š”๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Equivalance Realation : ๋™๋“ฑํ•œ ๊ด€๊ณ„. ์ง‘ํ•ฉ S๊ฐ€ reflexive, symmetric, transitiveํ•˜๋ฉด ๋™๋“ฑ๊ด€๊ณ„๋ผ๊ณ  ํ•œ๋‹ค.

S = {a, b, c} SXS = {<a, a>, <a, b>, <a, c>, <b, a>, <b, b>, <b, c>, <c, a>, <c, b>, <c, c>} R1 = {<a, a>, <b, b>, <c, c>, <a, b>, <b, c>, <a, c>} โ†’ Reflexivity : a์™€ b, c์—๋Œ€ํ•ด ๋ชจ๋‘ self loop์„ ๊ฐ€์ง€๊ธฐ๋•Œ๋ฌธ์— reflexiveํ•˜๋‹ค โ†’ Transitivity : aโ†’b, bโ†’c, ์ด๊ณ  aโ†’c์ด๋ฏ€๋กœ transitiveํ•˜๋‹ค โ†’ Symmetric : aโ†’b์ด์ง€๋งŒ bโ†’a๋Š” ์—†์œผ๋ฏ€๋กœ reflexiveํ•˜์ง€ ์•Š๋‹ค โ‡’ R1์€ ๋™๋“ฑ๊ด€๊ณ„๊ฐ€ ์•„๋‹ˆ๋‹ค. R2 = {<a, a>, <b, b>, <c, c>, <a, b>, <b, c>, <a, c>, <b, a>, <c, b>, <c, a>} โ†’ Reflexivity : a, b, c๊ฐ€ ๋ชจ๋‘ ์ž๊ธฐ ์ž์‹ ์œผ๋กœ์˜ self loop์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— reflexive โ†’ Transitivity : aโ†’b, bโ†’c, cโ†’a, aโ†’c, cโ†’b, bโ†’c, bโ†’a ์ด๋ฏ€๋กœ transitive ํ•˜๋‹ค โ†’ symmetricity : aโ†’b, bโ†’a, bโ†’c, cโ†’b, aโ†’c, cโ†’a ๋ชจ๋‘ ์žˆ๋‹ค. Symmetricํ•˜๋‹ค โ‡’ R2๋Š” ๋™๋“ฑ๊ด€๊ณ„์ด๋‹ค.

๋™๋“ฑํ•œ ๊ด€๊ณ„๋กœ๋ถ€ํ„ฐ ๋™๋“ฑํ•œ ํด๋ž˜์Šค๋“ค์„ ๋ฝ‘์•„๋‚ธ๋‹ค. ๊ทธ๊ฒƒ์ด ๋™๋“ฑํด๋ž˜์Šค

๋™๋“ฑ ๊ด€๊ณ„์˜ ๊ทธ๋ž˜ํ”„๋กœ๋ถ€ํ„ฐ ๋™๋“ฑํ•œ ํด๋ž˜์Šค๋ฅผ ๋ฝ‘์•„๋‚ธ๋‹ค. ์ด ์ง‘ํ•ฉ์€ ๋™๋“ฑ๊ด€๊ณ„๋กœ ์ด์–ด์ ธ์žˆ๊ธฐ ๋•Œ๋ฌธ์— vertex๊ฐ„์˜ ์ธ์ ‘์„ฑ์€ ๊ณง vertex๊ฐ„์˜ ๋™๋“ฑ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ๋”ฐ๋ผ์„œ Aโ†’B์ด๋ฉด A์™€ B๋Š” ๋™๋“ฑ๊ด€๊ณ„์— ์žˆ๋Š” ๋™๋“ฑํด๋ž˜์Šค, Bโ†’C์ด๋ฉด A์™€ B, C๋Š” ๋™๋“ฑ๊ด€๊ณ„์— ์žˆ๋Š” ๋™๋“ฑํด๋ž˜์Šค๊ฐ€ ๋œ๋‹ค. ๋”ฐ๋ผ์„œ ํ•œ vertex์˜ ์ธ์ ‘ vertex์—๋Œ€ํ•ด, ๊ทธ๋ฆฌ๊ณ  ๊ทธ ์ธ์ ‘ํ•œ vertex๋“ค์˜ ์ธ์ ‘ํ•œ vertex๋“ค์— ๋Œ€ํ•ด ๊ฒ€์‚ฌ๋ฅผ ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ์ธ์ ‘์„ฑ์ด ์„ฑ๋ฆฝํ•˜๋Š” vertex๋“ค์„ ๋ชจ์•„๋†“์€๊ฒƒ์ด ๋™๋“ฑ ํด๋ž˜์Šค๊ฐ€ ๋œ๋‹ค. ์ด๋ฏธ ๋™๋“ฑํด๋ž˜์Šค๊ฐ€ ์ฐพ์•„์ง„๊ฑฐ์— ๋„๋‹ฌํ•˜๊ฒŒ๋˜๋ฉด ๋™๋“ฑํด๋ž˜์Šค ์ฐพ๊ธฐ๋ฅผ ๋ฉˆ์ถ˜๋‹ค.

๋งŒ์•ฝ ๋‹ค๋ฅธ ๋™๋“ฑํด๋ž˜์Šค๋ž‘ ์ด์–ด์ง„๋‹ค๋ฉด..? ์–ด๋–ป๊ฒŒ

list ์ด์šฉ ์‹œ O(n+e) ์˜ ์‹œ๊ฐ„๋ณต์žก๋„/๊ณต๊ฐ„๋ณต์žก๋„

6-2

์ˆœ์ฐจ ํƒ์ƒ‰ : ์ด๋ฏธ ์ •๋ ฌ ๋˜์–ด์žˆ๋Š” ์ž๋ฃŒ๋ฅผ ๋ง ๊ทธ๋Œ€๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ๋‹ค ํ™•์ธํ•˜๋Š”๊ฑฐ โ† ์–ด๋А ์ƒˆ์›”์— ํ•˜๋ˆ„?

๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰์— ์ฐพ์œผ๋ ค๋˜ ๊ฐ’์„ ๋„ฃ์–ด๋†“๊ณ  ๊ทธ๋ƒฅ ๋ฐ˜๋ณต๋Œ๋ ค์„œ ๋งˆ์ง€๋ง‰ ์ „์— ์ฐพ์•„์ง€๋ฉด ์žˆ๋Š”๊ฑฐ ๋งˆ์ง€๋ง‰์— ์ฐพ์•„์ง€๋ฉด ์—†์–ด์„œ ๋งˆ์ง€๋ง‰์— ์ธ์œ„์ ์œผ๋กœ ๋„ฃ์–ด๋…ผ๊ฑฐ ์ฐพ์•„์ง„๊ฑธ๋กœ ํ•˜๋ฉด ๋ฏธ๋ฏธํ•˜์ง€๋งŒ ์‹œ๊ฐ„์  ์ด๋“์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๊ฑธ sentinel์ด๋ผ๊ณ  ํ•จ. O(N)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๊ธฐ๋•Œ๋ฌธ์— ์กด๋‚˜๊ฒŒ๋А๋ ค์š”~

์ด์ง„ ํƒ์ƒ‰ : ์ด๋ฏธ ์ •๋ ฌ ๋˜์–ด์žˆ๋Š” ์ž๋ฃŒ์—์„œ ์ค‘๊ฐ„๊ฐ’์„ ๋”ฑ ์ •ํ•ด๋†“๊ณ  ํƒ์ƒ‰ํ•ด์ฃผ์ž ์ค‘๊ฐ„๋ณด๋‹ค ์ž‘์œผ๋ฉด ์ค‘๊ฐ„ ์•„๋žซ๋ฒ”์œ„์—์„œ ๋‹ค์‹œ ์ด์ง„๊ฒ€์ƒ‰, ํฌ๋ฉด ์ค‘๊ฐ„ ์œ—๋ถ€๋ถ„์—์„œ ์ด์ง„๊ฒ€์ƒ‰ ์ด๊ฑธ ๋ฐ˜๋ณต. ์ตœ์•…์˜ ๊ฒฝ์šฐ log n๋ฒˆ์„ ๋น„๊ตํ•ด์•ผํ•œ๋‹ค. (ํ•œ๋ฒˆ ๋น„๊ต์— 2๋ฐฐ์ˆ˜์”ฉ ๋น„๊ต๊ฐ€ ๋˜๋‹ˆ๊นŒ..) ๋”ฐ๋ผ์„œ O(logN)์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.

interpolation search : ์ฐพ์„ ๊ฐ’์„ ์ด์šฉํ•ด ์–ด๋””์„œ๋ถ€ํ„ฐ ์ฐพ์•„ ๋‚˜๊ฐˆ์ง€๋ฅผ ๊ฒฐ์ •ํ•œ๋‹ค๋Š” ์•„์ด๋””์–ด..

๋ฆฌ์ŠคํŠธ ๊ฒ€์ฆ : ๋ฆฌ์ŠคํŠธ๊ฐ€ ๊ฐ™์€์ง€ ์•„๋‹Œ์ง€๋ฅผ ํ™•์ธ. ์ •๋ ฌ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค๋ฉด ๋ชจ๋“  ์š”์†Œ๋ฅผ ํ›‘์–ด์•ผํ•˜๋‹ˆ O(NM)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค. ์ •๋ ฌ์‹œ์ผœ์„œ ํ•˜๋Š”ํŽธ์ด ๋น ๋ฆ„ ์™œ๋ƒ๋ฉด ์ •๋ ฌ์‹œํ‚ค๋ฉด O(NlogN + MlogM)์ธ๋ฐ ์ •๋ ฌ์ด ๋๊ธฐ ๋•Œ๋ฌธ์— ๋น„๊ต๋Š” ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋งŒํผ ์‹œ๊ฐ„์„ ๋” ์†Œ๋น„ํ•จ O(N + M) ๋”ฐ๋ผ์„œ ์ „์ฒด์ ์œผ๋กœ O(NlogN + MlogM + N + M)์˜ ๋ณต์žก๋„๋ฅผ ๊ฐ€์ง€๋ฏ€๋กœ ์•„๋ฌด๋ฆฌ ์ปค๋ด์•ผ O(max(NlogN, MlogM))์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค.

7

์ •๋ ฌ : ๋Œ€๋ถ€๋ถ„์˜ ์ปดํ“จํŒ… ์‹œ๊ฐ„์€ ๋ฐ์ดํ„ฐ๋ฅผ ์ •๋ ฌํ•˜๋Š”๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๊ทธ๋ž˜์„œ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ข‹์€๊ฑธ ์ฐพ์•„๋‚ด๋Š”๊ฒŒ ๋งค์šฐ ์ค‘์š”ํ•œ๋ฐ, ์•ˆํƒ€๊น๊ฒŒ๋„ ๋ชจ๋“  ๊ฒฝ์šฐ์—๋Œ€ํ•ด ์ตœ์ ์˜ ์†๋„๋ฅผ ๋ณด์žฅํ•˜๋Š” ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์€ ์—†๋‹ค. ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ํฌ๊ธฐ์— ๋”ฐ๋ผ ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํšจ์œจ์€ ์ฒœ์ฐจ๋งŒ๋ณ„์ด ๋œ๋‹ค.

์‚ฝ์ž…์ •๋ ฌ : ๋งค๋ฒˆ ์‚ฝ์ž…ํ•˜๋ฉด์„œ ์•ž์ด๋ž‘ ๋น„๊ตํ•ด์„œ ์•ž์œผ๋กœ ๋ณด๋‚ด์ฃผ๊ฑฐ๋‚˜ ๋‚˜๋น„๋‘๊ฑฐ๋‚˜ ๋ฐ˜๋ณตํ•˜๋Š”๊ฑฐ. ๋ฐฐ์—ด์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜์ง€ ์•Š๊ฒŒ ํ•˜๊ธฐ์œ„ํ•ด sentinel์„ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ๋งจ ์•ž์ž๋ฆฌ๋ฅผ ์Œ์˜ ๋ฌดํ•œ๋Œ€๋กœ ์„ค์ •ํ•ด์ฃผ๋Š” ๋ฐฉ์‹. ๊ทผ๋ฐ ์ด๋Ÿฐ๊ฒƒ๋ณด๋‹ค ๊ฑ ์ตœ์†Œ๊ฐ’์„ ์ฐพ์•„์„œ ๋ฏธ๋ฆฌ ๋ฐ•์•„๋†“๊ณ  ์‹œ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ๋‹ค.

์ž…๋ ฅ์ด ์•Œ์•„์„œ ์ •๋ ฌ๋ผ์„œ ๋“ค์–ด์˜ค๋ฉด ์ตœ๊ณ . ๋น„๊ตํ–ˆ๋‹ค ์•„๋‹ˆ๋„ค.. ๋น„๊ตํ–ˆ๋‹ค ์•„๋‹ˆ๋„ค.. ์ด๊ฑฐ๋งŒ ๋ฐ˜๋ณตํ•ด์ฃผ๋ฉด ๋˜๋‹ˆ ์ตœ์ƒ์˜ ๊ฒฝ์šฐ๋‹ค. ๊ทธ์น˜๋งŒ ์ž…๋ ฅ์ด ์™„์ „ํžˆ ๋’ค๋ฐ”๊ปด์„œ ๋“ค์–ด์˜ค๋ฉด ์ตœ์•…. ๋งค๋ฒˆ ๋น„๊ต์ด๋™ ๋น„๊ต ์ด๋™ ๋น„๊ต ์ด๋™ ๊ณ„์† ํ•ด์ค˜์•ผํ•จ.

์ •๋ ฌํ•ด์•ผํ•˜๋Š” ๋Œ€์ƒ์ด 20๊ฐœ์–ธ์ €๋ฆฌ ์ •๋„์ผ ๋•Œ ์‚ฌ์šฉํ•˜๋ฉด ํšจ์œจ ์ ์ด๋‹ค. ์ˆœ์„œ์— ๋งž์ง€ ์•Š์€ ์š”์†Œ๊ฐ€ ์ ์„์ˆ˜๋ก ํšจ์œจ์ ์ธ๋ฐ ์ •๋ ฌ ๋Œ€์ƒ์ด 20๊ฐœ ๋ฐ‘์—์„œ๋Š” ์–ด์งœํ”ผ ๊ทธ๊ฒŒ ์ ์„ํ…Œ๋‹ˆ๊นŒ

LOO(์ž๋ฆฌ์— ๋งž๊ฒŒ ์ •๋ ฌ๋˜์ง€ ์•Š์€๊ฑฐ)๊ฐ€ k๊ฐœ์ผ๋•Œ ์‚ฝ์ž…+๋น„๊ต O(N), ์ •๋ ฌํ•ด์•ผํ•˜๋Š”๊ฒฝ์šฐ O(KN) ๋”ฐ๋ผ์„œ O(KN + N) = O((K + 1)N)์˜ ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๊ฐ–๋Š”๋‹ค. K๊ฐ€ ์ ์„์ˆ˜๋ก ๋‹น์—ฐํžˆ ์ข‹๊ฒ ์ง€? K๊ฐ€ 0์ด๋ฉด O(N), K๊ฐ€ n์ด๋ฉด O(N^2)๊นŒ์ง€๋„ ๊ฐ„๋‹ค.

๋งํฌ๋“œ ๋ฆฌ์ŠคํŠธ๋ฅผ ์ด์šฉํ•ด ์ธ๋ฑ์Šค ์›€์ง์ด๋Š”๊ฑธ ๊ฐ„์†Œํ™”์‹œํ‚ค๊ฑฐ๋‚˜ ์ˆœ์ฐจํƒ์ƒ‰๋Œ€์‹  ์ด์ง„ํƒ์ƒ‰์„ ์‚ฌ์šฉํ•˜๋Š” ๋“ฑ์œผ๋กœ ์„ฑ๋Šฅ์„ ์กฐ๊ธˆ ๋” ๊ฐœ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค..

ํ€ต์†ŒํŠธ : ๋””๋ฐ”์ด๋“œ ์•ค ์ปจ์ปค! ์‚ฝ์ž…์ •๋ ฌ์ด stableํ•œ๋Œ€ ๋ฐ˜ํ•ด ์–˜๋Š” unstableํ•˜๋‹ค ๋ณด์žฅ์„ ๋ชปํ•ด์ค€๋‹ค? ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ฝ‘์•„์ค€๋‹ค. ์ •๋ ฌ์ด ๋˜์–ด์žˆ์œผ๋ฉด ์ตœ์•…์ž„. ํ”ผ๋ฒ—์„ ์žก๊ณ  ๊ทธ๊ฑธ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์—” ์ž‘์€์นœ๊ตฌ๋“ค ์˜ค๋ฅธ์ชฝ์—” ํฐ ์นœ๊ตฌ๋“ค์„ ๋„ฃ์–ด์ค€๋‹ค. ์žฌ๊ท€์ ์œผ๋กœ ํ•  ์ˆ˜ ์žˆ์Œ. ์•„๋ฌด๊ฑฐ๋‚˜ ํ”ผ๋ด‡์œผ๋กœ ์ •ํ•ด๋„ ๋˜์ง€๋งŒ, ๋‹ค๋ฅด๊ฒŒ ํ•ด์ฃผ๋Š”ํŽธ์ด ์ข‹๊ธดํ•˜๋‹ค. ๊ฐ€์žฅ ๋งŽ์ด์“ฐ์ด๋Š”๊ฑด ๋งจ ์™ผ์ชฝ๊ฑฐ๋ฅผ ํ”ผ๋ด‡์œผ๋กœ ์žก์•„์ฃผ๋Š”๊ฑฐ. ์™ผ์ชฝ์—์„œ toright๋กœ ์˜ฌ๋ผ๊ฐ€๋ฉฐ ์˜ค๋ฅธ์ชฝ์—์„œ toleft๋กœ ๋‚ด๋ ค๊ฐ€๋ฉฐ pivot์ด๋ž‘ ๊ฐ’์„ ๋น„๊ตํ•˜๊ณ  ์„œ๋กœ ๋ฐ”๋€Œ์–ด์•ผํ•˜๋Š”๊ฒŒ ๋‚˜์˜ค๋ฉด ๋ฉˆ์ถ”๊ณ  ๋ฐ”๊ฟ”์ฃผ๊ณ  ๋ฐ˜๋ณต. ๊ทธ๋Ÿฌ๋‹ค toleft๊ฐ€ toright๋ฅผ ์ง€๋‚˜์น˜๋ฉด ๊ทธ๊ฒƒ๋„ ๋ฌธ์ œ๊ฐ€์žˆ๋Š”๊ฑฐ๋‹ˆ๊นŒ ๋ฐ”๊ฟ”์คŒ.

pdf์— ์ •๋ฆฌ์ž˜๋˜์–ด์žˆ๋‹ค..๊ทธ๊ฑฐ๋ด

์‹œ๊ฐ„๋ณต์žก๋„ : ํ‰๊ท ์ ์ธ ๊ฒฝ์šฐ O(NlogN), ์ตœ์•…์˜ ๊ฒฝ์šฐ O(N^2)์ธ๋ฐ ๊ทธ๋Ÿฐ๊ฒฝ์šฐ๋Š” ์ž˜ ์—†์Œ..

๊ณต๊ฐ„๋ณต์žก๋„ : ์ตœ์•… O(N) ์ตœ์ O(1), ํ‰๊ท O(logN). ์ž‘์€ ๋ฆฌ์ŠคํŠธ์— ๋Œ€ํ•ด์„œ๋Š” ๋ฐ˜๋ณต๋ฌธ์„ ์จ์ฃผ๋ฉด ๊ณต๊ฐ„์„ ๋œ ์“ธ ์ˆ˜ ์žˆ๋‹ค. pivot์˜ ์œ„์น˜๋„ ์ค‘๊ฐ„๊ฐ’์„ ์žก์•„์คŒ์œผ๋กœ์จ ์ตœ์•…์„ ํ”ผํ•  ์ˆ˜ ์žˆ์Œ.

Sentinel : ์˜ค๋ฆ„์ฐจ์ˆœ์˜ ๊ฒฝ์šฐ ๊ฐ€์žฅ ํฐ๊ฐ’์„ ๋ฏธ๋ฆฌ ์ฐพ์•„์„œ ์˜ค๋ฅธ์ชฝ ๋์— ๋ฐ•์•„๋‘๋ฉด Sentinel๋กœ ์“ธ ์ˆ˜ ์žˆ๋”ฐ.

9

sorting์€ ์•„๋ฌด๋ฆฌ ๋นจ๋ผ๋ด์•ผ NlogN์„ ๋ชป๋„˜๋Š”๋‹ค.

๋ฐ์ดํ„ฐ ๊ฐœ์ˆ˜๊ฐ€ n๊ฐœ๋ฉด ์ตœ๋Œ€ n!๊ฐœ์˜ leaf๊ฐ€ ์ƒ๊ธด๋‹ค. logN! + 1๋งŒํผ์˜ ๋ฐ˜๋ณต์ด ํ•„์š”ํ•˜๋‹ค height ์ด k์ด๋ฉด 2^k-1๊ฐœ์˜ ์žŽ์„ ๊ฐ–๋Š”๋‹ค. โ‡’ 2^k-1์˜ ์žŽ์„ ๊ฐ€์งˆ๋•Œ log๋ฅผ ์ทจํ•ด 1์„ ๋”ํ•˜๋ฉด height์ด ๋œ๋‹ค. ๋”ฐ๋ผ์„œ N!์˜ ์žŽ์„ ๊ฐ€์ง€๋ฉด logN! + 1์ด height์ด๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ์†Œ ๋†’์ด๋Š” logN!์ด ๋œ๋‹ค. logN! = log N(N-1)(N-2)โ€ฆ321 ์ด๊ณ  ์ด๋Š” ์ตœ์†Œ์˜ ๊ฒฝ์šฐ NlogN์ด๋œ๋‹ค.

ํž™ : ์ž…๋ ฅ๋ฐ›์„๋•Œ๋งˆ๋‹ค ํž™์„ ๋งŒ๋“œ๋Š”๊ฒฝ์šฐ, ์ž…๋ ฅ์‹œ๋งˆ๋‹ค ํ™•์ธํ•ด์„œ ์†ŒํŒ… O(NlogN)์˜ ์‹œ๊ฐ„๋ณต์žก๋„. ํ‰๊ท ์ ์œผ๋กœ O(N)์„ ๊ฐ–๋Š”๋‹ค.

n๊ฐœ์˜ ๋…ธ๋“œ๋ฅผ ๊ฐ–๋Š” ์ด์ง„ํŠธ๋ฆฌ์˜ ์ตœ๋Œ€ ๋†’์ด๋Š” log(N + 1)์ด๋ฏ€๋กœ N๋ฒˆ์˜ insert์‹œ ์ตœ๋Œ€ O(NlogN)

์ž…๋ ฅ์ด ์•„๋‹ˆ๋ผ ์ž…๋ ฅ๋ฐ›์€๊ฑธ adjustํ•˜๋Š”๊ฒฝ์šฐ O(N)

์ž…๋ ฅ๋ฐ›์€๊ฑธ adjustํ•˜๋Š”๊ฒŒ ๋” ๋น ๋ฅผ ๊ฒƒ ๊ฐ™์ง€๋งŒ ์–ด์งœํ”ผ insertํ• ๋•Œ ์ถ”๊ฐ€ํ•˜๋Š”๊ฑฐ๋งŒ ํ•ด๋„ O(logN)์ด ํ•„์š” โ†’ ๊ฒฐ๊ตญ์—” O(NlogN)์ด๋‹ค. ํž™์†ŒํŠธ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ๊ฐ€ O(NlogN)์ด๊ณ  ํ‰๊ท ์ ์œผ๋กœ O(N)์ด๋‹ค. ์ด์™€ ๋‹ฌ๋ฆฌ ํ€ต์†ŒํŠธ๋Š” ์ตœ์•…์˜ ๊ฒฝ์šฐ๊ฐ€ O(N^2)์ด๊ณ  ๊ฑฐ์˜ ์–ด๋А ๊ฒฝ์šฐ์—๋‚˜ ํ‰๊ท ์ ์œผ๋กœ O(NlogN)์ด๋ฏ€๋กœ ์‚ฌ์‹ค์ƒ ํ€ต์†ŒํŠธ๊ฐ€ ๋” ๋น ๋ฅด๊ฒŒ ๋‹ค์–‘ํ•œ๊ฒƒ์— ์ ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

summary : ํฌ๊ธฐ๊ฐ€ 20์–ธ์ €๋ฆฌ์ผ๋• O(N^2)์ธ ์‚ฝ์ž… ์ •๋ ฌ์„, ์•„๋‹ˆ๋ฉด ๊ฑ ํ€ต์†ŒํŠธ ๋•Œ๋ ค๋ฒ„๋ฆฌ์ž O(NlogN) ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š”๊ฑด ์˜ค๋ž˜๊ฑธ๋ฆฐ๋‹ค. ๊ฐ€๋Šฅํ•˜๋ฉด ๋งํฌ๋“œ๋ฆฌ์ŠคํŠธ๋‚˜ ์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•˜์ž.

๋ณต์žก๋„

matrix graph โ‡’ ๊ณต๊ฐ„๋ณต์žก๋„ O(n^2), ์‹œ๊ฐ„๋ณต์žก๋„ O(n^2) List graph โ‡’ ๊ณต๊ฐ„๋ณต์žก๋„ O(n+e), ์‹œ๊ฐ„๋ณต์žก๋„ O(n+e) kruskal ์•Œ๊ณ ๋ฆฌ์ฆ˜ โ‡’ ์‹œ๊ฐ„๋ณต์žก๋„ O(e log e) dijkstra ์•Œ๊ณ ๋ฆฌ์ฆ˜ โ‡’ ์‹œ๊ฐ„๋ณต์žก๋„ O(n^2), topological sort ์•Œ๊ณ ๋ฆฌ์ฆ˜ โ‡’ ์‹œ๊ฐ„๋ณต์žก๋„ O(n+e) equivalence class ์•Œ๊ณ ๋ฆฌ์ฆ˜ โ‡’ ์‹œ๊ฐ„๋ณต์žก๋„ O(n+e) ์ˆœ์ฐจํƒ์ƒ‰ โ‡’ O(n) ์ด์ง„ํƒ์ƒ‰ โ‡’ O(n log n) ๋ฆฌ์ŠคํŠธ๊ฒ€์ฆ โ‡’ O(n^2) ์‚ฝ์ž…์ •๋ ฌ โ‡’ O(n^2) ํ€ต์ •๋ ฌ โ‡’ O(n^2), ํ‰๊ท ์ ์œผ๋กœ O(n log n)

Share: Twitter Facebook
Seunghun Yang's Picture

About Seunghun Yang

Seunghun is undergraduate student at Computer Science Engineering in CNU(Chungnam National University).

Daejeon, South Korea

Comments