2010-03-23 34 views
11

Supongamos que tengo 10 puntos. Sé la distancia entre cada punto.Algoritmo: ruta más corta entre todos los puntos

Necesito encontrar la ruta más corta posible pasando por todos los puntos.

He intentado un par de algoritmos (Dijkstra, Floyd Warshall, ...) y todos me dan el camino más corto entre el principio y el final, pero no hacen una ruta con todos los puntos.

Las permutaciones funcionan bien, pero son demasiado costosas en recursos.

¿Qué algoritmos me pueden recomendar que investigue este problema? ¿O hay una forma documentada de hacerlo con los algoritmos mencionados anteriormente?

+1

Si solo hay 10 puntos, entonces son solo 3,628,800 permutaciones. Eso no es terriblemente caro. ¿Estás esperando hacer muchos de estos? –

+0

10 puntos fue un ejemplo. Tenemos que escribir un guión que pueda tomar cualquier cantidad de puntos. – Jeroen

Respuesta

24

Eche un vistazo a travelling salesman problem.

Es posible que desee examinar algunos de los heuristic solutions. Es posible que no le puedan dar resultados 100% exactos, pero a menudo pueden encontrar soluciones lo suficientemente buenas (2 a 3% de distancia de las soluciones óptimas) en un tiempo razonable.

+0

Puede garantizar menos de 2 MST en tiempo lineal. –

+0

Vendedor ambulante se ve como lo que necesito con la diferencia de que no es un circuito cerrado. Veremos las soluciones heurísticas. Tnx! – Jeroen

6

Esto es obviamente Travelling Salesman problem. Específicamente para N=10, puede probar el algoritmo ingenuo O(N!), o usar Dynamic Programming, puede reducir esto a O(n^2 2^n), negociando espacio.

Más allá de eso, ya que este es un problema NP-difícil, solo se puede esperar una aproximación o heurística, dadas las advertencias habituales.

2

Como han mencionado otros, esta es una instancia del TSP. Creo que Concord, desarrollado en Georgia Tech es el actual solucionador de vanguardia. Puede manejar más de 10,000 puntos en pocos segundos. También tiene una API con la que es fácil trabajar.

0

creo que esto es lo que está buscando, en realidad:

Floyd Warshall

En informática, el algoritmo de Floyd-Warshall (a veces conocido como el WFI Algoritmo [aclaración necesaria], Algoritmo de Roy-Floyd o solo algoritmo de Floyd) es un algoritmo de análisis de gráficos para encontrar las rutas más cortas en un gráfico ponderado (con pesos de borde positivo o negativo). Un sola ejecución del algoritmo se encuentran las longitudes (resumió pesos) de los caminos más cortos entre todos los pares de vértices aunque no devuelve los detalles de los caminos mismos

En la subsección "Ruta de la reconstrucción" se explica la estructura de datos que necesitará para almacenar las "rutas" (en realidad solo almacena el siguiente nodo al que ir y luego reconstruye trivialmente cualquier ruta que se requiera).

+0

En realidad, el OP menciona FW y claramente no es lo que está pidiendo. – ziggystar

+1

Es posible que el OP lo haya mencionado, pero eso no significa que conocía la reconstrucción de la ruta, que es lo que agrega el comentario anterior. –

Cuestiones relacionadas