그래프의 최단 경로 찾기

22
그그그그 그그 그그 그그 김 김 김

description

그래프에 대한 알고리즘 설명으로 그래프 구조가 필요한 팀프로젝트시에 사용했습니다.

Transcript of 그래프의 최단 경로 찾기

Page 1: 그래프의 최단 경로 찾기

그래프의 최단 경로 찾기김 정 호

Page 2: 그래프의 최단 경로 찾기

최단 경로 찾기 알고리즘 소개 & 코드-Dijkstra Algorithm( 다익스트라 알고리즘 )-Bellman-Ford Algorithm( 벨만 포드 알고리즘 )-Floyd-Warshall( 플로이드 워셜 알고리즘 )

이럴 때 이 알고리즘 !실제 활용방안

목차

Page 3: 그래프의 최단 경로 찾기

Dijkstra Algorithm

Page 4: 그래프의 최단 경로 찾기

Dijkstra Algorithm

Page 5: 그래프의 최단 경로 찾기

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

Page 6: 그래프의 최단 경로 찾기

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

Page 7: 그래프의 최단 경로 찾기

Bellman-Ford Algorithm

Page 8: 그래프의 최단 경로 찾기

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 )

Page 9: 그래프의 최단 경로 찾기

Floyd-Warshall Algorithm1

2 5

3 4

3

8

-4

1

7

42

-5

6

Page 10: 그래프의 최단 경로 찾기

Floyd-Warshall Algorithm1

2 5

3 4

3

8

-4

1

7

42

-5

6

i 에서 j 로 k 개의 점을 지나서 도착할 최솟값

Page 11: 그래프의 최단 경로 찾기

Floyd-Warshall Algorithm

Page 12: 그래프의 최단 경로 찾기

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)

Page 13: 그래프의 최단 경로 찾기

Dijkstra Algorithm- 가장 값이 작은 점 잡기- 그 점에서 뻗어 나온 간선과 연결된 점만 최소화- 다시 가장 값이 작은 점 잡기- 모든 점에 대해 다 실행할 것

특징 ! – 방향그래프 , 무방향그래프 상관 없음주의 ! – 간선 값이 음수일 때 사용불가 !

요약

Page 14: 그래프의 최단 경로 찾기

Bellman-Ford Algorithm- 모든 간선에 대해 최소화 (d[v] > d[u] +e(u,v) 일 때 )

- 점 -1 개 만큼 반복

주의 ! - 사이클이 음수일 때 사용불가 ! - 방향그래프에 한함

요약

u v-1

-1

Page 15: 그래프의 최단 경로 찾기

Floyd-Warshall Algorithm- 점 (V) 과 간선 (E) 정보를 담는 V x V 행렬 만듦(D(0))-D(0) 행렬로 D(1) 행렬과 Π(1) 행렬을 구함- 이 단계를 반복해 D(5) 를 구함 .

특징 ! – i 에서 j 로 가는 모든 최단경로를 알 수 있음주의 ! - 사이클이 음수일 때 사용불가 !

- 방향그래프에 한함

요약

Page 16: 그래프의 최단 경로 찾기

비교

Page 17: 그래프의 최단 경로 찾기

모든 선이 양수일 때 ? Dijkstra 하나 이상의 간선이 음수일 때 ? Bellman-Ford, Floyd-Warshall 모든 점 사이의 최단경로를 알고 싶을 때 ? Floyd-Warshall

이럴 때 이 알고리즘 !

Page 18: 그래프의 최단 경로 찾기

네비게이션 길 찾기 - Dijkstra

실생활 예제

Page 19: 그래프의 최단 경로 찾기

지하철 최단경로 찾기 – Dijkstra, Floyd-Warshall

실생활 예제

Page 21: 그래프의 최단 경로 찾기

Q&A

Page 22: 그래프의 최단 경로 찾기

감사합니다