2012-04-07 2 views
2

내 그래프에 꼭지점을 연결하는 가장자리가 없습니다. 두 꼭지점 사이에 하나의 모서리 만 있습니다. Wikipedia에서 주어진 조건에 따라 최단 경로를 계산하는 데 사용되는 알고리즘에 대해 알아야합니다. 가장 유명한 알고리즘 중 하나는 Dijkstra's algorithm입니다.이 알고리즘은 소스 버텍스에서 그래프의 다른 모든 버텍스까지 최단 경로를 찾습니다.
그러나 Dijkstra's algorithm을 사용하면 불필요한 모든 정점을 탐색 할 수 있지만 내 목표는 단일 소스에서 단일 대상까지 최단 경로를 찾는 것입니다. 어떤 전략을 사용해야합니까? 그래서 다른 모든 정점을 탐색 할 필요가 없습니다.그래프에서 단일 소스에서 단일 대상까지의 최단 경로

내 접근 방식 중 하나는 bidirectional bfs을 사용하는 것입니다. bidirectional bfs 나는 두 개의 bfssource node에서, 다른 하나는 destination node에서 적용하는 것을 의미합니다. 같은 시간에 두 번 모두 같은 것을 발견하면 처음으로 bfs을 종료 할 수 있습니다. 소스에서 자식까지의 경로 union은 자식에서 대상까지 경로가 원본에서 대상까지의 최단 경로가됩니다.

위키 피 디아와 bidirectional bfs에 설명 된 모든 접근법 중에서 어느 것이 내 그래프에 가장 적합한가?

주어진 정점 uv에 대한 v-u에서 최단 경로 찾기 : 581이 소개 알고리즘 (CLRS) 두 번째 버전 페이지에

+0

관련 : http://stackoverflow.com/questions/2655880/how-to-optimize-dijkstra-algorithm-for-a-single-shortest-path-between-2-nodes –

+0

@KshitijMehta : 내가해야 하는가 [Dijkstra의 알고리즘] (http://stackoverflow.com/questions/2655880/how-to-optimize-dijkstra-algorithm-for-a-single-shortest-path-between-2-nodes)을 여기에 적용 하시겠습니까? 이것이 내 그래프를위한 최선의 방법인가? –

+1

A * 검색을 사용할 수도 있지만 휴리스틱 함수를 사용하는 것이고 "인공 지능"기반 접근 방식에 가깝습니다. 그것 이외에, Dijkstra의 것이 최선의 선택입니다. –

답변

4

당신이 사용할 수있는 명백한 휴리스틱 함수가 있거나 그래프에 대해 더 이상 유용한 정보가없는 경우에 따라 다릅니다.

  • BFS :

    귀하의 옵션은 일반적인 경우를하거나 계산 시간에 대해 그렇게 많이 신경 쓰지 않는 경우.

  • Dijkstra (Dijkstra는 "우선 순위 대기열이있는 BFS 임) : 가장자리에 가중치/가격 (음수가 아닌)이 있고 CPU 시간을 신경 쓰는 경우.
  • A * (A * "는"휴리스틱 기능이있는 다이크 스트라 (Dijkstra with heuristic function) - 예 : 도시지도의 거리) : 평균적인 경우에는 속도가 매우 빠르길 원하지만 좋은 휴리스틱 기능을 제공해야합니다.

일부 그래프 문제의 경우 동적 프로그래밍이나 다른 알고리즘 도구를 사용할 수 있습니다. 그것은 상황에 달려 있습니다. 자세한 내용은 http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=alg_index에서 자습서를 참조하십시오.

1

. 소스 버텍스가 u 인 단일 소스 문제를 풀면이 문제도 해결됩니다. 또한 최악의 경우 단일 단일 소스 알고리즘보다 빨리 점근 적으로 실행되는이 문제에 대한 알고리즘은 알려져 있지 않습니다.

그래서, 데이크 스트라 알고리즘 :

0

당신은 다 익스트라의 알고리즘을 사용하고 당신은 이미 더 이상 당신이 지금까지 발견 된 가장 짧은보다 경로를 탐색 중지 방법을 최적화 할 수 충실. 그것들은 더 짧을 것이기 때문에 (당신이 당신의 가장자리에 부정적인 무게를 가지고 있지 않다면).

+0

내 그래프에 양수가 포함되어 있습니다. –

+0

논리를 얻지 못했습니다. 'Dijkstra의 알고리즘'은 항상 가장 짧은 가장자리를 선택합니다. –

1

Wikipedia 문서에 대한 답을 주문 :

우리가 정점 소스와 대상 사이의 최단 경로에만 관심이 있다면, 우리는 u를하는 경우 = 대상 라인 (13)에서 검색을 종료 할 수 있습니다.

관련 문제