DevLog πŸ“¨/Algorithm

μœ„μƒ μ •λ ¬ Topological Sorting

cece00 2023. 2. 14. 17:38

μœ„μƒ μ •λ ¬

μœ„μƒ μ •λ ¬μ΄λž€?

μœ„μƒ μ •λ ¬ Topological Sorting μ΄λž€ λ°©ν–₯이 μžˆλŠ” κ·Έλž˜ν”„μ˜ 정점듀을 λ³€μ˜ λ°©ν–₯을 거슀λ₯΄μ§€ μ•Šλ„λ‘ λ‚˜μ—΄ν•˜λŠ” 것을 μ˜λ―Έν•œλ‹€. 즉 ν•œ 정점에 λ„λ‹¬ν•˜κΈ° μ „ λ¨Όμ € 거쳐야 ν•˜λŠ” μ •μ λ“€μ˜ μˆœμ„œκ°€ μžˆλŠ” 경우 μ‚¬μš©ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.

λ§Œμ•½ νŠΉμ • μˆ˜κ°•κ³Όλͺ©μ— μ„ μˆ˜κ³Όλͺ©μ΄ μžˆλ‹€λ©΄ κ·Έ μ„ μˆ˜κ³Όλͺ©λΆ€ν„° μˆ˜κ°•ν•΄μ•Ό ν•˜λ―€λ‘œ, νŠΉμ • κ³Όλͺ©λ“€μ„ μˆ˜κ°•ν•΄μ•Ό ν•  λŒ€ μœ„μƒ 정렬을 톡해 μ˜¬λ°”λ₯Έ μˆ˜κ°• μˆœμ„œλ₯Ό μ°Ύμ•„λ‚Ό 수 μžˆλ‹€. 이와 같이 μ„ ν›„ 관계가 μ •μ˜λœ κ·Έλž˜ν”„ ꡬ쑰 μƒμ—μ„œ μ„ ν›„ 관계에 따라 μ •λ ¬ν•˜κΈ° μœ„ν•΄ μœ„μƒ 정렬을 μ΄μš©ν•  수 μžˆλ‹€. μ •λ ¬μ˜ μˆœμ„œλŠ” λ°©ν–₯이 μžˆλŠ” (유ν–₯의) κ·Έλž˜ν”„μ˜ ꡬ쑰에 따라 μ—¬λŸ¬ 개의 μ’…λ₯˜κ°€ λ‚˜μ˜¬ 수 μžˆλ‹€. μœ„μƒ 정렬이 μ„±λ¦½ν•˜κΈ° μœ„ν•΄μ„œλŠ” λ°˜λ“œμ‹œ κ·Έλž˜ν”„μ˜ μˆœν™˜μ΄ μ‘΄μž¬ν•˜μ§€ μ•Šμ•„μ•Ό ν•œλ‹€. 즉, κ·Έλž˜ν”„κ°€ λΉ„μˆœν™˜ 유ν–₯ κ·Έλž˜ν”„ directed acyclic graph μ—¬μ•Ό ν•œλ‹€.

μœ„μƒ μ •λ ¬μ˜ μˆ˜ν–‰κ³Όμ •

  1. 자기 μžμ‹ μ„ κ°€λ¦¬ν‚€λŠ” 변이 μ—†λŠ” 정점을 μ°ΎλŠ”λ‹€.
  2. 찾은 정점을 좜λ ₯ν•˜κ³  좜λ ₯ν•œ 정점과 κ·Έ μ •μ μ—μ„œ μΆœλ°œν•˜λŠ” 변을 μ‚­μ œν•œλ‹€.
  3. 아직 κ·Έλž˜ν”„μ— 정점이 λ‚¨μ•„μžˆμœΌλ©΄ 1둜 λŒμ•„κ°€κ³ , μ•„λ‹ˆλ©΄ μ•Œκ³ λ¦¬μ¦˜μ„ μ’…λ£Œν•œλ‹€.

μ˜ˆμ‹œ

Topological Sorting Example

μœ„ κ·Έλž˜ν”„μ—μ„œ 정점 xλ‘œλΆ€ν„° y둜의 간선은 일 xκ°€ yλ₯Ό μ‹œμž‘ν•˜κΈ° μ „ μ„ ν–‰λ˜μ–΄μ•Ό 함을 λ‚˜νƒ€λ‚Έλ‹€. 이 κ·Έλž˜ν”„λ₯Ό λŒ€μƒμœΌλ‘œ μœ„μƒ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ„ μˆ˜ν–‰ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€. (κ°€μž₯ μž‘μ€ 수 λΆ€ν„°)

