일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- scikit-learn
- 엔테크서비스
- bottom-up
- kmeans
- 직무면접
- 동적계획법
- clean code
- 다익스트라
- Controller
- compiler
- onclick
- Java
- 우선순위큐
- Android Studio
- 유니온 파인드
- dto
- union-find
- 거쳐가는 정점
- 벨만 포드 알고리즘
- 음수가 포함된 최단경로
- Django
- BufferedReader
- 코딩테스트
- Python
- spring boot
- disjoint set
- 플로이드 와샬
- 최단경로
- top-down
- 기술면접
Archives
- Today
- Total
춤추는 개발자
[그래프] 플로이드 와샬 알고리즘 본문
728x90
반응형
플로이드 와샬
- '모든 정점'으로부터 다른 '모든 정점'까지 이동하는 최단 경로를 구하는 알고리즘
- 다익스트라와의 차이점은 특정한 하나의 정점이 아닌 '모든 정점'이라는 것입니다.
- 해당 알고리즘은 기본적으로 '특정 노드를 거쳐가 다른 노드로 이동'이라는 특징이 있습니다. (k - i - j)
- 핵심 아이디어는 '거쳐가는 정점'을 기준으로 최단 거리를 구하는 것!
public static void calculateMinPrices() {
for(int k=1; k<N+1; k++) {
for(int s=1; s<N+1; s++) {
for(int e=1; e<N+1; e++) {
minPrices[s][e] = Math.min(minPrices[s][e],
minPrices[s][k] + minPrices[k][e]);
}
}
}
}
2차원 배열 minPrices는 '지금까지 계산된 최소 비용'을 나타냅니다. 3중 for문으로 구성된 것은 위에서 언급한 '거쳐가는 정점'을 기준으로 했기 때문입니다.
D[s][e] = D[s][k] + D[k][e] 란,
[s정점에서 k정점까지 이동한 최소비용] + [k정점에서 e정점까지 이동한 최소 비용]이 바로
s정점에서 e정점까지 이동한 비용을 뜻합니다.
여기서 매번 최소값은 D[s][e]에 저장한다면 모든 정점으로부터의 최단 경로를 구할 수 있습니다.
728x90
반응형
'Developer's_til > 자료구조 & 알고리즘' 카테고리의 다른 글
[문자열 탐색] Naive 알고리즘과 Hashing 기법 (0) | 2021.06.04 |
---|---|
[동적계획법] Top-down과 Bottom-up (0) | 2021.03.31 |
[자료구조] Union-find (0) | 2021.03.29 |
[그래프] 벨만-포드 알고리즘 (0) | 2021.03.29 |
[그래프] 다익스트라 알고리즘 (0) | 2021.03.29 |