이러한 그래프에서 최단 경로를 계산할 수있는 라이브러리가 있습니다. 그들은 이것을 어떻게합니까? 더 구체적으로, Dijkstra의 알고리즘을 실행하기 위해 그래프의 필요한 부분을 어떻게로드합니까?
DB, 디스크에서 읽을 사용자 정의 파일 형식 및 메모리 내 설정을 사용할 수 있습니다.
그러나 DB를 사용한 경험에 따르면 '간단한'연결 된 목록 형식을 기반으로 자신의 파일 형식을 작성하는 것보다 약 5-10 배 느리고 메모리가 훨씬 더 강합니다.
좋은 점은 오픈 소스 인 OSM을 사용하는 여러 소프트웨어 프레임 워크가 있으므로 여기 에서 코드를 직접 확인할 수 있습니다 . 에서 GraphHopper 오픈 소스 라우팅 엔진 은 메모리로부터 스위치에 아주 쉽다는 메모리에 설정하는 설정 (계 디스크) 맵핑 -이 동일한 형식을 사용. "mmap"설정은 메모리가 제한된 모바일 장치에서도 사용할 수 있으며 서버에 필요한 RAM이 있으면 후자가 훨씬 더 빠르게 수행됩니다. 예를 들어 월드 와이드 그래프 (> 100mio 노드)의 경우 약 8-10GB RAM과 계약 계층 구조를 통해 모든 속도를 높이려면 더 많은 RAM이 필요합니다. 원하는 모든 차량에 대해 대략 5-8GB가 더 큽니다.
형식은 매우 단순하며 기본적으로 필요한 몇 가지 트릭으로 필요한 데이터 만 저장하여 압축합니다. 자세한 내용은 여기를 참조 하십시오 . 면책 조항 : 저는 GraphHopper의 저자입니다.
다른 답변에 관해서 :
적용 가능한 Dijkstras 알고리즘은이 문제에 최적이 아닌 것으로 간주됩니다.
'정상적인'Dijkstra는 매우 합리적으로 수행 할 수 있으며 (3mio 노드와 같은 국가 전체 쿼리의 경우 1 미만) 이론 이론에서는 최적 이지만 생산 시나리오에서 빠르게 진행하려면 약간의 조정이 필요합니다. 그리고 Contraction Hierachies와 같은 기술은 양방향 수정을 사용하여 매우 잘 수행됩니다.
도로 네트워크는 계층적이고 평면입니다.
도로 네트워크는 자동차에만 계층 적이며 평면이 아닙니다 (교량, 터널 등).