제60회 한국어능력시험 - content.topikguide.com · 제60회 한국어능력시험ii b-홀수형 2교시(읽기) 3 ※ [9~12]다음 글 또는 그래프의 내용과 같은
그래프의 최단 경로 찾기
-
Upload
jung-ho-kim -
Category
Education
-
view
5.108 -
download
9
description
Transcript of 그래프의 최단 경로 찾기
그래프의 최단 경로 찾기김 정 호
최단 경로 찾기 알고리즘 소개 & 코드-Dijkstra Algorithm( 다익스트라 알고리즘 )-Bellman-Ford Algorithm( 벨만 포드 알고리즘 )-Floyd-Warshall( 플로이드 워셜 알고리즘 )
이럴 때 이 알고리즘 !실제 활용방안
목차
Dijkstra Algorithm
Dijkstra Algorithm
DIJKSTRA(G, w, s) 1 INITIALIZE-SINGLE-SOURCE(G, s) 2 S ← Ø 3 Q ← V [G ] 4 while Q ≠ Ø 5 do u ← EXTRACT-MIN(Q ) <- 6 S ← S ∪{u} 7 for each vertex v ∈ Adj [u ]8 do RELAX(u, v, w) <-E
Psuedo Code : Dijkstra
INITIALIZE-SINGLE-SOURCE(G, s) 1 for each vertex v ∈ V[G] 2 do d[v] ← ∞ 3 π[v] ← NIL 4 d[s] 0
RELAX(u, v, w) 1 if d[v] > d[u] + w(u, v) 2 then d[v] ← d[u] + w(u, v) 3 π[v] ← u
Psuedo Code : Dijkstra
Bellman-Ford Algorithm
Psuedo Code : Bellman-FordBELLMAN-FORD(G, w, s) 1 INITIALIZE-SINGLE-SOURCE(G, s) 2 for i ← 1 to |V [G ]| - 1 3 do for each edge (u, v ) ∈ E [G ] 4 do RELAX(u, v, w ) 5 for each edge (u, v ) ∈ E [G ] 6 do if d [v ] > d [u ] + w (u, v ) 7 then return FALSE 8 return TRUE
BELLMAN-FORD(G, w, s) 1 INITIALIZE-SINGLE-SOURCE(G, s) 2 for i ← 1 to |V [G ]| - 1 3 do for each edge (u, v ) ∈ E [G ] 4 do RELAX(u, v, w )
Floyd-Warshall Algorithm1
2 5
3 4
3
8
-4
1
7
42
-5
6
Floyd-Warshall Algorithm1
2 5
3 4
3
8
-4
1
7
42
-5
6
i 에서 j 로 k 개의 점을 지나서 도착할 최솟값
Floyd-Warshall Algorithm
Psuedo Code : Floyd-War-shallFLOYD-WARSHALL(W ) 1 n ← rows[W ] 2 D(0) ← W 3 for k ← 1 to n 4 do for i ← 1 to n 5 do for j ← 1 to n 6 do 7 return D(n)
Dijkstra Algorithm- 가장 값이 작은 점 잡기- 그 점에서 뻗어 나온 간선과 연결된 점만 최소화- 다시 가장 값이 작은 점 잡기- 모든 점에 대해 다 실행할 것
특징 ! – 방향그래프 , 무방향그래프 상관 없음주의 ! – 간선 값이 음수일 때 사용불가 !
요약
Bellman-Ford Algorithm- 모든 간선에 대해 최소화 (d[v] > d[u] +e(u,v) 일 때 )
- 점 -1 개 만큼 반복
주의 ! - 사이클이 음수일 때 사용불가 ! - 방향그래프에 한함
요약
u v-1
-1
Floyd-Warshall Algorithm- 점 (V) 과 간선 (E) 정보를 담는 V x V 행렬 만듦(D(0))-D(0) 행렬로 D(1) 행렬과 Π(1) 행렬을 구함- 이 단계를 반복해 D(5) 를 구함 .
특징 ! – i 에서 j 로 가는 모든 최단경로를 알 수 있음주의 ! - 사이클이 음수일 때 사용불가 !
- 방향그래프에 한함
요약
비교
모든 선이 양수일 때 ? Dijkstra 하나 이상의 간선이 음수일 때 ? Bellman-Ford, Floyd-Warshall 모든 점 사이의 최단경로를 알고 싶을 때 ? Floyd-Warshall
이럴 때 이 알고리즘 !
네비게이션 길 찾기 - Dijkstra
실생활 예제
지하철 최단경로 찾기 – Dijkstra, Floyd-Warshall
실생활 예제
지하철 소스코드http://mobian.cafe24.com/bbs/zboard.php?id=pds&page=1&category=&sn=off&ss=on&sc=on&keyword=&prev_no=&sn1=&divpage=1
알고리즘 구현은 FTP 에 !
소스코드
Q&A
감사합니다