Browsed by
[Tag:] Dijkstra

Get to know the Contraction Hierarchy

Get to know the Contraction Hierarchy

앞서 길찾기 알고리즘 관련해서 2개의 알고리즘(Dijkstra, BidirectionalDijkstra)에 대해 살펴봤다. 컴퓨터를 활용하여 길을 찾아가는 알고리즘의 목적은 크게 최적의 경로를 최대한 빨리 찾아내는 것이라 할 수 있다. 이론적으로 이들 알고리즘은 최적의 경로를 찾아주는 것을 보장하지만 최대한 빨리 찾는 것에는 한계를 드러내고 있다. 앞에서 설명한 BidirectionalDijkstra 알고리즘도 이런 맥락에서 탐색속도를 개선하기 위한 하나의 방법으로 볼 수 있다. 이처럼 Dijkstra Algorithm의 탐색 속도는 탐색공간 크기에 종속적일 수 밖에 없으며 나아가 길찾기가 한 국가를 넘어 글로벌 규모로 확대해 나간다면 탐색 속도는 서비스 경쟁력을 유지에 중요한…

Read More Read More

Understanding Bidirectional Dijkstra Algorithm

Understanding Bidirectional Dijkstra Algorithm

Dijkstra Algorithm은 내비게이션의 길찾기 뿐만 아니라 최단거리를 찾는 알고리즘으로 잘 알려져 있다. Dijkstra Algorithm은 출발지와 목적지 사이의 최단 거리 탐색을 보장하긴 하지만 탐색 거리가 멀면 멀수록 소요되는 시간도 비례적으로 증가한다는 것이 맹점이다. 이런 문제점을 해결하기 위해 다양한 방법들이 시도 되었으며 그 중 대표적인 것이 A*와 양방향 탐색이라 할 수 있다. 이 글에서는 내비게이션 업계에서 주로 적용하고 A*알고리즘보다 최적 경로 탐색을 보장하면서 탐색시간을 거의 절반으로 줄일 수 있는 양방향 탐색(Bidirectional Dijkstra Algorithm)을 자세히 알아보고자 한다. 참고로 Dijkstra Algorithm에 대해 이해가 필요하다면…

Read More Read More

Implementing Mutable PriorityQueue

Implementing Mutable PriorityQueue

내비게이션 경로탐색 알고리즘으로 가장 잘 알려져 있고 많이 이용하는 알고리즘이 Dijkstra 알고리즘이다. 알고리즘 수행 결과로 만들어진 경로는 최단거리를 제외하면 빠른경로/운전하기 편한 경로와 같이 정성적으로 판단하는 부분이 많다. 이와 같은 척도를 제외하면 경로탐색 엔진의 품질을 측정하는 중요한 척도는 경로탐색 과정에서 소요되는 시간일 것이다.  Dijkstra 알고리즘을 이용하면 최적의 경로를 찾긴 하지만 탐색시간이라는 비용을 지불해야 한다. 내비게이션 품질에서 탐색시간이라는 비용을 줄이기 위해 A*와 같이 탐색공간(Search Space)을 줄이는 Heuristic 기법들을 많이 활용하고 있으며 최근에는 개념을 바꿔 전처리(Preprocessing) 단계를 이용하여 좀 더 교통공학적으로 접근하여 탐색속도를 개선하려는…

Read More Read More

Dijkstra Algorithm Explained

Dijkstra Algorithm Explained

개요 이 글은 자동차 내비게이션의 경로탐색 또는 그래프 이론에서 접하는 최단거리 탐색에 대해 설명한다. 출발지와 목적지 사이의 최단거리 경로탐색에 활용되는 알고리즘으로는 다익스트라 알고리즘이 대표적이라 할 수 있다. 다익스트라 알고리즘이 내부적으로 어떤 처리과정을 거쳐 결과를 만들어내는지에 대해 살펴보도록 한다. 다익스트라를 이용한 최단거리 찾기 그래프 이론에서 그래프는 링크(edge)와 노드(vertex)로 구성된다. 링크에 가중치(weight)가 적용되는 그래프를 가중치 그래프(weighted graph)라고 하며 이 가중치 그래프 상에서 출발지 노드가 주어졌을 때 다익스트라 알고리즘은 이 출발지 노드와 연결 가능한 모든 목적지 노드들 사이의 최단거리 경로와 거리(가중치의 합)를 구해낸다….

Read More Read More