본문으로 건너뛰기
김신건의 로그

Johnson's Algorithm: sparse APSP

· 수정 · 📖 약 1분 · 202자/단어 #algorithm #graph #shortest-path #apsp
Johnson's Algorithm, 존슨 알고리즘

정의

Johnson’s algorithm 은 sparse graph 의 all-pairs shortest paths 를 O(V·E log V + V²) 에 계산. Bellman-Ford + Dijkstra 조합.

알고리즘

  1. 임시 정점 s 추가, 모든 정점에 가중치 0 간선 연결
  2. Bellman-Ford 로 h[v] = dist(s, v) 계산
  3. 각 간선 (u, v) 재가중: w’(u, v) = w(u, v) + h[u] - h[v] ≥ 0
  4. 재가중 그래프에서 각 정점을 소스로 Dijkstra 실행
  5. 원래 거리 복원: d(u, v) = d’(u, v) - h[u] + h[v]

핵심: Bellman-Ford 로 potential 을 만든 뒤 non-negative 재가중, Dijkstra 사용 가능하게 함.

복잡도 비교

방법복잡도조건
Floyd-WarshallO(V³)Any
JohnsonO(VE log V)negative allowed
Dijkstra × VO(V² log V + VE)non-negative

Sparse (E = O(V)) 일 때 Johnson 이 Floyd-Warshall 보다 빠름.

참고

이 글의 용어 (3개)
다익스트라 알고리즘 (Dijkstra's Algorithm)algorithm
정의 다익스트라 알고리즘 (Dijkstra's Algorithm) 은 음이 아닌 가중치 그래프에서 단일 시작점 s 로부터 모든 정점까지의 최단 거리를 찾는 그리디 알고리즘. Ed…
벨만-포드 알고리즘 (Bellman-Ford Algorithm)algorithm
정의 벨만-포드 알고리즘 (Bellman-Ford Algorithm) 은 음수 가중치 간선을 허용하면서 단일 시작점 s 로부터 모든 정점까지의 최단 거리를 찾는 DP 기반 알고리…
플로이드-워셜 알고리즘 (Floyd-Warshall Algorithm)algorithm
정의 플로이드-워셜 알고리즘 (Floyd-Warshall Algorithm) 은 모든 정점 쌍 (i, j) 사이의 최단 거리를 구하는 DP 알고리즘. Robert W. Floyd…

이 개념을 다룬 위키 페이지 (1)

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기