SlideShare a Scribd company logo
1 of 16
By POSTECH Computer Algorithm Team
Shortest path problem
정윤성
최단 경로
Contents
POSTECH Computer Algorithm Team
Dijkstra Algorithm 7
Shortest Path Problem 3
Bellman-Ford Algorithm 10
Floyd-Warshall Algorithm 13
POSTECH Computer Algorithm Team
- 정점(노드)(vertex)의 개수 V개, 간선(edge)의 개수 M개인 Graph
- 간선 (u, v, t) : u번 노드에서 v번 노드로 가는데 필요한 가중치 t
- 이때, 한 노드에서 다른 노드로 이동하는데 필요한 가중치의 총 합의 최소값을 구하는 방법이다.
Shortest Path Problem (최단 경로 문제)
POSTECH Computer Algorithm Team
- 한 종류의 문제를 해결 가능하면 다른 문제들도 해결 가능하므로, 분류에 큰 의미는 없다.
- 단일 출발(single-source) 최단경로
• 단일 노드 v에서 출발하여 그래프 내의 모든 다른 노드에 도착하는 가장 짧은 경로를 찾는 문제.
- 단일 도착(single-destination) 최단경로
• 모든 노드들로부터 출발하여 그래프 내의 한 단일 노드 v로 도착하는 가장 짧은 경로를 찾는 문제.
• 그래프 내의 노드들을 거꾸로 뒤집으면 단일 출발 최단경로문제와 동일.
- 단일 쌍(single-pair) 최단 경로
• 주어진 두 노드 u에서 v까지의 최단 경로를 찾는 문제.
- 전체 쌍(all-pair) 최단 경로
• 그래프 내 모든 노드 쌍들 사이의 최단 경로를 찾는 문제.
최단 경로 문제의 분류
POSTECH Computer Algorithm Team
- Optimal substructure
- 최단 경로의 부분 경로는 역시 최단 경로이다.
- 부분 문제가 성립하므로, DP 등을 이용해서 해결 가능하다.
최단 경로 문제의 특성
- 증명
POSTECH Computer Algorithm Team
- Edge Relaxation
- 부분 문제가 성립하므로, u에서 v로 가는
edge의 가중치를 더 작은 값으로 업데이트
해도 무방하다.
최단 경로 문제의 특성
POSTECH Computer Algorithm Team
- 단일 출발 최단경로 문제를 푸는 알고리즘이다.
- 첫번째 노드(거리를 구하는 시작점)부터 거리가 짧은 순으로 최단 거리를 업데이트해가며 마지막 노드(거리를
구하는 끝점)까지 반복하면, 그게 최단 경로가 된다.
- 즉, 첫번째 노드에서 마지막 노드가 나올 때까지 1. 지금까지 업데이트한것들 중 시작점으로부터 거리가 가장
짧은 노드를 찾고, 2. 그 노드에 연결된 간선들로 다른 노드의 최단거리를 업데이트해주면 된다.
- 만약 음의 가중치를 가지는 간선이 없는 경우, 이 순서대로 업데이트하면 항상 최단경로가 성립하지만, 음의
가중치를 가지는 간선이 있는 경우, 이 알고리즘을 적용할 수 없다. (반례가 존재한다.)
Dijkstra Algorithm
POSTECH Computer Algorithm Team
- 최대 V개의 정점에 대해 Extract-Min을 수행
- Extract-Min 을 얼마나 빠르게 하는지가 관건이다.
Dijkstra Algorithm 의사 코드
POSTECH Computer Algorithm Team
- 우선, 간선을 한 번씩만 보기 위해 인접 리스트에 간선을 저장하자.
1. 매 정점마다 방문하지 않은 정점 중 시작점으로부터 거리가 가장 짧은 점을 찾는 경우.
- O(V^2 + E)
2. Priority Queue에 거리순으로 정렬되도록 {정점 번호, 거리} 를 넣고, 해당 정점 번호와 인접한
Edge들이 최단경로를 업데이트할 수 있다면 업데이트하는 경우
- 최악의 경우 E개의 원소에 대해 최단경로가 업데이트되므로, 시간복잡도 𝑂 𝐸 log2 𝐸 = 𝑂(𝐸 log2 𝑉)
만에 가능하다.
- E = V^2에 가까우면 1, E = V에 가까우면 2를 사용하면 된다만, PS에서는 2만 알면 된다.
Dijkstra Algorithm 시간 복잡도
POSTECH Computer Algorithm Team
- 간선이 음의 가중치를 가지는 경우에 사용된다.
- 그래프 내 모든 간선을 통해, 간선의 시작점과 끝점인 두 정점 (u, v) 사이의 최단경로
를 계속해서 업데이트한다. 그리고 업데이트가 일어나는 동안 반복한다.
- 이렇게만 수행하면 그래프 내에 음의 사이클(Negative Cycle)이 존재하는 경우 Runtime
Error가 발생한다. (최단거리가 음의 무한대가 될 때까지 반복하므로)
• 만약 Negative cycle이 없는 경우, 그래프 모든 정점에 대해 최단경로 업데이트를 시작 노드를
제외한 전체 정점 수(V-1)만큼 반복 수행하면 업데이트가 완료된다.
• 즉, V번 모든 간선에 대해 업데이트를 수행했을 때 마지막 V번째에 업데이트가 일어난다면 위
와 같은 negative cycle이 존재한다.
Bellman-Ford Algorithm
POSTECH Computer Algorithm Team
- 모든 간선(E)에 대해 업데이트(V)
를 수행하므로, 시간 복잡도
𝑂(𝑉𝐸) 을 얻는다.
Bellman-Ford Algorithm 의사 코드
POSTECH Computer Algorithm Team
Dijkstra, Bellman-Ford Algorithm 비교
- 시간 복잡도로만 비교하면, Dijkstra 알고리즘은 O(ElogV)이고, Bellman-Ford 알고리즘 O(EV)이다.
- 보통 V <= E <= V(V-1)/2 이므로 Dijkstra 알고리즘의 시간복잡도가 Bellman-Ford 알고리즘의 시간복잡도보다 낮
고, 둘 다 적용 가능한 경우에는 Dijkstra 알고리즘이 더 유용하다.
- 만약 음의 간선이 주어지는 경우에는, Negative Cycle이 없다면 Dijkstra 알고리즘은 해결할 수 없지만
Bellman-Ford 알고리즘으로는 해결 가능하다. 이 경우에는 Bellman-Ford 알고리즘이 더 유용하다.
- 그래프가 Negative Cycle을 가지는 경우 이론적으로 음의 무한대의 최단거리를 가지므로 유의미한 문제가 아니다.
POSTECH Computer Algorithm Team
- 전체 쌍 최단경로 문제를 해결하는 데에 사용된다.
- 가능한 모든 노드 쌍 (u, v)에 대해 Edge Relaxation을 수행하고 나면 모든 두 노드 (u, v) 간의
거리가 최단경로로 업데이트된 후이다.
- 모든 노드 t에 대해서, 이를 중간 점으로 하여 최단 경로가 되는 노드 쌍 (u, v)가 있다면 이를
업데이트하면 된다. (정당성 증명이 생각만큼 직관적이지 않다. 왜 이 순서로 해야 최단경로가 성
립하는가?)
Floyd-Warshall Algorithm
POSTECH Computer Algorithm Team
Floyd-Warshall Algorithm 코드
모든 노드에 대해 삼중 반복문을 돈다.
시간복잡도 𝑂(𝑉3) 이다.
k : Relaxation을 수행할 중간점
I, j : Relaxation을 수행할 시작점, 도착점
POSTECH Computer Algorithm Team
각각의 상황에 맞춰서 어떤 알고리즘을 사용해야 하는지 판단해보자.
Algospot :
- 신호 라우팅 (ROUTING)
- 소방차 (FIRETRUCKS)
- 시간여행 (TIMETRIP)
- 선거 공약 (PROMISES)
최단 경로 알고리즘 예제
Baekjoon Online Judge :
분류 – 최단경로 알고리즘 문제들도 필요하면 더 풀어볼 것.
https://www.acmicpc.net/problem/tag/최단%20경로
- Dijkstra 알고리즘을 잘 짰는지 테스트 :
https://www.acmicpc.net/problem/1753
- 거의 최단 경로
- K번째 최단 경로
POSCAT
Thank you :-)

