이 글은 Graphs in Python: Dijkstra's Algorithm 에서 가져 왔음을 밝힘니다.
길을 찾을 때, 여러분은 출발점으로부터 도착점까지 가장 짧은 거리가 몇 키로인지 알고 싶으실 겁니다. Dijkstra Algorithm은 그래프에서 시작 노드로부터 모든 다른 노드까지의 가장 짧은 거리를 계산하는 매우 간단하고 빠른 방법입니다.
네덜란드의 한 컴퓨터 과학자, Dijkstra가 이 알고리즘을 떠올린 것은 1956년 이었습니다. Dijkstra는 Rotterdam에서 Groningen까지 가장 짧은 거리는 얼마인지 알고 싶어했고, 간단한 알고리즘을 생각해 냅니다.
node | cost |
---|---|
0 | 0 |
1 | inf |
2 | inf |
현재 노드로 부터 이웃 노드를 구한뒤, 시작 노드로부터 현재노드까지의 cost와 현재 노드로부터 이웃노드로까지의 cost의 합을 구한뒤에, 시작노드로부터 현재 노드의 이웃노드까지의 cost를 비교합니다. 만일 합을 구한 값이 더 작다면 cost 테이블에서 neighbor 노드의 cost를 합한 값으로 업데이트 합니다. 그리고 현재 노드를 이웃노드로(이웃 노드중 거리가 가장 가까운 곳으로) 바꿉니다.
2번 스탭을 모든 노드를 방문할 때까지 반복합니다.
node | cost |
---|---|
0 | 0 |
1 | inf |
2 | inf |
node | cost |
---|---|
0 | 0 |
1 | 3 |
2 | 12 |
node | cost |
---|---|
0 | 0 |
1 | 3 |
2 | 10 |
0-2로 가는 길도 있지만 0-1-2로 가는 길이 더 짧다는 것을 알 수 있을때, 0-2로 가는 길을 선택하지 않고 0-1-2로 가는 길의 거리를 채택하는 방식입니다. 이 방식을 따르면, 그래프에서 node pair를 연결하는 가장 짧은 거리를 구할 수 있습니다.