πŸ”– λ‹€μ΅μŠ€νŠΈλΌ

πŸ” λ‹€μ΅μŠ€νŠΈλΌ μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„λ³΅μž‘λ„κ°€ $O( (V+E)logV )$ κ°€ λ˜λŠ” μ΄μœ λŠ”?

λ‹€μ΅μŠ€νŠΈλΌ μ•Œκ³ λ¦¬μ¦˜μ€ μš°μ„ μˆœμœ„νμ— 간선듀을 λ„£κ³  λΉΌλŠ” κ³Όμ •μœΌλ‘œ 이루어져 μžˆλ‹€. λ”°λΌμ„œ 각각에 ν•΄λ‹Ήν•˜λŠ” 과정에 λ“œλŠ” μ‹œκ°„λ³΅μž‘λ„λ₯Ό λ”ν•΄μ£ΌλŠ” λ°©μ‹μœΌλ‘œ ꡬ해볼 수 μžˆλ‹€.

  1. PriorityQueue add κ³Όμ •
  • μ΅œμ•…μ˜ 경우 λͺ¨λ“  간선듀을 pq에 λ„£μ–΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ 생기기 λ•Œλ¬Έμ— $ElogE$ 의 μ‹œκ°„μ΄ κ±Έλ¦°λ‹€.
  • $E < V^2$ 인 ν¬μ†Œ κ·Έλž˜ν”„μ˜ 경우 λ‹€μŒκ³Ό 같이 μ‹œκ°„λ³΅μž‘λ„λ₯Ό λ°”κΎΈμ–΄μ„œ μ“Έ 수 μžˆλ‹€.

$$ O( ElogE ) = O( ElogV^2 ) = O( 2ElogV) = O( ElogV )$$

  • λ”°λΌμ„œ μš°μ„ μˆœμœ„νμ— 간선을 λ„£λŠ” μ‹œκ°„μ€ (μ •ν™•νžˆ λ§ν•˜λ©΄ ν¬μ†Œ κ·Έλž˜ν”„μ˜ 경우) $O(ElogV)$ 라고 ν•  수 μžˆλ‹€.
  1. PriorityQueue poll κ³Όμ •
  • PriorityQueueμ—μ„œ ν•œλ²ˆ κΊΌλ‚΄μ§μœΌλ‘œμ¨ 방문이 된 정점은 μ΅œμ†Ÿκ°’μ΄ κ΅¬ν•΄μ‘Œλ‹€κ³  보μž₯ν•  수 μžˆμœΌλ―€λ‘œ 이후 PriorityQueue에 ν•΄λ‹Ή 정점이 듀어가지 μ•ŠλŠ”λ‹€.
  • λ”°λΌμ„œ μš°μ„ μˆœμœ„νμ—μ„œ 간선을 λΉΌλŠ” νšŸμˆ˜λŠ” μ •μ μ˜ κ°―μˆ˜μ— κ·Όμ‚¬ν•˜κ²Œ λœλ‹€.
  • κ·Έλ ‡λ‹€λ©΄ μ‹œκ°„ λ³΅μž‘λ„λŠ” $O(VlogE)$ 라고 μ“Έ 수 μžˆλ‹€.
  • ν¬μ†Œκ·Έλž˜ν”„μ˜ 경우 1번 μ—μ„œμ˜ 과정을 λ°˜λ³΅ν•΄ $O(VlogV)$ 라고 μ“Έ 수 μžˆλ‹€.
  1. κ²°λ‘ 
  • μ•žμ„œ ꡬ해진 add와 poll κ³Όμ •μ˜ μ‹œκ°„λ³΅μž‘λ„λ₯Ό 더해볼 λ•Œ λ‹€μ΅μŠ€νŠΈλΌ μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„ λ³΅μž‘λ„λŠ”

$O( (V+E)logV )$

라고 ν•  수 μžˆλ‹€.

πŸ” λ‹€μ΅μŠ€νŠΈλΌ μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„λ³΅μž‘λ„λ₯Ό ꡬ할 λ•Œ μ™œ ν¬μ†Œκ·Έλž˜ν”„μ˜ 경우둜 κ΅¬ν• κΉŒ?