회차 쑰건 μˆ˜ν–‰ 좜λ ₯
1 2λ₯Ό κ°€λ¦¬ν‚€λŠ” 간선이 μžˆλ‹€ λ‹€μŒ μ •μ μœΌλ‘œ λ„˜μ–΄κ°„λ‹€ -
2 3을 κ°€λ¦¬ν‚€λŠ” 간선이 μ—†λ‹€ 3을 좜λ ₯, 정점 3κ³Ό κ°„μ„  <3, 8>, <3, 10> 을 μ‚­μ œ 3
3 5λ₯Ό κ°€λ¦¬ν‚€λŠ” 간선이 μ—†λ‹€ 5λ₯Ό 좜λ ₯, 정점 5와 κ°„μ„  <5, 11> μ‚­μ œ 3 5
4 7을 κ°€λ¦¬ν‚€λŠ” 간선이 μ—†λ‹€ 7을 좜λ ₯, 정점 7κ³Ό κ°„μ„  <7, 11>, <7, 8> μ‚­μ œ 3 5 7
5 8을 κ°€λ¦¬ν‚€λŠ” 간선이 μ—†λ‹€ 8을 좜λ ₯, 정점 8κ³Ό κ°„μ„  <8, 9> μ‚­μ œ 3 5 7 8
6 9λ₯Ό κ°€λ¦¬ν‚€λŠ” 간선이 μžˆλ‹€ λ‹€μŒ μ •μ μœΌλ‘œ λ„˜μ–΄κ°„λ‹€ 3 5 7 8
7 10을 κ°€λ¦¬ν‚€λŠ” 간선이 μžˆλ‹€ λ‹€μŒ μ •μ μœΌλ‘œ λ„˜μ–΄κ°„λ‹€ 3 5 7 8
8 11을 κ°€λ¦¬ν‚€λŠ” 간선이 μ—†λ‹€ 11을 좜λ ₯, 정점 11κ³Ό κ°„μ„  <11,2>, <11, 9>, <11, 10>을 μ‚­μ œ 3 5 7 8 11
9 남은 정점 2λ₯Ό κ°€λ¦¬ν‚€λŠ” 간선이 μ—†λ‹€ 2λ₯Ό 좜λ ₯, 정점 2 μ‚­μ œ 3 5 7 8 11 2
10 남은 정점 9λ₯Ό κ°€λ¦¬ν‚€λŠ” 간선이 μ—†λ‹€ 9λ₯Ό 좜λ ₯, 정점 9 μ‚­μ œ 3 5 7 8 11 2 9
11 남은 정점 10을 κ°€λ¦¬ν‚€λŠ” 간선이 μ—†λ‹€ 10을 좜λ ₯, 정점 10 μ‚­μ œ 3 5 7 8 11 2 9 10
12 λ‚¨μ•„μžˆλŠ” 정점이 μ—†λ‹€ 루프λ₯Ό μ’…λ£Œν•œλ‹€ 3 5 7 8 11 2 9 10

μ•Œκ³ λ¦¬μ¦˜

μœ„μƒ μ •λ ¬μ˜ 일반적인 μ•Œκ³ λ¦¬μ¦˜μ€ μ •μ μ˜ μ–‘μˆ˜ λ…Έλ“œμ˜ μ„ ν˜• μ‹€ν–‰ μ‹œκ°„μ„ κ°–λŠ”λ‹€. $O(|V|+|E|)$

더 μ•Œμ•„λ³Ό 것

  • Kahn μ•Œκ³ λ¦¬μ¦˜
  • DFS μ•Œκ³ λ¦¬μ¦˜μ„ κΈ°λ°˜ν•œ μœ„μƒ μ •λ ¬ λŒ€μ²΄
  • Parallel μ•Œκ³ λ¦¬μ¦˜

μœ„ν‚€ν”Όλ””μ•„ μ°Έκ³ 

'DevLog πŸ“¨ > Algorithm' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[DevLog] [Alogorithm] μ •λ ¬ Sorting Problem  (0) 2023.08.13