가장 빠른 경로를 결정하는 알고리즘?


17

가장 짧은 경로는 1-4-3-5 (총 60km)입니다.

그래프

Dijkstra의 알고리즘 을 사용 하여이를 수행 할 수 있습니다.

문제는 교통 체증이나 기타 요인으로 인해 가장 짧은 경로가 항상 가장 빠른 경로는 아니라는 것입니다.

예를 들면 다음과 같습니다.

  • 1-2는 교통 체증이 자주 발생하는 것으로 알려져 있으므로 피해야합니다.
  • 갑자기 자동차 사고가 4-3을 따라 발생하므로 피해야합니다.
  • 기타...

따라서 교통 체증 / 사고가 없기 때문에 경로 1-4-5에서 속도를 높일 수 있으므로 5에 더 빨리 도착합니다.

글쎄, 그것은 일반적인 아이디어이며, 아직 더 자세한 것은 생각하지 않았습니다.

이 문제를 해결하는 알고리즘이 있습니까?


3
숙제입니까? 가중 그래프를 순회하기위한 단순한 en.wikipedia.org/wiki/Travelling_salesman_problem 이 아닙니까?
StuperUser

9
@StuperUser : 아니요. TSP는 중복이없는 모든 노드의 회로입니다. 예제의 경우, 예를 들어 노드 2를 칠 필요가 없습니다.
David Thornley

2
@DavidThornley 알겠습니다. Dijkstra는 가중치 그래프에서 가장 짧은 경로입니까? 그리고 TSP는 모든 노드를 방문하는 순회입니까?
StuperUser

1
@Stuper : 최단 탐색, 그래
BlueRaja - 대니 Pflughoeft

2
@StuperUser, 단지 참고로, TSP는 다항식 시간에 실행할 수있는 솔루션이없는 강력한 NP-Complete 문제입니다. ... 이제 알 것입니다.
riwalk December

답변:



49

예 : Dijkstra

Dijkstra는이 상황에서도 잘 작동합니다.
거리보다는 시간을 각 호의 무게로 사용하십시오.


9
일반적으로 Dijkstra의 '거리'는 모든 종류의 물건, 비용 / 통행료, 고속도로 선호도, 속도 제한에 대해 가중치가 적용됩니다. 거리 만 사용하는 것이 가장 간단한 방법입니다. 이것이 알고리즘을 영리하게 만드는 것입니다
Martin Beckett

6
Dijsktra가 할 것이지만, 나는 진지한 길 찾기 작업에 일반적으로 A *를 선택할 것입니다. 휴리스틱은 많은 도움이 될 것입니다.
Mircea Chirea

6
링크 : A * 검색 알고리즘 . Dijkstra의 방법을 확장 한 것입니다.
mgkrebbs

적용 가능한 휴리스틱이있는 한 A *는 성능 측면에서 Dijkstra보다 우수합니다.
bummzack

허용 가능한 휴리스틱은 많은 요소 (예 : 교통 체증)를 고려한 것으로 생각하면 여기서 찾기가 다소 어려울 수 있습니다.
pwny

16

예. Dijkstra의 알고리즘이이 문제를 해결합니다.

귀하의 경우 문제는 가장 짧은 경로가 이동 한 거리와 동일하다고 가정한다는 것입니다. 실제로 경로를 가져가는 비용과 더 적절하게 일치합니다.

하나의 경로에로드 블록이있는 경우 비용이 높아지고 알고리즘이 계속 적용됩니다.


그래, 내가 올바른 말을 사용하지 않았다면 죄송합니다. 내가 의미하는 것은 '가장 편리한 경로'(가장 최소 비용)
anta40

11

거리를 노드 사이의 시간으로 바꾸고 같은 방식으로 해결할 수 있어야합니다.


10

다이크 스트라

앞에서 말했듯이 최단 거리에만 사용되는 것은 아닙니다. 나는이 애니메이션이 Dijkstra의 "힘"(더 나은 단어가 없음)에 대해 잘 이해하고 있다고 생각합니다.

다이크 스트라

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.