More Related Content

Similar to Shortest path (8)

Graph search
Graph searchGraph search
Graph search
 
04. network flow 1
04. network flow   104. network flow   1
04. network flow 1
 
110528 taocp 2345
110528 taocp 2345110528 taocp 2345
110528 taocp 2345
 
Semina tree
Semina   treeSemina   tree
Semina tree
 
자료구조 Project5
자료구조 Project5자료구조 Project5
자료구조 Project5
 
분할정복
분할정복분할정복
분할정복
 
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
[Devfest Campus Korea 2021]효율적인 문제해결 With 알고리즘
 
Number theory
Number theoryNumber theory
Number theory
 

Recently uploaded

Recently uploaded (8)

실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
실험 설계의 평가 방법: Custom Design을 중심으로 반응인자 최적화 및 Criteria 해석
 
데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법데이터 분석 문제 해결을 위한 나의 JMP 활용법
데이터 분석 문제 해결을 위한 나의 JMP 활용법
 
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
JMP 기능의 확장 및 내재화의 핵심 JMP-Python 소개
 
JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례JMP를 활용한 가속열화 분석 사례
JMP를 활용한 가속열화 분석 사례
 
JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!JMP가 걸어온 여정, 새로운 도약 JMP 18!
JMP가 걸어온 여정, 새로운 도약 JMP 18!
 
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement MethodologyJMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
JMP를 활용한 전자/반도체 산업 Yield Enhancement Methodology
 
