Graph
Last updated
Last updated
๊ทธ๋ํ๋ ์๋ฃ๊ตฌ์กฐ์ ์ผ์ข ์ผ๋ก ์ ์ (Node, Vertex)๊ณผ ๊ฐ์ (Edge)๋ก ์ด๋ฃจ์ด์ ธ์๋ค. ๊ฐ์ ์ ์ ์ ๊ฐ์ ๊ด๊ณ๋ฅผ ๋ํ๋ด๋ฉฐ, ์ ์ ์ฌ์ด๋ฅผ ์ฐ๊ฒฐํ๋ค.
G = (V,E)
๋ก ๋ํ๋ธ๋ค.
์ผ์์ํ์์ ๊ทธ๋ํ๋ฅผ ์๋ก ๋ค์ด๋ณด๋ฉด,
์งํ์ฒ ์ญ : ์ ์ / ์ญ์ฌ์ด : ๊ฐ์
๊ต์ฐจ๋ก : ์ ์ / ๋๋ก : ๊ฐ์
ํ์ด์ค๋ถ ์ฌ๋ : ์ ์ / ํ๋ก์ฐ : ๊ฐ์
์ด ์๋ค.
๋น์ ํ๊ตฌ์กฐ๋ i๋ฒ์งธ ์์๋ฅผ ํ์ํ ๋ค์ ๊ทธ ์์์ ์ฐ๊ฒฐ๋ ๋ค๋ฅธ ์์๋ฅผ ํ์ํ๋ ค๊ณ ํ ๋, ์ฌ๋ฌ ๊ฐ์ ์์๊ฐ ์กด์ฌํ๋ ํ์๊ตฌ์กฐ๋ฅผ ๋งํ๋ค. ๊ทธ๋ํ ๋ ๋น์ ํ ๊ตฌ์กฐ์ด๋ค.
๋ ธ๋(Node) or ์ ์ (Vertex)
๊ฐ์ (Edge) or ๋งํฌ(link): ์ ์ ๊ฐ์ ๊ด๊ณ
๊ฒฝ๋ก(Path) : ์ ์ A์์ B๋ก๊ฐ๋ ๊ฒฝ๋ก
์๋์ฐจ ๋ค๋น๊ฒ์ด์ ๋น ๋ฅธ๊ธธ ์ฐพ๊ธฐ(์ต๋จ ๊ฒฝ๋ก)
์ฌ์ดํด(Cycle) or ํ๋ก : ์ ์ A์์ ๋ค์ A๋ก ๋์์ค๋ ๊ฒฝ๋ก (์์ ๋ ธ๋ == ๋์ฐฉ ๋ ธ๋)
๋จ์ ๊ฒฝ๋ก์ ๋จ์ ์ฌ์ดํด : ๊ฐ์ ์ ์ ์ ๋๋ฒ ์ด์ ๋ฐฉ๋ฌธํ์ง ์๋ ๊ฒฝ๋ก/์ฌ์ดํด
์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ฒฝ๋ก์ ์ฌ์ดํด์ ๋จ์ ๊ฒฝ๋ก/์ฌ์ดํด์ด๋ค.
Directed Graph(๋ฐฉํฅ ์๋ ๊ทธ๋ํ)
Undirected Graph(๋ฐฉํฅ ์๋ ๊ทธ๋ํ ) == Bidirection Graph(์๋ฐฉํฅ ๊ทธ๋ํ)
A-E๋ AโE์ EโA๋ฅผ ๋ํ๋ธ๋ค.
์๋ฐฉํฅ ๊ทธ๋ํ๋ ๋ชจ๋ Directed Graph๋ก ๋ณ๊ฒฝํด์ ๋ฌธ์ ๋ฅผ ํ ์ ์๋ค.
์ผ๋ฐ์ ์ผ๋ก ๊ทธ๋ํ๋ผํ๋ฉด ๋ฐฉํฅ์ด์๋ ๊ทธ๋ํ๋ฅผ ๋งํ๋ ๊ฒ์ด๋ค.
Multiple Edge : ๋ ์ ์ ์ฌ์ด์ ๊ฐ์ ์ด ์ฌ๋ฌ ๊ฐ์ผ ์๋ ์๋ค.
a-c๋ ์ฐ๊ฒฐํ๋ ๊ฐ์ ์ด 2๊ฐ์ด๋ค.
๋ ๊ฐ์ ์ ์๋ก ๋ค๋ฅธ ๊ฐ์ ์ด๋ค.
Loop(๋ฃจํ) : ๊ฐ์ ์ ์ ๋ ์ ์ด ๊ฐ์ ๊ฒฝ์ฐ(4๋ฒ)
๊ฐ์ค์น(Weight) : ๊ฐ์ ์ ๊ฐ์ค์น๊ฐ ์๋ ๊ฒฝ์ฐ์ด๋ค.
์ด๋ ๊ฑฐ๋ฆฌ, ์ด๋ํ๋๋ฐ ํ์ํ ์๊ฐ, ํ์ํ ๋น์ฉ ๋ฑ๋ฑ๋ฑ
๊ฐ์ค์น๊ฐ ์๋ ๊ฒฝ์ฐ์๋ 1์ด๋ผ๊ณ ์๊ฐํ๋ฉด๋๋ค.
์ฐจ์(degree) : ์ ์ ๊ณผ ์ฐ๊ฒฐ๋์ด ์๋ ๊ฐ์ ์ ๊ฐ์์ด๋ค.
์์ ๊ฐ์ค์น ๊ทธ๋ฆผ์ผ๋ก ์๋ฅผ ๋ค์ด๋ณด์๋ฉด
1์ ์ฐจ์ : 2
2์ ์ฐจ์ : 4
Directed Graph์ ๊ฒฝ์ฐ์๋ ์ฐจ์๊ฐ ๋๊ฐ์ง๊ฐ ์๋ค.
in-degree(์ ์ ์ผ๋ก ๋ค์ด์ค๋ ๊ฐ์ ์ ์)
out-degree(์ ์ ์์ ๋๊ฐ๋ ๊ฐ์ ์ ์)
๊ทธ๋ํ์ ํํ์ ๊ทธ๋ํ๋ฅผ ์ ์ฅํ๋ ๋ฐฉ์์ด๋ค. ์ด๋ ์ ์ ์ ์๋ ์ ์๋ก ์ ์ฅํ๊ฒ ๋๊ณ , ๊ฐ์ ์ ์ ์ ์ฌ์ด์ ๊ด๊ณ๋ฅผ ์ ์ฅํ๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๊ฐ์ ์ ์ ์ฅํ๋ ๊ฒ์ด ๊ทธ๋ํ๋ฅผ ์ ์ฅํ๋ ๊ฒ์ด๋ค.
๋ณดํต ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์์๋ ์ฒซ์งธ ์ค์ ์ ์ ์ ๊ฐ์(n)๊ณผ ๊ฐ์ ์ ๊ฐ์(m)์ ์ ๋ ฅ ๋ฐ๊ณ ๊ฐ์ ์ ๊ฐ์๋งํผ ๋์งธ ์ค๋ถํฐ ๊ฐ์ ์ ์ ๋ณด๋ฅผ ์ ๋ ฅ ๋ฐ๋๋ค.
๋ฐฉํฅ์ด ์๋ ๊ทธ๋ํ๋ผ๋ฉด ์ธ์ ํ๋ ฌ์ ๋น๋์นญ์ด๋ค.
๊ทธ๋ํ์์ ์ ์ (node)๊ณผ ๊ฐ์ (edge)๋ค์ ์ฐ๊ฒฐ๊ด๊ณ๋ฅผ ์ ์ฌ๊ฐ ํ๋ ฌ๋ก ํํํ ๊ฒ์ด๋ค.
๊ทธ๋ํ G = (V, E)๋ฅผ n >= 1
(n์ ์ ์ ์ด ์)์ ์ ์ ์ ๊ฐ์ง ๊ทธ๋ํ๋ผ๊ณ ํ์์ ๋ ๊ทธ๋ํ G์ ๋ํ ์ธ์ ํ๋ ฌ์ ํฌ๊ธฐ๋ n * n
์ด๋ฉฐ a[n, n]
ํฌ๊ธฐ์ 2์ฐจ์ ๋ฐฐ์ด๋ก ํํ๋๋ค. ์ด๋ a[n, n]์์ a[i, j] โ E(G)
๋ผ๋ฉด 1๊ฐ์ ์๋๋ผ๋ฉด 0์ ๊ฐ์ ๊ฐ์ง๊ฒ ๋๋ค.
์ ์ ์ ๊ฐ์๋ฅผ V๊ฐ๋ผ๊ณ ํ์ ๋, V*V
ํฌ๊ธฐ์ ์ด์ฐจ์ ๋ฐฐ์ด์ ์ด์ฉํ๋ค.
Undirected Graph ์์๋ A[i][j] == A[j][i]
์ด๋ค.
์๋ ๊ฐ์ ๋ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ์ ์ฌ์ฉํ์ง ์๋๋ค.(์ฌ์ด ๋ฌธ์ ๋ฅผ ํ ๋ ์ฌ์ฉ)
๊ฐ์ค์น๊ฐ ์์ ๊ฒฝ์ฐ์๋ ๊ฐ์ค์น๋ ๊ฐ์ด ์ ์ฅํด์ฃผ๋ฉด๋๋ค.
๋ง์ฝ ๊ฐ์ค์น๊ฐ 0<=w์ผ ๊ฒฝ์ฐ์๋ ๊ฐ์ ์ด ์๋ ๊ฒฝ์ฐ์๋ -1์ ์ ์ฅํด์ฃผ๋ฉด๋๋ค.
ํ์ง๋ง ๊ฐ์ค์น์ ๋ฒ์๊ฐ ์ ์๋ผ๋ฉด! 1. ๊ฐ์ ์ ์กด์ฌ ์ฌ๋ถ(1,0)๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด 2. ๊ฐ์ค์น ์ ๋ณด๋ฅผ ์ ์ฅํ๋ ๋ฐฐ์ด ์ ์กฐํฉํด์ ์ฌ์ฉํ ์ ์๋ค.
O(V^2)
์ด๋ค ๋ ธ๋ v์ ์ธ์ ํ ๋ชจ๋ ๋ ธ๋ ์ฐพ๊ธฐ O(n)์๊ฐ
์ด๋ค ์์ง(u,v)๊ฐ ์กด์ฌํ๋์ง ๊ฒ์ฌ O(1)
์ธ์ ํ๋ ฌ์ ํํํ ๋ ์ฐ๊ฒฐ๋์ง ์์๋ ๋ถ๋ถ๊น์ง ๋ชจ๋ ํํ์ด ๋๋ค. (์ฐ๊ฒฐ๋์ง ์์ ๋ถ๋ถ์ 0์ผ๋ก ํํํ๋ค.) ์๊ณ ๋ฆฌ์ฆ์ ๊ตฌํํ ๋์๋ 0๊น์ง ๋ชจ๋ ์กฐ์ฌ๋ฅผ ํด์ผํ๋ฏ๋ก ํจ์จ์ด ๋จ์ด์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ ์ธ์ ๋ฆฌ์คํธ๋ ์ด๋ฌํ ๋จ์ ์ ๊ทน๋ณตํ๋ค.
std::vector()
๋ฅผ ์ด์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ๊ตฌํํ ์ ์๋ค. ( vector ์์๋ณด๊ธฐ )์ด๋ ์ธ์ ํ๋ ฌ๋ก ๊ตฌํํ๋ ๊ฒ๋ณด๋ค ๊ณต๊ฐ์ ์ ๊ฒ ์ฌ์ฉํ๋ค. ๊ฐ ์ ์ ์์ ์ฐ๊ฒฐ๋๋ ๋ฆฌ์คํธ์ ์์๋ ์ค์ํ์ง ์๋ค.
linked list๋ฅผ ์ด์ฉํด์ ๊ตฌํํ๋ค. ์ด ๋ A[i]๋ i์ ์ฐ๊ฒฐ๋ ์ ์ ์ linked list๋ก ํฌํจํ๊ณ ์๋ค.(i์ ์ฐ๊ฒฐ๋ ์ ์ ์ด ์ด ๋ช๊ฐ์ธ์ง ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค.)
์ด๋ ์ฐ๊ฒฐ๋ ์ ์ ์ ์ ์ฅํ๋ฏ๋ก ๊ฐ์ ์ ๋ํ๋ด๊ฒ ๋๋ค. ๋ชจ๋ ๊ฐ์ ์ด ํ๋ฒ ์ฉ ์ ์ฅ(O(E)=๊ฐ์ ์ ์)๋๋ค.
vector๋ก ๊ตฌํํ๊ธฐ
๊ทธ๋ฐ๋ฐ, linked list๋ ๊ตฌํํ๋๋ฐ ์๊ฐ์ด ์ค๋๊ฑธ๋ฆฌ๊ธฐ ๋๋ฌธ์, ์ฃผ๋ก vector์ ๊ฐ์ด ๊ธธ์ด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๋ฐฐ์ด์ ์ด์ฉํด์ ๊ตฌํํ๋ค.
์ฃผ์ํ ์ ์ด ํ๊ฐ์ง ์๋ค. cpp์์ vector์ ํํ์ ์ฃผ์ํด์ํ๋ค.
vector<int> a(10)
์ ํฌ๊ธฐ๊ฐ 10์ธ 1์ฐจ์ ๋ฐฐ์ด์ ์๋ฏธํ๋ค. (=int a[10]
)
vector<int> a[10]
์ int a๋ฐฐ์ด์ด 10๊ฐ๊ฐ ์๋ค๋ ๊ฒ์ ์๋ฏธํ๋ค.
A[i]๋ i์ ์ฐ๊ฒฐ๋ ์ ์ ๊ณผ ๊ทธ ๊ฐ์ ์ ๊ฐ์ค์น๋ฅผ linked list๋ก ํฌํจํ๋ค. ์ด๋ vector ์ปจํ ์ด๋์ ํ์ ์ผ๋ก pair๋ฅผ ์ฌ์ฉํ๋ค.( pair ์์๋ณด๊ธฐ )
O(E)
์ด๋ค ๋ ธ๋ v์ ์ธ์ ํ ๋ชจ๋ ๋ ธ๋ ์ฐพ๊ธฐ O(degree(v))
์ด๋ค ์ฃ์ง(u,v)๊ฐ ์กด์ฌํ๋ ์ง ๊ฒ์ฌ O(degree(u))
STL, array list๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ฒฝ์ฐ์๋ ๊ฐ์ ๋ฆฌ์คํธ๋ก ๊ทธ๋ํ๋ฅผ ์ ์ฅํ ์ ์๋ค.
๊ฐ์ ๋ฆฌ์คํธ๋ ๋ฐฐ์ด์ ์ด์ฉํด์ ๊ตฌํํ๋ฉฐ, ๊ฐ์ ์ ๋ชจ๋ ์ ์ฅํ๋ค.
์ ์ ์ ์ ๊ธฐ์ค์ผ๋ก ์ ๋ ฌ
๊ฐ ๊ฐ์ ์ ์ ์ ์ ์ ๊ธฐ์ค์ผ๋ก ๊ฐ์๋ฅผ ์ผ๋ค.
i | 0 | 1 | 2 | 3 | 4 | 5 |
cnt[i] | 0 | 2 | 2 | 2 | 3 | 3 |
๊ฐ ์ ์ ์ ๊ฐ์ ์์ ๋์ ํฉ์ ๊ตฌํ๋ค.
i | 0 | 1 | 2 | 3 | 4 | 5 |
cnt[i] | 0 | 2 | 4 | 6 | 9 | 12 |
i๋ฒ๊ณผ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ E[cnt[i-1]]๋ถํฐ E[cnt[i]-1]๊น์ง ์ด๋ค.
3๋ฒ๊ณผ ์ฐ๊ฒฐ๋ ๊ฐ์ ์ E[4]~E[6-1]๊น์ง
O(E)