Graph
Graph
๊ตฌ์ฑ์์
์ ์ (Vertex)
๊ฐ์ (Edge)
|v|: ์ ์ ์ ๊ฐ์, |e|: ๊ทธ๋ํ์ ํฌํจ๋ ๊ฐ์ ์ ๊ฐ์
|v| ๊ฐ์ ์ ์ ์ ๊ฐ๋ ๊ทธ๋ํ๋ ์ต๋ |v| (|v|-1) /2 ๊ฐ์ ์ด ๊ฐ๋ฅ
ex) 5๊ฐ ์ ์ ์ด ์๋ ๊ทธ๋ํ ์ ์ต๋ ๊ฐ์ ์๋ 5*4/2 = 10 ๊ฐ์ด๋ค
์ ํ ์๋ฃ๊ตฌ์กฐ๋ ํธ๋ฆฌ ์๋ฃ๊ตฌ์กฐ๋ก ํํํ๊ธฐ ์ด๋ ค์ด
N:N
๊ด๊ณ๋ฅผ ๊ฐ์ง๋ ์์๋ค์ ํํํ๊ธฐ์ ์ฉ์ดํ๋ค.
๊ทธ๋ํ ์ ํ
๋ฌดํฅ ๊ทธ๋ํ (Undirected Graph)
์ ํฅ ๊ทธ๋ํ (Directed Graph)
๊ฐ์ค์น ๊ทธ๋ํ (Weighted Graph)
์ฌ์ดํด ์๋ ๋ฐฉํฅ ๊ทธ๋ํ (DAG: Directed Acyclic Graph)
์ฌ์ดํด
: ์์ ์ ์ ๊ณผ ๋ ์ ์ ์ด ๊ฐ์ ๊ฒฝ๋ก
ex)
๊ณผ์ ์ด์ (์ ์ ๊ณผ๋ชฉ)
๋จ์ ๊ฒฝ๋ก
: ๊ฒฝ๋ก ์ค ํ ์ ์ ์ ์ต๋ํ ํ๋ฒ๋ง ์ง๋๋ ๊ฒฝ๋ก
์ธ์ ์ ์
์ธ์ (Adjacency)
๋ ๊ฐ์ ์ ์ ์ ๊ฐ์ ์ด ์กด์ฌ (์ฐ๊ฒฐ๋จ) ํ๋ฉด, ์๋ก ์ธ์ ํด ์๋ค๊ณ ํ๋ค.
์์ ๊ทธ๋ํ์ ์ํ ์์์ ๋ ์ ์ ๋ค์ ๋ชจ๋ ์ธ์ ํด์๋ค
๊ทธ๋ํ ํํ
๊ฐ์ ์ ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์, ๋ฉ๋ชจ๋ฆฌ๋ ์ฑ๋ฅ์ ๊ณ ๋ คํด์ ๊ฒฐ์
์ธ์ ํ๋ ฌ (Adjacent matrix)
๋ ์ ์ ์ ์ฐ๊ฒฐํ๋ ๊ฐ์ ์ ์ ๋ฌด๋ฅผ ํ๋ ฌ๋ก ํํ
|v| x |v| ํฌ๊ธฐ์ 2์ฐจ์ ๋ฐฐ์ด์ ์ด์ฉํด์ ๊ฐ์ ์ ๋ณด๋ฅผ ์ ์ฅ
๋ฐฐ์ด์ ๋ฐฐ์ด
ํ ๋ฒํธ์ ์ด ๋ฒํธ๋ ๊ทธ๋ํ์ ์ ์ ์ ๋์
๋ ์ ์ ์ด ์ธ์ ๋์ด ์์ผ๋ฉด1, ๊ทธ๋ ์ง ์์ผ๋ฉด 0์ผ๋ก ํํ
๋ฌดํฅ ๊ทธ๋ํ
i๋ฒ์งธ ํ์ ํฉ = i๋ฒ์งธ ์ด์ ํฉ = Vi์ ์ฐจ์
์ ํฅ ๊ทธ๋ํ
ํ i์ ํฉ = Vi์ ์ง์ถ ์ฐจ์
์ด i์ ํฉ = Vi์ ์ง์ ์ฐจ์
๋จ์
๊ฐ์ ์ด ์ ๋๋ผ๋ (ํฌ์ ๊ทธ๋ํ) V*V ํฌ๊ธฐ์ ๊ณต๊ฐ ํ๋ณด
์ธ์ ์ ์ ์ ์ฐพ์ ๋ ์ธ์ ์ ์ ์ด ์ ๋๋ผ๋ V๋ฒ ์ฐ์ฐ ํ์
์ธ์ ๋ฆฌ์คํธ (Adjacent List)
๊ฐ ์ ์ ์ ๋ํ ์ธ์ ์ ์ ๋ค์ ์์ฐจ์ ์ผ๋ก ํํ
ํ๋์ ์ ์ ์ ๋ํ ์ธ์ ์ ์ ๋ค์ ๊ฐ๊ฐ ๋ ธ๋๋ก ํ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ก ์ ์ฅ
๊ฐ์ ์ ๋ฐฐ์ด
๊ฐ์ (์์ ์ ์ , ๋ ์ ์ )์ ๋ฐฐ์ด์ ์ฐ์์ ์ผ๋ก ์ ์ฅ
๊ทธ๋ํ ์ํ (ํ์)
๋น์ ํ๊ตฌ์กฐ์ธ Graph๋ก ๊ตฌํ๋ ๋ชจ๋ ์๋ฃ (์ ์ )๋ฅผ ๋น ์ง์์ด ํ์ํ๋ ๊ฒ์ ์๋ฏธ
๋ ๊ฐ์ง ๋ฐฉ๋ฒ
๊น์ด ์ฐ์ ํ์ (DFS: Depth Fist Search)
๋๋น ์ฐ์ ํ์ (BFS: Breadth First Search)
DFS (๊น์ด ์ฐ์ ํ์)
์์ ์ ์ ์ ํ ๋ฐฉํฅ์ผ๋ก ๊ฐ ์ ์๋ ๊ฒฝ๋ก๊ฐ ์๋ ๊ณณ๊น์ง ๊น์ด ํ์ํด ๊ฐ๋ค๊ฐ ๋ ์ด์ ๊ฐ ๊ณณ์ด ์๊ฒ ๋๋ฉด,
๊ฐ์ฅ ๋ง์ง๋ง์ ๋ง๋ฌ๋ ๊ฐ๋ฆผ๊ธธ ๊ฐ์ ์ด ์๋ ์ ์ ์ผ๋ก ๋๋์์์ ๋ค๋ฅธ ๋ฐฉํฅ์ ์ ์ ์ผ๋ก ํ์์ ๊ณ์ ๋ฐ๋ณตํ์ฌ
๊ฒฐ๊ตญ ๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํ๋ ์ํ๋ฐฉ๋ฒ
๊ฐ์ฅ ๋ง์ง๋ง์ ๋ง๋ฌ๋ ๊ฐ๋ฆผ๊ธธ์ ์ ์ ์ผ๋ก ๋๋์๊ฐ์ ๋ค์ DFS๋ฅผ ๋ฐ๋ณตํด์ผ ํ๋ฏ๋ก ํ์ ์ ์ถ (LIFO) ๊ตฌ์กฐ์
Stack
์ฌ์ฉ
Stack
๋ฌผ๊ฑด์ ์์ ์ฌ๋ฆฌ๋ฏ ์๋ฃ๋ฅผ ์์ ์ฌ๋ฆฐ ํํ์ ์๋ฃ๊ตฌ์กฐ
์ ํ ๊ตฌ์กฐ
์๋ฃ ๊ฐ์ ๊ด๊ณ๊ฐ 1:1์ ๊ด๊ณ๋ฅผ ๊ฐ๋๋ค
๋น์ ํ ๊ตฌ์กฐ๋ 1:N ๊ด๊ณ (ํธ๋ฆฌ)
๋ง์ง๋ง์ ์ฝ์ ํ ์๋ฃ๋ฅผ ๊ฐ์ฅ ๋จผ์ ๊บผ๋ธ๋ค
ํ์ ์ ์ถ (LIFO: Last In Fist Out)
BFS (Breadth First Search)
ํ์ ์์์ ์ ์น์ ํ ์ ์ ๋ค์ ๋จผ์ ๋ชจ๋ ์ฐจ๋ก๋ก ๋ฐฉ๋ฌธํ ํ์, ๋ฐฉ๋ฌธํ๋ ์ ์ ์ ์์์ผ๋ก ํ์ฌ ๋ค์ ์ธ์ ํ ์ ์ ๋ค์ ์ฐจ๋ก๋ก ๋ฐฉ๋ฌธํ๋ ๋ฐฉ์
์ธ์ ํ ์ ์ ๋ค์ ๋ํด ํ์์ ํ ํ, ์ฐจ๋ก๋ก ๋ค์ BFS๋ฅผ ์งํํด์ผ ํ๋ฏ๋ก ์ ์ ์ ์ถ (FIFO) ํํ์ ์๋ฃ๊ตฌ์กฐ์ธ
Queue
๋ฅผ ํ์ฉํจ<
Queue
Stack๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฝ์ ๊ณผ ์ญ์ ์ ์์น๊ฐ ์ ํ์ ์ธ ์๋ฃ๊ตฌ์กฐ
Queue์ ๋ค์์๋ ์ฝ์ ๋ง, ์์์๋ ์ญ์ ๋ง ์ด๋ฃจ์ด์ง๋ ๊ตฌ์กฐ
Queue์ ์ฝ์ ํ ์์๋๋ก ์์๊ฐ ์ ์ฅ๋์ด, ๊ฐ์ฅ ๋จผ์ ์ฝ์ ๋ ์์๋ ๊ฐ์ฅ ๋จผ์ ์ญ์ ๋๋ค
์ ์ ์ ์ถ (FIFO: FIst In FIst Out)
๊ธฐ๋ณธ ์ฐ์
์ฝ์
enQueue
์ญ์
deQueue
๊ณต๋ฐฑ์ํ ๋ฐ ํฌํ์ํ ๊ฒ์ฌ:
isEmpty()
,isFull()
๊ณต๋ฐฑ์ํ
front =rear
ํฌํ์ํ
rear = n-1 (n: ๋ฒ ์ด์ ํฌ๊ธฐ, n-1: ๋ฐฐ์ด์ ๋ง์ง๋ง index)
์ํธ๋ฐฐํ/์๋ก์ ์งํฉ (Disjoint-sets)
์๋ก์ or ์ํธ๋ฐฐํ ์งํฉ๋ค์ ์๋ก ์ค๋ณต ํฌํจ๋ ์์๊ฐ ์๋ ์งํฉ๋ค์ ๋งํจ
๊ต์งํฉ์ด ์๋ค!
์งํฉ์ ์ํ ํ๋์ ํน์ ๋ฉค๋ฒ๋ฅผ ํตํด ๊ฐ ์งํฉ๋ค์ ๊ตฌ๋ถ
์ด๋ฅผ
๋ํ์(representative)
๋ผ๊ณ ํ๋ค!
์ํธ๋ฐฐํ ์งํฉ์ ํํํ๋ ๋ฐฉ๋ฒ
์ฐ๊ฒฐ ๋ฆฌ์คํธ
ํธ๋ฆฌ
์ํธ๋ฐฐํ ์งํฉ ์ฐ์ฐ
Make-Set(x)
์์ x๋ฅผ ์ ์ผํ ์์๋ก ํ๋ ์งํฉ ์์ฑ
FInd-Set(x)
x๊ฐ ํฌํจ๋ ์งํฉ์ ๋ํ์ ๋ฆฌํด
Union(x,y)
x๊ฐ ํฌํจ๋ ์งํฉ๊ณผ y๊ฐ ํฌํจ๋ ์งํฉ์ ํฉ์ณ์ค
์ํธ ๋ฐฐํ ์งํฉ ํํ - ์ฐ๊ฒฐ ๋ฆฌ์คํธ
์ฐ๊ฒฐ ๋ฆฌ์คํธ
๊ฐ์ ์งํฉ์ ์์๋ค์ ํ๋์ ์ฐ๊ฒฐ๋ฆฌ์คํธ๋ก ๊ด๋ฆฌ
์ฐ๊ฒฐ๋ฆฌ์คํธ์ ๋งค ์์ ์์๋ฅผ ์งํฉ์ ๋ํ ์์๋ก ์ผ๋๋ค
๊ฐ ์์๋ ์งํฉ์ ๋ํ์์๋ฅผ ๊ฐ๋ฆฌํค๋ ๋งํฌ๋ฅผ ๊ฐ๋๋ค
์ํธ๋ฐฐํ ์งํฉ ํํ - Tree
Tree
ํ๋์ ์งํฉ(a disjoint set)์ ํ๋์ tree๋ก ํํํ๋ค
์์ ๋ ธ๋๊ฐ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๊ฐ๋ฆฌํค๋ฉฐ, root node๊ฐ ๋ํ์๊ฐ ๋๋ค
Union find ์์
+
์ฐ์ฐ์ ํจ์จ์ ๋์ด๋ ๋ฐฉ๋ฒ
Rank ๋ฅผ ์ด์ฉํ Union
๊ฐ node๋ ์์ ์ root๋ก ํ๋ subtree์ ๋์ด๋ฅผ Rank ๋ผ๋ ์ด๋ฆ์ผ๋ก ์ ์ฅํ๋ค
๋ ์งํฉ์ ํฉ์น ๋ rank๊ฐ ๋ฎ์ ์งํฉ์ rank๊ฐ ๋์ ์งํฉ์ ๋ถ์ธ๋ค
Path compression
Find-Set
์ ํํ๋ ๊ณผ์ ์์ ๋ง๋๋ ๋ชจ๋ node๋ค์ด ์ง์ root๋ฅผ ๊ฐ๋ฆฌํค๋๋ก ํฌ์ธํฐ๋ฅผ ๋ฐ๊พธ์ด์ค๋ค
Last updated