공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화공학 관점에서 바라본 JMP 머신러닝 최적화
공학 관점에서 바라본 JMP 머신러닝 최적화
 
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
(독서광) 인간이 초대한 대형 참사 - 대형 참사가 일어날 때까지 사람들은 무엇을 하고 있었는가?
 

Shortest path

  • 1. By POSTECH Computer Algorithm Team Shortest path problem 정윤성 최단 경로
  • 2. Contents POSTECH Computer Algorithm Team Dijkstra Algorithm 7 Shortest Path Problem 3 Bellman-Ford Algorithm 10 Floyd-Warshall Algorithm 13
  • 3. POSTECH Computer Algorithm Team - 정점(노드)(vertex)의 개수 V개, 간선(edge)의 개수 M개인 Graph - 간선 (u, v, t) : u번 노드에서 v번 노드로 가는데 필요한 가중치 t - 이때, 한 노드에서 다른 노드로 이동하는데 필요한 가중치의 총 합의 최소값을 구하는 방법이다. Shortest Path Problem (최단 경로 문제)
  • 4. POSTECH Computer Algorithm Team - 한 종류의 문제를 해결 가능하면 다른 문제들도 해결 가능하므로, 분류에 큰 의미는 없다. - 단일 출발(single-source) 최단경로 • 단일 노드 v에서 출발하여 그래프 내의 모든 다른 노드에 도착하는 가장 짧은 경로를 찾는 문제. - 단일 도착(single-destination) 최단경로 • 모든 노드들로부터 출발하여 그래프 내의 한 단일 노드 v로 도착하는 가장 짧은 경로를 찾는 문제. • 그래프 내의 노드들을 거꾸로 뒤집으면 단일 출발 최단경로문제와 동일. - 단일 쌍(single-pair) 최단 경로 • 주어진 두 노드 u에서 v까지의 최단 경로를 찾는 문제. - 전체 쌍(all-pair) 최단 경로 • 그래프 내 모든 노드 쌍들 사이의 최단 경로를 찾는 문제. 최단 경로 문제의 분류
  • 5. POSTECH Computer Algorithm Team - Optimal substructure - 최단 경로의 부분 경로는 역시 최단 경로이다. - 부분 문제가 성립하므로, DP 등을 이용해서 해결 가능하다. 최단 경로 문제의 특성 - 증명
  • 6. POSTECH Computer Algorithm Team - Edge Relaxation - 부분 문제가 성립하므로, u에서 v로 가는 edge의 가중치를 더 작은 값으로 업데이트 해도 무방하다. 최단 경로 문제의 특성
  • 7. POSTECH Computer Algorithm Team - 단일 출발 최단경로 문제를 푸는 알고리즘이다. - 첫번째 노드(거리를 구하는 시작점)부터 거리가 짧은 순으로 최단 거리를 업데이트해가며 마지막 노드(거리를 구하는 끝점)까지 반복하면, 그게 최단 경로가 된다. - 즉, 첫번째 노드에서 마지막 노드가 나올 때까지 1. 지금까지 업데이트한것들 중 시작점으로부터 거리가 가장 짧은 노드를 찾고, 2. 그 노드에 연결된 간선들로 다른 노드의 최단거리를 업데이트해주면 된다. - 만약 음의 가중치를 가지는 간선이 없는 경우, 이 순서대로 업데이트하면 항상 최단경로가 성립하지만, 음의 가중치를 가지는 간선이 있는 경우, 이 알고리즘을 적용할 수 없다. (반례가 존재한다.) Dijkstra Algorithm
  • 8. POSTECH Computer Algorithm Team - 최대 V개의 정점에 대해 Extract-Min을 수행 - Extract-Min 을 얼마나 빠르게 하는지가 관건이다. Dijkstra Algorithm 의사 코드
  • 9. POSTECH Computer Algorithm Team - 우선, 간선을 한 번씩만 보기 위해 인접 리스트에 간선을 저장하자. 1. 매 정점마다 방문하지 않은 정점 중 시작점으로부터 거리가 가장 짧은 점을 찾는 경우. - O(V^2 + E) 2. Priority Queue에 거리순으로 정렬되도록 {정점 번호, 거리} 를 넣고, 해당 정점 번호와 인접한 Edge들이 최단경로를 업데이트할 수 있다면 업데이트하는 경우 - 최악의 경우 E개의 원소에 대해 최단경로가 업데이트되므로, 시간복잡도 𝑂 𝐸 log2 𝐸 = 𝑂(𝐸 log2 𝑉) 만에 가능하다. - E = V^2에 가까우면 1, E = V에 가까우면 2를 사용하면 된다만, PS에서는 2만 알면 된다. Dijkstra Algorithm 시간 복잡도
  • 10. POSTECH Computer Algorithm Team - 간선이 음의 가중치를 가지는 경우에 사용된다. - 그래프 내 모든 간선을 통해, 간선의 시작점과 끝점인 두 정점 (u, v) 사이의 최단경로 를 계속해서 업데이트한다. 그리고 업데이트가 일어나는 동안 반복한다. - 이렇게만 수행하면 그래프 내에 음의 사이클(Negative Cycle)이 존재하는 경우 Runtime Error가 발생한다. (최단거리가 음의 무한대가 될 때까지 반복하므로) • 만약 Negative cycle이 없는 경우, 그래프 모든 정점에 대해 최단경로 업데이트를 시작 노드를 제외한 전체 정점 수(V-1)만큼 반복 수행하면 업데이트가 완료된다. • 즉, V번 모든 간선에 대해 업데이트를 수행했을 때 마지막 V번째에 업데이트가 일어난다면 위 와 같은 negative cycle이 존재한다. Bellman-Ford Algorithm
  • 11. POSTECH Computer Algorithm Team - 모든 간선(E)에 대해 업데이트(V) 를 수행하므로, 시간 복잡도 𝑂(𝑉𝐸) 을 얻는다. Bellman-Ford Algorithm 의사 코드
  • 12. POSTECH Computer Algorithm Team Dijkstra, Bellman-Ford Algorithm 비교 - 시간 복잡도로만 비교하면, Dijkstra 알고리즘은 O(ElogV)이고, Bellman-Ford 알고리즘 O(EV)이다. - 보통 V <= E <= V(V-1)/2 이므로 Dijkstra 알고리즘의 시간복잡도가 Bellman-Ford 알고리즘의 시간복잡도보다 낮 고, 둘 다 적용 가능한 경우에는 Dijkstra 알고리즘이 더 유용하다. - 만약 음의 간선이 주어지는 경우에는, Negative Cycle이 없다면 Dijkstra 알고리즘은 해결할 수 없지만 Bellman-Ford 알고리즘으로는 해결 가능하다. 이 경우에는 Bellman-Ford 알고리즘이 더 유용하다. - 그래프가 Negative Cycle을 가지는 경우 이론적으로 음의 무한대의 최단거리를 가지므로 유의미한 문제가 아니다.
  • 13. POSTECH Computer Algorithm Team - 전체 쌍 최단경로 문제를 해결하는 데에 사용된다. - 가능한 모든 노드 쌍 (u, v)에 대해 Edge Relaxation을 수행하고 나면 모든 두 노드 (u, v) 간의 거리가 최단경로로 업데이트된 후이다. - 모든 노드 t에 대해서, 이를 중간 점으로 하여 최단 경로가 되는 노드 쌍 (u, v)가 있다면 이를 업데이트하면 된다. (정당성 증명이 생각만큼 직관적이지 않다. 왜 이 순서로 해야 최단경로가 성 립하는가?) Floyd-Warshall Algorithm
  • 14. POSTECH Computer Algorithm Team Floyd-Warshall Algorithm 코드 모든 노드에 대해 삼중 반복문을 돈다. 시간복잡도 𝑂(𝑉3) 이다. k : Relaxation을 수행할 중간점 I, j : Relaxation을 수행할 시작점, 도착점
  • 15. POSTECH Computer Algorithm Team 각각의 상황에 맞춰서 어떤 알고리즘을 사용해야 하는지 판단해보자. Algospot : - 신호 라우팅 (ROUTING) - 소방차 (FIRETRUCKS) - 시간여행 (TIMETRIP) - 선거 공약 (PROMISES) 최단 경로 알고리즘 예제 Baekjoon Online Judge : 분류 – 최단경로 알고리즘 문제들도 필요하면 더 풀어볼 것. https://www.acmicpc.net/problem/tag/최단%20경로 - Dijkstra 알고리즘을 잘 짰는지 테스트 : https://www.acmicpc.net/problem/1753 - 거의 최단 경로 - K번째 최단 경로