다익스트라 최단 거리 알고리즘
-
Upload
- -
Category
Engineering
-
view
4.079 -
download
0
Transcript of 다익스트라 최단 거리 알고리즘
![Page 1: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/1.jpg)
다익스트라 최단 경로 탐색너나들이 X 굴러가는길 X Jang Gong Ui
![Page 2: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/2.jpg)
선행 지식
![Page 3: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/3.jpg)
기본 용어 정리
간선중심이 되는 선, 주요 구간 사이를 연결하는
가중치
요소가 가지는 중요성의 값을 나타내는 비율
☞오후 들어 곳곳의 주요 간선이 심한 교통 체증을 빚고 있습니다
☞많은 대학이 고등학교 내신 성적에 가중치를 적용하여서 신입생을 선발했다.
![Page 4: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/4.jpg)
선행지식 - 그래프
![Page 5: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/5.jpg)
그래프란?
현실 세계의 사물이나 추상적인 개념 간의 연결 관계를 표현한 것
여러 도시들을 연결하는 도로망
사람들 간의 지인 관계
웹사이트 간의 링크 관계
컴퓨터간의 네트워크망
![Page 6: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/6.jpg)
방향 그래프와 무방향 그래프
무방향 그래프에서의 최단 경로를 찾기 위해서는 각각의 양방향 간선을 두개의 일방 통행 간선으로 쪼개서 방향 그래프로 만들어야함
❖다익스트라의 경우 뱡향그래프를 기준으로 설계되었기 때문
![Page 7: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/7.jpg)
그래프의 표현 방식
3
2
0
1 4
그래프 인접 행렬 표현
0 1 2 3 4
2
1
3
4
0 0
0
1
0
1
1
0
0
0
0
0
0
0
1
0
0
0
1
0
0
1
0
0
1
0
![Page 8: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/8.jpg)
선행지식 - 너비 우선 탐색
![Page 9: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/9.jpg)
선행지식 - 우선순위 큐
![Page 10: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/10.jpg)
선행지식 - 우선순위 큐
JAVA는 우선순위 큐 라이브러리를 지원한다!
import -> import java.util.PriorityQueue;
선언 - > PriorityQueue<자료형> queue;
일반적인 큐
연산의 결과로 먼저 들어간 데이터가 먼저 나옴
우선순위 큐
들어간 순서와 상관없이 우선순위가 높은 데이터가 먼저 나옴
병원을 예로 들면 위급한 환자에게 우선순위를 주어 먼져 치료하는 것!
![Page 11: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/11.jpg)
다익스트라 알고리즘
![Page 12: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/12.jpg)
다익스트라 알고리즘이란?
다익스트라(Dijkstra) 알고리즘은가장 유명한 그래프 알고리즘 중 하나이다
단일 시작점 최단 경로 알고리즘으로, 시작 정점으로부터 다른 정점들까지의 최단거리를 계산
❖ 단일 시작점 알고리즘 이란?
하나의 시작점에서 다른 모든 정점까지 가는 최단거리를 구하는것
너비 우선 탐색의 연장으로 분류되며 실제로 그렇다
![Page 13: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/13.jpg)
우선순위 큐를 사용하는 너비 우선 탐색( 眞 다익스트라)
A(0)
CD
E
B
G F
5
1
2
1
5
3
3
3
2
각 정점까지의 최단 거리를 저장하는 배열 array_dist[]
![Page 14: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/14.jpg)
A(0)
CD
E
B
G F
5
1
2
1
5
3
3
3
2
탐색 : 그래프의 구조를 들여다 보지 않았기 때문에, 다른 정점까지의 최단 거리는 알수 없다. 따라서 시작점인 A까지의 최단거리가 0이라는 사실만을 알고 있다.
![Page 15: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/15.jpg)
A(0)
C(1)D
E
B(5)
G F
5
1
2
1
5
3
3
3
2
방문 : 다익스트라 알고리즘은 매 단계마다 아직 방문하지 않은 정점 중 시작점과 가까운 점을 찾아 방문한다. 아직 우리가 알고 있는 최단거리 정점은 시작점밖에 없음으로, 첫 단계는 항상 시작점을 방문하는 것
최단경로 산정 : 우리는 지금까지 이 경로들을 몰랐으므로 이 값들을 array_dist[B] 와 array_dist[C]에 저장
❖각 정점까지의 최단 거리를 저장하는 배열 array_dist[]
큐 저장 : 이는 현재까지의 최단거리이기 때문에 우선순위 큐에 (array_dist[B],B), (array_dist[C],C) 를 삽입
탐색 : A에 연결된 정점들을 살펴 보면 B로 가는 길이 5인 경로와 C로가는 길이 1인 경로를 발견 할 수 있다
![Page 16: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/16.jpg)
A(0)
C(1)D(5)
E
B(5)
G F
5
1
2
1
5
3
3
3
2
방문 : 시작점으로부터의 거리를 아는 정점 중 가장 가까운 것은 그 거리가 1인 C 이므로 C를 방문한다.
탐색 : A 에서 C로 가는 최단 거리는 1인데, 이 뒤에 길이 2인 간선을 붙히면 D로 가는 길이 3인 경로를 발견할수 있다.
최단경로 산정 : 이 값들을 array_dist[D] 에 저장
큐 저장 : 이는 현재까지의 최단거리이기 때문에 우선순위 큐에 (array_dist[D],D) 를 삽입
![Page 17: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/17.jpg)
A(0)
C(1)D(5)
E(8)
B(4)
G F(6)
5
1
2
1
5
3
3
3
2
방문 : array_dist[D]가 가장 작으므로 D를 방문한다.
탐색 : 인접한 정점들을 탐색하면 B로 가는 길이 4인 경로, E로 가는 길이 8인 경로 F로 가는 길이 6인 경로를 발견한다.
최단경로 산정 :이중 B[4]로 가는 경로는 우리가 알던 B까지의 최단경로보다 짧은걸 알수 있다. array_dist[E] = 8 저장 , array_dist[E] = 6 저장
갱신 :기존 5 였던 array_dist[B]를 4로 변경하고 마찬가지로 우선순위 큐도 데이터를 반영한다.큐 저장 : 우선순위 큐에 기존 (array_dist[B](5) ,B) 는 그대로 두고 (array_dist[B](4) ,B) 를 추가한다. (array_dist[E] ,E) 추가 , (array_dist[F] ,F) 추가
이후 큐에서 꺼낼 때 array_dist[B]를 비교하여 짧은 경로를 판별하는 것이 우선순위 큐 내에서 값을 찾아내 바꾸는 것보다 효율적임
![Page 18: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/18.jpg)
A(0)
C(1)D(5)
E(8)
B(4)
G(7) F(7)
5
1
2
1
5
3
3
2
2
방문 : array_dist[B]가 가장 작으므로 B를 방문한다.
탐색 : 인접한 정점들을 탐색하면 G로 가는 길이 7인 경로, F로 가는 길이 7인 경로를 발견한다.
최단경로 산정 : G까지 가는 최단 경로 array_dist[G] = 7 을 저장 , F까지 가는 경로 를 발견하지만 이미 7보다 적으므로 변경하지 않음
큐 저장 : (array_dist[G] ,G) 추가
![Page 19: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/19.jpg)
A(0)
C(1)D(5)
E(8)
B(4)
G(7) F(6)
5
1
2
1
5
3
3
3
2
방문 : array_dist[F]가 가장 작으므로 F를 방문한다.
탐색 : 인접한 정점들을 탐색하면 G로 가는 길이 8인 경로를 발견
최단경로 산정 : 이미 arrat_dist = 7 이므로 변경하지 않음
![Page 20: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/20.jpg)
A(0)
C(1)D(5)
E(8)
B(4)
G(7) F(6)
5
1
2
1
5
3
3
3
2
방문 : array_dist[G]가 array_dist[E]보다 우선이므로 방문 (너비 우선 탐색 법칙)
![Page 21: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/21.jpg)
A(0)
C(1)D(5)
E(8)
B(4)
G(7) F(6)
5
1
2
1
5
3
3
3
2
방문 : E 방문 (너비 우선 탐색 법칙)
존재하는 모든 정점에 대한 경로 탐색이 완료 된다
![Page 22: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/22.jpg)
최단 경로 계산 완료
이렇게 모든 정점이 방문된 시점에서 다익스트라 알고리즘이 계산한 arrat_dist[] 배열에는 각 정점까지의 최단 경로가 모두 계산되어 있음
굵게 표시된 간선들을 모아보면 트리 형태가 된다. 이 트리의 루트 (A)에서 각 정점까지로 가는 경로는 원래 그래프의 최단경로이다
이를 최소 비용 스패닝트리(minimum cost spanning tree) 라고한다.그래프의 각 변에 비용이 주어질 경우 생성 트리들 중에 모든 꼭짓점을 포함하며 비용이 최소이며 을 말한다.
![Page 23: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/23.jpg)
산정된 최단 경로는 정당한가?
![Page 24: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/24.jpg)
귀류법에 따른 정당성의 증명
어떤 주장에 대해 그 함의하는 내용을 따라가다보면 이치에 닿지 않는 내용 또는 결론에 이르게 된다는 것을 보여서 그 주장이 잘못된 것임을 보이는 것
![Page 25: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/25.jpg)
정당성의 증명
귀류법을 위해 다익스트라 알고리즘이 최단 거리를 제대로 계산하지 못하는 정점 U가 있다고 가정
KS
P
QU
방문됨
아직 방문되지 않음
다익스트라 알고리즘이 산정한 최단 경로는 실선 dist[U]
제대로 계산하지 못하여 실제 최단 경로는 점선 dist[Q]를 거쳐 정점 U에 도착하는 경로라 가정
❖dist[X] 시작점으로부터 X까지의 경로
![Page 26: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/26.jpg)
KS
P
QU
방문됨
아직 방문되지 않음
정당성의 증명1. 시작점에 대해서는 항상 정확하게 최단거리를 계산하기 때문에 U는 시작점이 항상 아니라는 사실을 알 수 있음
2. 다익스트라 알고리즘이 U를 방문하는 순간, U 이전에 방문한 정점들과 아직 방문하지 못한 정점들로 그래프를 나눌 수 있음
이때 U에 대해 최단 거리를 잘못 계산했다는 말은 다익스트라 알고리즘이 만든 스패팅 트리에서의 경로보다 더 짧은 경로가 존재 한다는 의미
![Page 27: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/27.jpg)
KS
P
QU
방문됨
아직 방문되지 않음
정당성의 증명
1 .이미 방문한 정점을 P ,그 직전에 만난 정점을 Q 라고 가정
2. 이 때 시작점 부터 Q까지의 최단 거리는 dist[P] + w(P,Q) 가 된다.
❖ 가중치 w(❨X,Y)❩
❖dist[X] 시작점으로부터 X까지의 경로
3. 하지만 P는 이미 방문한 상태이기 때문에, dist[Q]는 이미 최단 거리가 저장되있고, 우선순위 큐에도 들어가 있는 상태이다.
4. 다익스트라가 큐에서 dist[U]를 먼져 꺼냈다는 말은 dist[U] < dist[Q] 임을 증명
즉 Q를 지나서 U로 오는 경로가 dist[U]보다 짧다는 말은 모순이며 최소비용 스패닝트리보다 짮은 경로는 존재할수 없다.
![Page 28: 다익스트라 최단 거리 알고리즘](https://reader031.fdocument.pub/reader031/viewer/2022013104/58ecadea1a28ab4d098b459b/html5/thumbnails/28.jpg)
다익스트라 알고리즘이 찾아내는 경로는 항상 최단 경로이다.
결론
❖ 모든 간선의 가중치가 0이상인 경우