πŸ“š Kahn μ•Œκ³ λ¦¬μ¦˜

πŸ“š Kahn μ•Œκ³ λ¦¬μ¦˜

  • 유ν–₯ κ·Έλž˜ν”„μ—μ„œ μœ„μƒ μ •λ ¬(Topological sorting)을 μˆ˜ν–‰ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜ 이닀.

πŸ’‘ TIP : μœ„μƒ μ •λ ¬μ΄λž€?

  • μˆœμ„œκ°€ μ‘΄μž¬ν•˜λŠ” μž‘μ—…λ“€μ„ μ •λ ¬ν•˜λŠ” κ³Όμ •μœΌλ‘œ, 사이클이 μ—†λŠ” λ°©ν–₯ λΉ„μˆœν™˜ κ·Έλž˜ν”„μ—μ„œλ§Œ μˆ˜ν–‰ κ°€λŠ₯ν•˜λ‹€.
  • μ˜ˆμ‹œλ‘œ μ„ μˆ˜ κ³Όλͺ©, ν”„λ‘œμ νŠΈ μž‘μ—… μˆœμ„œ, νŒ¨ν‚€μ§€ μ˜μ‘΄μ„± ν•΄κ²° λ“±λ“±

πŸ”Ž Kahn μ•Œκ³ λ¦¬μ¦˜ λ™μž‘ 원리

  1. μ§„μž… 차수(in-degree)λ₯Ό κ³„μ‚°ν•œλ‹€.
    • μ§„μž… μ°¨μˆ˜λž€ νŠΉμ • λ…Έλ“œλ‘œ λ“€μ–΄μ˜€λŠ” κ°„μ„ μ˜ 개수λ₯Ό μ˜λ―Έν•œλ‹€.
  2. μ§„μž… μ°¨μˆ˜κ°€ 0인 λ…Έλ“œλ₯Ό 큐(queue)에 μ‚½μž…ν•œλ‹€.
    • μ§„μž… μ°¨μˆ˜κ°€ β€˜0β€™μ΄λž€ 것은 μ„ μˆ˜ 쑰건없이 μ‹œμž‘ν•  수 μžˆλŠ” κ³Όλͺ©μ΄λΌκ³  ν•  수 μžˆλ‹€.
  3. νμ—μ„œ λ…Έλ“œλ₯Ό ν•˜λ‚˜μ”© κΊΌλ‚΄λ©° μœ„μƒ 정렬을 μˆ˜ν–‰ν•œλ‹€.
    • κΊΌλ‚Έ λ…Έλ“œμ™€ μ—°κ²°λœ 간선을 μ œκ±°ν•˜κ³ , ν•΄λ‹Ή λ…Έλ“œμ—μ„œ 이동할 수 μžˆλŠ” λ…Έλ“œλ“€μ˜ μ§„μž… 차수λ₯Ό 1 κ°μ†Œμ‹œν‚¨λ‹€.
    • κ°μ†Œ ν›„ μ§„μž… μ°¨μˆ˜κ°€ 0이 된 λ…Έλ“œλŠ” 큐에 μ‚½μž…ν•œλ‹€.
  4. λͺ¨λ“  λ…Έλ“œλ₯Ό λ°©λ¬Έν•˜λ©΄ μ •λ ¬ μ™„λ£Œ!
    • λͺ¨λ“  λ…Έλ“œλ₯Ό λ°©λ¬Έν•˜μ§€ λͺ»ν•˜κ³  큐가 비어버린닀면 사이클 이 μ‘΄μž¬ν•˜λŠ” 것이닀.

πŸš€ Kahn μ•Œκ³ λ¦¬μ¦˜μ„ ν™œμš©ν•œ Leecode 문제!!

πŸ“Š μ‹œκ°„ λ³΅μž‘λ„ 계산

  • degree 계산 : O(E)
  • 큐에 μ‚½μž… 및 제거 : O(V)
  • μœ„μƒ μ •λ ¬ μˆ˜ν–‰ : O(V+E)

결과적으둜 Kahn μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ” O(V+E) (V : λ…Έλ“œ 수, E : κ°„μ„  수)이닀.

πŸ“Œ Kahn μ•Œκ³ λ¦¬μ¦˜μ˜ νŠΉμ§•

  • 유ν–₯ λΉ„μˆœν™˜ κ·Έλž˜ν”„μ—μ„œλ§Œ λ™μž‘κ°€λŠ₯
  • BFS기반으둜 μˆ˜ν–‰λ˜λ©° μ§„μž… 차수(in-degree)λ₯Ό μ‚¬μš©
  • 사이클이 μžˆλŠ” 경우 μœ„μƒ 정렬을 λ§Œλ“€ 수 μ—†μŒ -> 이λ₯Ό 톡해 사이클 κ²€μΆœ κ°€λŠ₯!!