ν¬μ†Œκ·Έλž˜ν”„λŠ” $E < V^2$ λ₯Ό λ§Œμ‘±ν•˜λŠ” κ·Έλž˜ν”„μ΄λ‹€. V개의 정점을 κ°€μ§€λŠ” κ·Έλž˜ν”„λ₯Ό μƒκ°ν•΄λ³΄μž. 이 κ·Έλž˜ν”„μ—μ„œ 쀑볡없이 λ§Œλ“€ 수 μžˆλŠ” μ΅œλŒ€ κ°„μ„ μ˜ κ°œμˆ˜λŠ” λ‹€μŒκ³Ό κ°™λ‹€. $$Emax = _VC_2 = V(V-1)/2$$ 즉 μ΅œλŒ€λ‘œ 간선을 λ§Œλ“€μ–΄λ„ $V^2$ 이 λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 밀집 κ·Έλž˜ν”„κ°€ 되렀면 쀑볡간선이 ν•„μš”ν•˜κ²Œ λœλ‹€. ν•˜μ§€λ§Œ μ΅œλ‹¨ 경둜λ₯Ό κ΅¬ν•˜λŠ” λ‹€μ΅μŠ€νŠΈλΌ μ•Œκ³ λ¦¬μ¦˜μ˜ νŠΉμ„±μƒ 쀑볡간선 쀑 κ°€μž₯ λΉ„μš©μ΄ 적은 κ°„μ„ λ§Œ μ•Œκ³ λ¦¬μ¦˜μ— λ“€μ–΄κ°€ 계산을 해도 닡이 λ‚˜μ˜€κΈ° λ•Œλ¬Έμ— 밀집 κ·Έλž˜ν”„ λ˜ν•œ ν¬μ†Œ κ·Έλž˜ν”„λ‘œ λ‹€μ΅μŠ€νŠΈλΌ μ•Œκ³ λ¦¬μ¦˜μ„ μ μš©ν•  수 있게 λœλ‹€. 이와 같은 이유둜 μ‹œκ°„λ³΅μž‘λ„λ₯Ό 계산할 λ•Œ ν¬μ†Œ κ·Έλž˜ν”„μ˜ 경우둜 κ³„μ‚°ν•˜κ²Œ λœλ‹€.

πŸ” λ‹€μ΅μŠ€νŠΈλΌ μ•Œκ³ λ¦¬μ¦˜μ— μŒμˆ˜κ°„μ„ μ΄ μžˆμ„ λ•Œ μ™œ μ‚¬μš©ν•  수 μ—†μ„κΉŒ?

λ‹€μ΅μŠ€νŠΈλΌ μ•Œκ³ λ¦¬μ¦˜μ—μ„œλŠ” ν˜„μž¬ 갈 수 μžˆλŠ” 정점 쀑 μ΅œμ†Œ λΉ„μš©μ„ κ°€μ§€λŠ” 정점을 μ°Ύμ•„ 방문을 ν•˜κ³  κ·Έ κ³³μ—μ„œ 갈 수 μžˆλŠ” μ •μ λ“€μ˜ μ΅œμ†Œ λΉ„μš©μ„ κ°±μ‹ ν•œλ‹€. 이 λ•Œ 방문된 정점은 μ΅œμ†Œ λΉ„μš©μ΄ κ΅¬ν•΄μ‘Œλ‹€λŠ” 것을 보μž₯ν•˜κΈ° λ•Œλ¬Έμ— 이후 λ‹€μ‹œ λ°©λ¬Έν•˜μ§€ μ•Šκ³  μ΅œμ†Ÿκ°’ λ˜ν•œ κ°±μ‹ λ˜μ§€ μ•ŠλŠ”λ‹€. ν•˜μ§€λ§Œ 음수인 간선이 μžˆλ‹€λ©΄ 방문이 λ˜μ—ˆμ–΄λ„ μΆ”ν›„ μŒμˆ˜κ°„μ„ μœΌλ‘œ 인해 더 적은 λΉ„μš©μ΄ λ‚˜μ˜¬ 수 μžˆμ§€λ§Œ λ°©λ¬Έλ˜μ—ˆκΈ° λ•Œλ¬Έμ— κ°±μ‹ λ˜μ§€ λͺ»ν•˜λ―€λ‘œ 졜적의 ν•΄λ₯Ό ꡬ할 수 μ—†λ‹€.

