μœ„μƒμ •λ ¬ : Topological Sort

μœ„μƒμ •λ ¬ : Topological Sort#

https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTrFfQ%2Fbtq3mv5wMop%2F5eQn65f96LFAJxrZgEZOck%2Fimg.png

Fig. 19 사이클이 μ—†λŠ” λ°©ν–₯κ·Έλž˜ν”„(DAG)의 λͺ¨λ“  λ…Έλ“œλ₯Ό λ°©ν–₯성에 거슀λ₯΄μ§€ μ•Šλ„λ‘ μˆœμ„œλŒ€λ‘œ λ‚˜μ—΄ν•˜κΈ°#

μ§„μž…μ°¨μˆ˜ μ§„μΆœμ°¨μˆ˜

μ§„μž…μ°¨μˆ˜(Indegree)

νŠΉμ •ν•œ λ…Έλ“œλ‘œ λ“€μ–΄μ˜€λŠ” κ°„μ„ μ˜ 개수

μ§„μΆœμ°¨μˆ˜(Outdegree)

νŠΉμ •ν•œ λ…Έλ“œμ—μ„œ λ‚˜κ°€λŠ” κ°„μ„ μ˜ 개수

μœ„μ˜ μ •μ˜ 처럼 μœ„μƒ 정렬은 DAG(Direct Acyclic Graph, μˆœν™˜ν•˜μ§€ μ•ŠλŠ” λ°©ν–₯ κ·Έλž˜ν”„)μ—μ„œλ§Œ μˆ˜ν–‰ν•  수 μžˆλ‹€. μœ„μƒ μ •λ ¬μ—μ„œλŠ” μ—¬λŸ¬κ°€μ§€ 닡이 μ‘΄μž¬ν•  수 μžˆλ‹€. ν•œ λ‹¨κ³„μ—μ„œ 큐에 μƒˆλ‘­κ²Œ λ“€μ–΄κ°€λŠ” μ›μ†Œκ°€ 2개 이상인 κ²¨μš°κ°€ μžˆλ‹€λ©΄ μ—¬λŸ¬ 가지 닡이 μ‘΄μž¬ν•œλ‹€. λͺ¨λ“  μ›μ†Œλ₯Ό λ°©λ¬Έν•˜κΈ° 전에 큐가 λΉˆλ‹€λ©΄ 사이클이 μ‘΄μž¬ν•œλ‹€κ³  νŒλ‹¨ν•  수 μžˆλ‹€. 사이클에 ν¬ν•¨λœ μ›μ†Œ μ€‘μ—μ„œ μ–΄λ– ν•œ μ›μ†Œλ„ 큐에 듀어가지 λͺ»ν•œλ‹€.

μŠ€νƒμ„ ν™œμš©ν•œ DFSλ₯Ό μ΄μš©ν•΄ μœ„μƒμ •λ ¬μ„ μˆ˜ν–‰ν•  수 μžˆλ‹€. μ—¬κΈ°μ„œλŠ” 큐λ₯Ό μ΄μš©ν•œ κ²ƒλ§Œ 닀룬닀.

방법#

큐λ₯Ό μ΄μš©ν•˜λŠ” μœ„μƒμ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ˜ λ™μž‘ 과정은 λ‹€μŒκ³Ό κ°™λ‹€. 큐λ₯Ό μ΄μš©ν•˜λŠ” 것은 dequeλ₯Ό μ΄μš©ν•˜λ©΄ νŽΈν•˜λ‹€.

  1. μ§„μž…μ°¨μˆ˜κ°€ 0인 λͺ¨λ“  λ…Έλ“œλ₯Ό 큐에 λ„£λŠ”λ‹€.

  2. 큐가 빌 λ•Œ κΉŒμ§€ λ‹€μŒ 과정을 λ°˜λ³΅ν•œλ‹€.

    1. νμ—μ„œ μ›μ†Œλ₯Ό κΊΌλ‚΄ ν•΄λ‹Ή λ…Έλ“œμ—μ„œ λ‚˜κ°€λŠ” 간선을 κ·Έλž˜ν”„μ—μ„œ μ œκ±°ν•œλ‹€.

    2. μƒˆλ‘­κ²Œ μ§„μž…μ°¨μˆ˜κ°€ 0이 된 λ…Έλ“œλ₯Ό 큐에 λ„£λŠ”λ‹€.

결과적으둜 각 λ…Έλ“œκ°€ 큐에 λ“€μ–΄μ˜¨ μˆœμ„œκ°€ μœ„μƒμ •λ ¬μ„ μˆ˜ν–‰ν•œ 결과와 κ°™λ‹€.

μ€„μ„Έμš°κΈ°λ¬Έμ œλ₯Ό 보면 queueλ₯Ό μ΄μš©ν•΄μ„œ 문제λ₯Ό ν•΄κ²°ν•œλ‹€. μ§„μž…μ°¨μˆ˜κ°€ 0인 경우의 λ…Έλ“œλ“€μ„ 큐에 넣은 λ‹€μŒ 큐가 비어버릴 λ•ŒκΉŒμ§€ 과정을 λ°˜λ³΅ν•œλ‹€. nowλ₯Ό 결과에 λ„£κ³ , now와 μ—°κ²°λœ λ…Έλ“œλ“€μ—μ„œ μ§„μž…μ°¨μˆ˜λ₯Ό ν•˜λ‚˜μ”© λΊ€λ‹€. λ’€κ½λ¬΄λ‹ˆλ₯Ό ν•˜λ‚˜μ”© μ§€μš°λŠ” 과정이닀. 그리고 λ‹€μ‹œ μ§‘μž…μ°¨μˆ˜κ°€ 0인 것듀을 λ‹€μ‹œ 큐에 λ„£κ³  κ·Έ μˆœμ„œλŒ€λ‘œ FIFO둜 과정을 λ°˜λ³΅ν•œλ‹€.

μ„±λŠ₯#

μœ„μƒ 정렬을 μœ„ν•΄μ„œ μ°¨λ‘€λŒ€λ‘œ λͺ¨λ“  λ…Έλ“œλ₯Ό ν™•μΈν•˜λ©° 각 λ…Έλ“œμ—μ„œ λ‚˜κ°€λŠ” 간선을 μ°¨λ ˆλŒ€λ‘œ μ œκ±°ν•΄μ•Όν•œλ‹€. λ•Œλ¬Έμ— μœ„μƒ μ •λ ¬ μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ” \(O(V+E)\)이닀.