그래프 검색 최적화 문제를 해결하고 있습니다. 직접 가중 그래프를 통해 k 개의 비순환 최단 경로를 찾아야합니다.
나는 정확하고 근사한 k-best 알고리즘이 많이 있다는 것을 알고 있지만 최근 연구의 대부분은 매우 크고 매우 드물게 연결된 그래프 (예 : 도로 라우팅 및 방향)를 지향하는 것으로 보이며 내 그래프도 마찬가지입니다.
내 문제의 구별 측면 :
그래프는 대략 160 개의 정점으로 구성됩니다.
그래프는 거의 완전히 연결되어 있습니다 (양방향으로 ~ 160 ^ 2 ~ = 25k 가장자리)
k는 매우 작을 것입니다 (아마도 10보다 작음)
최대 경로 길이는 아마도 제한적이며 매우 작을 것입니다 (예 : 3-5 가장자리)
위의 '비순환'이라고 말했지만 반복하기 위해 솔루션에는주기가 포함되어서는 안됩니다. 이것은 1- 최단 최단 경로의 문제는 아니지만 k- 최고의 경우 문제가됩니다. 예를 들어 도로 경로를 고려하십시오. A에서 B까지의 2 번째 최단 경로는 1- 최고와 동일 할 수 있습니다. 어딘가에 블록 주위에 빠른 여행. 수학적으로 최적이지만 매우 유용한 솔루션은 아닙니다. ;-)
계산할 때마다 가장자리의 무게를 다시 조정해야 할 수도 있습니다. 간선 비용은 여러 요인의 가중치 합계로 구성되며 최종 요구 사항 (가져올 때마다)은 가중치를 변경하여 가중치 요소의 우선 순위를 사용자가 지정할 수 있습니다. 상대적으로 작은 그래프이므로 (수백 KB로 표시 할 수 있어야 함) 메모리에서 그래프를 복제하고 다시 가중치를 적용한 다음 복제 된 그래프에서 검색을 실행하는 것이 합리적입니다. 그러나 가중치를 즉시 계산하는 동안 검색을 수행하는보다 효과적인 방법이 있다면 관심이 있습니다.
Santos (K 최단 경로 알고리즘), Eppstein 1997 (k 최단 경로 찾기) 및 기타에 설명 된 알고리즘을보고 있습니다. 엔의 알고리즘은 주로 기존 Java 구현 때문에 중요 합니다 . 나는 연구 논문을 읽는 것이 무서워하지 않지만 문제의 세부 사항을 버리고 독서 시간을 절약하기 위해 포인터를 요구하는 것이 가치 있다고 생각했습니다.
Java 구현에 대한 포인터가 있다면 더 좋습니다.