image

μœ„μ™€ 같은 μ˜ˆμ‹œμ˜ κ·Έλž˜ν”„μ—μ„œ A μ •μ μ—μ„œ μΆœλ°œν•  경우 λ¨Όμ € Cκ°€ 방문되게 되고 λΉ„μš©μ˜ μ΅œμ†Ÿκ°’μ€ 4둜 ν™•μ •λœλ‹€. ν•˜μ§€λ§Œ 이후 B->C κ°„μ„ μœΌλ‘œ -90 λΉ„μš©μ΄ λ‚˜μ˜¬ 수 μžˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  이미 방문된 C μ •μ μ˜ μ΅œμ†Ÿκ°’μ€ κ°±μ‹ λ˜μ§€ μ•ŠλŠ”λ‹€.

πŸ”– 벨만 ν¬λ“œ

πŸ” 벨만 ν¬λ“œ μ•Œκ³ λ¦¬μ¦˜μ—μ„œ κ°„μ„  순회λ₯Ό V-1 번 λ°˜λ³΅ν•˜λŠ” μ΄μœ λŠ”?

ν•œ μ •μ μ—μ„œ λ‹€λ₯Έ μ •μ κΉŒμ§€ κ°€λŠ”λ° μ΅œλŒ€ V-1 개의 간선을 κ±°μΉ  수 있기 λ•Œλ¬Έμ΄λ‹€. V번 μ΄μƒμ˜ 간선을 거쳐 λ°©λ¬Έν•œλ‹€λ©΄ μ€‘λ³΅λœ 간선을 κ±°μ³€λ‹€λŠ” 말이기 λ•Œλ¬Έμ— μ΅œμ†ŒλΉ„μš©μ΄λΌκ³  ν•  수 μ—†λ‹€. 즉, ν•œ μ •μ μ—μ„œ λ‹€λ₯Έ μ •μ κΉŒμ§€ κ°€λŠ” μ΅œμ†Œ λΉ„μš©μ„ κ΅¬ν•˜κΈ° μœ„ν•΄ κ°€λŠ₯ν•œ κ²½λ‘œλ“€μ„ λͺ¨λ‘ νƒμƒ‰ν•˜κΈ° μœ„ν•΄μ„œλŠ” V-1 번 κΉŒμ§€ λ°˜λ³΅μ„ ν•  수 μžˆμ–΄μ•Ό ν•œλ‹€.

πŸ”– ν”Œλ‘œμ΄λ“œ μ›Œμ…œ

πŸ” ν”Œλ‘œμ΄λ“œ μ›Œμ…œ μ•Œκ³ λ¦¬μ¦˜μ—μ„œ 음수 κ°„μ„  사이클을 νŒλ³„ν•  수 μžˆλŠ” 방법은?

음수 κ°„μ„  사이클이 μ—†λ‹€λ©΄ ν•œ 정점이 자기 μžμ‹ μœΌλ‘œ μ˜€λŠ” λΉ„μš©μ€ 항상 0이 λ˜μ–΄μ•Όλ§Œ ν•œλ‹€. ν•˜μ§€λ§Œ 음수 κ°„μ„  사이클이 μ‘΄μž¬ν•˜λ©΄ 자기 μžμ‹ μœΌλ‘œ λŒμ•„μ˜€λŠ” dist[i][i] 값이 0보닀 μž‘μ€ μŒμˆ˜κ°’μ„ κ°–κ²Œ λœλ‹€. 이λ₯Ό 톡해 음수 κ°„μ„  μ‚¬μ΄ν΄μ˜ 유무λ₯Ό νŒλ‹¨ν•  수 μžˆλ‹€.