티스토리 뷰
플로이드 와샬 알고리즘이란
- 그래프에서 모든 꼭짓점 사이의 최단 경로의 거리를 구하는 알고리즘
- 즉, 모든 정점에서 모든 정점으로의 최단 경로를 구하고 싶을 때 쓰는 알고리즘
- 다익스트라 알고리즘과 달리 음의 가중치를 가진 간선이 있을 수 있음
- '거쳐가는 정점 기준으로 최단 거리를 구하는 것' (<-> 다익스트라: 가장 적은 비용을 가진 정점 기준)
자료구조 및 시간 복잡도
- 모든 정점에 대한 경로를 계산하므로 2차원 배열 사용
- 시간 복잡도: O(n^3) <- 3개의 반복문
알고리즘 구현
for (int k = 0; k < N; ++k) {
for (int i = 0; i < N; ++i) {
for (int j = 0; j < N; ++j) {
if (d[i][j] > d[i][k] + d[k][j]) {
d[i][j] = d[i][k] + d[k][j];
}
}
}
}
- 제일 바깥쪽: 거쳐가는 정점
- 두 번째: 출발하는 정점
- 세 번째: 도착하는 정점
선행 과정
- 2차원 배열에 두 정점간 비용 초기화 (연결되어있지 않다면 무한대로 초기화)
- 왜 무한대로 초기화? 무한대를 이용해서 두 정점간의 연결 여부 파악하기 위해
글 작성시 참고:
24. 플로이드 와샬(Floyd Warshall) 알고리즘
지난 시간에는 다익스트라(Dijkstra) 알고리즘에 대해 학습했습니다. 다익스트라 알고리즘은 하나의 정점...
blog.naver.com
플로이드 와샬 알고리즘 :: 마이구미
이번 글은 플로이드 와샬 알고리즘에 대해 다뤄본다. 동적계획법을 기반으로 구현되는 알고리즘이다. 위키백과의 정의를 보자. 플로이드-워셜 알고리즘(Floyd-Warshall Algorithm)은 그래프에서 모든
mygumi.tistory.com
'개발참고 > 알고리즘' 카테고리의 다른 글
[알고리즘] 이분탐색 (0) | 2021.03.23 |
---|---|
[알고리즘/최단경로] 다익스트라 (Dijkstra) 알고리즘 (0) | 2020.09.05 |
[알고리즘/MST] 최소 신장 트리 (Minimum Spanning Tree) (0) | 2020.09.04 |
[알고리즘/탐색] DFS, BFS (0) | 2020.08.30 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크