๊ตญ๋ฏผ๋ํ๊ต์์ "์ฝ๊ฒ ๋ฐฐ์ฐ๋ ์๊ณ ๋ฆฌ์ฆ" ๊ต์ฌ๋ฅผ ์ด์ฉํ
๋ฐํ๋ช ๊ต์๋์ ๊ฐ์ ๊ต์์ ์ด์ฉํ์ฌ ์์ ๋ด์ฉ์ ์ ๋ฆฌํ์์ต๋๋ค
Topological Sorting
์์์ ๋ ฌ์ด๋ ์์ ๋ค์ ์ ํ ๊ด๊ณ๋ฅผ ๋ฐฉํฅ ๊ทธ๋ํ๋ก ํํํ ๋ ์ ํ ๊ด๊ณ๋ฅผ ์ด๊ธฐ์ง ์๋๋ก ์ ์ ์ ์ ๋ ฌํ๋ ๊ฒ์
=> ๋ชจ๋ ๊ฐ์ (u, v)์ ๋ํด ์ ์ u๊ฐ ์ ์ v๋ณด๋ค ์์ ์์นํ๋๋ก ์ ๋ ฌ
๋์์ด directed graph๋ก cycle์ด ์์ด์ผํจ!
= DAG
Kahn's Algorithm
์์ด๋์ด๋ ์ง์ ๊ฐ์ ์ด ์๋ ์ ์ ์ ์์ ๋๋ ๊ฒ์
์์๋ฅผ ์ดํด๋ณด๋ฉด
1. ์ง์
๊ฐ์ ์ด ์๋ ์ ์ ์ ๊ณจ๋ผ ๋ฆฌ์คํธ์ ๋ฃ์
2. ๊ณ ๋ฅธ ์ ์ ์ ์ ๊ฑฐํ๊ณ , ์ฐ๊ฒฐ๋ ๊ฐ์ ๋ ์ ๊ฑฐํจ
๋ชจ๋ ์ ์ ์ด ์ ๊ฑฐ๋ ๋๊น์ง ์ ๊ณผ์ ์ ๋ฐ๋ณต
Implementation Details
pseudo code๋ฅผ ์ดํด๋ณด๋ฉด
- ๊ฐ ์ ์ ์ ์ง์ถ ๊ฐ์ ์ O(1) ๋ง์ ํ์ธํ๊ธฐ ์ํด ๊ทธ๋ํ๋ฅผ ์ธ์ ๋ฆฌ์คํธ๋ก ๊ตฌํ
- S์ ๊ฐ์ ๋น ๋ฅด๊ฒ ๋ฃ๊ณ ๋นผ๋ ค๋ฉด List๋ Queue๋ฑ์ผ๋ก ๊ตฌํ
=> ์ ์ ์์๊ฐ ์ค์ํ์ง ์๊ธฐ์ - ์ ์ v์ ์ง์
๊ฐ์ ์ด ์์์ O(1)๋ง์ ํ์ธํ๋ ค๋ฉด ๋ชจ๋ ์ ์ v๋ง๋ค ์ง์
๊ฐ์ ์๋ฅผ d[v]์ ๊ธฐ๋ก
- ๊ฐ์ ์ ์ง์ ์ง์ธ ํ์ ์์
=> d[v]๋ฅผ ํตํด ์ง์ ๊ฐ์ ์๋ฅผ ์ ์ ์์ผ๋ฏ๋ก
์ธ์ ๋ฆฌ์คํธ์ ๊ฒฝ์ฐ ๊ฐ๊ฐ์ ๋ ธ๋์ ๋ํด ์ด๋ค ๋ ธ๋๋ก ํฅํ๋์ง๋ฅผ ๊ธฐ๋กํด๋
Complexity Analysis
๊ต์ฅํ ์ง๊ด์ ์ผ๋ก ๋ณต์ก๋๋ฅผ ํ์ ํ ์ ์์
pseudo code๋ฅผ ๋ฐํ์ผ๋ก
adj๋ฅผ ํตํด ๊ฐ ๋ ธ๋์ ์ง์ ๊ฐ์ ๊ฐฏ์๋ฅผ ์ธ์ฃผ๋ ๋ถ๋ถ์ ๊ฐ์ ์ ๋งํผ์ธ O(|E|)
๊ฐ ๋ ธ๋๊ฐ ์ง์ ๊ฐ์ ์ด ์๋์ง ํ๋ณํ๊ณ S์ ์ถ๊ฐํ๋ ๋ถ๋ถ์ ๋ ธ๋ ์ ๋งํผ์ธ O(|V|)
while์ ํตํด S๊ฐ 0์ด๋ ๋ ๊น์ง ์ฆ, ๋ ธ๋ ๊ฐฏ์์ธ |V| ๋งํผ ๋ฐ๋ณตํ๋ฉฐ
for๋ฌธ์ ํตํด adj๋ก ์ฐ๊ฒฐ๋ ๋ ธ๋์ ๊ฐ์ ์ ๋ค ๋์ด๋ฒ๋ฆฌ๋ฏ๋ก (d[v]๋ฅผ -1 ํจ) ๊ฐ์ ๊ฐฏ์์ธ |E| ๋งํผ์ด ์คํ๋จ
์ฆ, O(|V| + |E|)
์ด ํฉ์น๋ฉด O(|V| + |E|) ๊ฐ ๋จ
(for๋ฌธ์ด ๊ฐ ๊ฐ์ ์ ํ ๋ฒ๋ง ์ฒ๋ฆฌํ๋ฏ๋ก ์ฆ, while๋ฌธ์ด ๋ ๋๋ง๋ค ๋ชจ๋ ๊ฐ์ ์ ์ฌ๋ฌ ๋ฒ ๋ฐ๋ณตํ์ง ์๊ธฐ์ |V| x |E| ๊ฐ ์๋๊ณ |V| + |E|์)
=> ๋ชจ๋ ์ ์ ๊ณผ ๊ฐ์ ์ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธ
DFS ๊ธฐ๋ฐ ์๊ณ ๋ฆฌ์ฆ
๊น์ด ์ฐ์ ํ์(DFS)์ ํน์ง์ ์์ฉํ์ฌ ์์์ ๋ ฌ ํ๋ ๊ฒ์
=> out-degree๊ฐ ์๋ ์ ์ ์ ๋จผ์ ์ ๊ฑฐํ๋ ๋ฐฉ์
Kahn's Algorithm๊ณผ ๋ฐ๋๋ก, DFS๋ฅผ ํ์ฒ๋ฆฌ(post-order visit) ๋ฐฉ์์ผ๋ก ์ํํ๋ฉด
๋ฐฉ๋ฌธํ ์์๊ฐ ์์์ ๋ ฌ์ ์ญ์์ด ๋๋ค๋ ์ ์ ์ด์ฉ
์์๋ ์ด๋ฌํ๋ฐ
1. ๋ฐฉ๋ฌธ ์์๋ฅผ ์ ์ฅํ Stack ์์ฑ
2. ๋ฐฉ๋ฌธ๋์ง ์์ ์ ์ ์ ์ ํํ์ฌ DFS ์ํ, ๋ฐฉ๋ฌธ ์์๋ฅผ Stack์ ์ ์ฅ
๋ชจ๋ ์ ์ ์ ๋ฐฉ๋ฌธํ ๋ ๊น์ง 2๋ฒ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ๋จ
(Stack์์ ๊ฐ์ ๊บผ๋ด๋ ์์๊ฐ ์์์ ๋ ฌ ์์๊ฐ ๋จ)
Complexity Analysis
pseudo code๋ฅผ ์ดํด๋ณด๋ฉด
DFS์ ์๊ฐ๋ณต์ก๋์ ๋์ผํจ
=> DFS๋ ๋ชจ๋ ์ ์ ๊ณผ ๊ฐ์ ์ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธํ๋ฏ๋ก O(|V| + |E|)
'๐ฅ Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
L15 - Boyer-Moore Algorithm (0) | 2024.11.30 |
---|---|
L14 - KMP Algorithm (1) | 2024.11.30 |
L12 - Single Source Shortest Paths (0) | 2024.11.28 |
L11 - Minimum Spanning Trees (0) | 2024.11.26 |
L10 - Disjoint Sets (0) | 2024.11.22 |