-
Topological Sort(์์ ์ ๋ ฌ)์๊ณ ๋ฆฌ์ฆ 2025. 2. 18. 15:28
๐ง Topological Sort(์์ ์ ๋ ฌ):
**๋ฐฉํฅ์ฑ์ด ์๋ ๊ทธ๋ํ(Directed Acyclic Graph, DAG)**์์ ์ ํ ์์ ์ด ๋ฐ๋์ ๋จผ์ ์ํ๋์ด์ผ ํ๋ ์์ ํ๋ฆ์ ๊ฒฐ์ ํ๋ ์๊ณ ๋ฆฌ์ฆ์ด๋ค.
์ฆ, ์์ ์ ์์๋ฅผ ์ฐพ์๋ด๋ ๊ณผ์ !
โ๏ธ 1๏ธโฃ ํต์ฌ ๊ฐ๋
- Directed Acyclic Graph(DAG)
- ๋ฐฉํฅ์ฑ์ด ์๋ ๋น์ํ ๊ทธ๋ํ
- **์ํ(Cycle)**์ด ์์ผ๋ฉด ์์ ์ ๋ ฌ ๋ถ๊ฐ
๐ **๊ทธ๋ํ(Graph)**๋?
- ์ ์ (Vertex, Node): ๋ฐ์ดํฐ ํฌ์ธํธ
- ๊ฐ์ (Edge): ์ ์ ๊ฐ ๊ด๊ณ
- ๋ฐฉํฅ ๊ทธ๋ํ(Directed Graph): ๋ฐฉํฅ ํ์ดํ ์กด์ฌ → A → B
- ๋ฌด๋ฐฉํฅ ๊ทธ๋ํ(Undirected Graph): ๋ฐฉํฅ ํ์ดํ ์์ → A — B
๐ ๏ธ DAG ํน์ง
- ๋ฐฉํฅ(Directed): **๋ฐฉํฅ์ฑ์ด ์๋ ๊ฐ์ (Edge)**๋ก ๊ด๊ณ ํ์
- ๋น์ํ(Acyclic): ์ฌ์ดํด์ด ์๋ ๊ตฌ์กฐ
- ์ฌ์ดํด: ์ถ๋ฐ์ → ์ค๊ฐ → ์ถ๋ฐ์ ์ผ๋ก ๋ค์ ๋์์ค๋ ๊ฒฝ๋ก
DAG ์์
1 → 2 → 3
↑ ↓
4
โก๏ธ ๋ฐฉํฅ์ฑ:
- 1 → 2 → 3 ์ผ๋ฐฉํฅ ํ๋ฆ
- ์ด๋ ๋ ธ๋์์๋ ์ถ๋ฐํด๋ ๋๋์์ค์ง ์์ → DAG ๋ง์! โ
DAG๊ฐ ์๋ ๊ฒฝ์ฐ
1 → 2 → 3
↑ ↓
5 ← 4
- 2 → 3 → 4 → 5 → 2: ์ฌ์ดํด ์กด์ฌ ๐จ
- DAG ์๋!
- ์ง์
์ฐจ์(In-degree)
- ํด๋น ๋ ธ๋๋ก ๋ค์ด์ค๋ ๊ฐ์ ์ ๊ฐ์
- ์ง์ ์ฐจ์๊ฐ 0์ธ ๋ ธ๋๋ฅผ ๋จผ์ ์ฒ๋ฆฌ
โ๏ธ ์ง์ ์ฐจ์(In-degree)
๐ ๋น์ ๋ก ์ดํดํ๊ธฐ:
- ๋ ธ๋(Node) = ์์ (Task)
- ๊ฐ์ (Edge) = ์์กด ๊ด๊ณ(Dependency)
- A → B: B๋ฅผ ์ฒ๋ฆฌํ๋ ค๋ฉด A๊ฐ ์ ํ๋์ด์ผ ํจ
- B์ In-degree = 1 (A๋ก๋ถํฐ ์ค๋ ํ๋์ ํ์ดํ)
A → B → C
↑ ↓
D → E๐ ์ง์ ์ฐจ์์ ํต์ฌ ์ญํ
- **์์ ์ ๋ ฌ(Topological Sort)**์์ ์ง์ ์ฐจ์๊ฐ 0์ธ ๋ ธ๋๋ฅผ ํ์ ์์
- ์ง์ ์ฐจ์๊ฐ ์ค์ด๋๋ ๊ณผ์ ์ ํตํด ์์กด ๊ด๊ณ ํด์
๐ ์ค์ ํ์ฉ ์์
- ์ปดํ์ผ๋ฌ: ์ฝ๋์ ์์กด ๊ด๊ณ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋น๋ ์์ ๊ฒฐ์
- ํ๋ก์ ํธ ๊ด๋ฆฌ: **์์ (Task)**์ ์ ํ ๊ด๊ณ ์ ์ (Jira, MS Project)
- ๋ฐ์ดํฐ๋ฒ ์ด์ค: ํ ์ด๋ธ ์์ฑ ์์ ๊ฒฐ์ (Foreign Key ์์กด์ฑ)
๐ ์์์ ๋ ฌ ๋ถ์
1 → 2 → 3
↑ ↓
4๐ ํต์ฌ ๊ฐ๋ : ์ง์ ์ฐจ์(In-degree)
์์ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ **์ง์ ์ฐจ์(In-degree)**๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋์.
- ์ง์ ์ฐจ์(In-degree): ๋ ธ๋๋ก ๋ค์ด์ค๋ ๊ฐ์ ์ ์
- ์์ ์ ๋ ฌ ์์์ : ์ง์ ์ฐจ์ 0์ธ ๋ ธ๋๋ถํฐ ์์
๋ ธ๋ In-degree ์ด์ 1 0 ๋ค์ด์ค๋ ๊ฐ์ ์์ 2 2 1 → 2 & 4 → 2 3 1 2 → 3 4 0 ๋ค์ด์ค๋ ๊ฐ์ ์์ โ๏ธ ์ ๋ ฌ ๊ณผ์
๐ข STEP 1: ์ด๊ธฐ ํ ์์ฑ
- In-degree 0: 1, 4
- Queue: 1, 4
- ๊ฒฐ๊ณผ ๋ฆฌ์คํธ: []
๐ข STEP 2: 1 ๊บผ๋ด๊ธฐ
- Queue: 4
- ๊ฒฐ๊ณผ ๋ฆฌ์คํธ: [1]
- 1 → 2๋ก ์ฐ๊ฒฐ → ๋
ธ๋ 2์ In-degree ๊ฐ์
- In-degree(2): 2 → 1
๐ข STEP 3: 4 ๊บผ๋ด๊ธฐ
- Queue: 2
- ๊ฒฐ๊ณผ ๋ฆฌ์คํธ: [1, 4]
- 4 → 2๋ก ์ฐ๊ฒฐ → ๋
ธ๋ 2์ In-degree ๊ฐ์
- In-degree(2): 1 → 0 → ํ์ 2 ์ถ๊ฐ
๐ข STEP 4: 2 ๊บผ๋ด๊ธฐ
- Queue: 3
- ๊ฒฐ๊ณผ ๋ฆฌ์คํธ: [1, 4, 2]
- 2 → 3์ผ๋ก ์ฐ๊ฒฐ → ๋
ธ๋ 3์ In-degree ๊ฐ์
- In-degree(3): 1 → 0 → ํ์ 3 ์ถ๊ฐ
๐ข STEP 5: 3 ๊บผ๋ด๊ธฐ
- Queue: empty
- ๊ฒฐ๊ณผ ๋ฆฌ์คํธ: [1, 4, 2, 3]
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ํด๋ฆฌ๋ ํธ์ ๋ฒ(Euclidean Algorithm) (0) 2025.02.07 - Directed Acyclic Graph(DAG)