in

Problema del vendedor ambulante | Conjunto 1 (programación ingenua y dinámica)

gfg 200x200 min

Problema del vendedor ambulante (TSP): Dado un conjunto de ciudades y la distancia entre cada par de ciudades, el problema es encontrar la ruta más corta posible que visite cada ciudad exactamente una vez y regrese al punto de partida.
Tenga en cuenta la diferencia entre el ciclo hamiltoniano y el TSP. El problema del ciclo de Hamiltoninan es encontrar si existe un recorrido que visite cada ciudad exactamente una vez. Aquí sabemos que existe el Hamiltonian Tour (porque el gráfico está completo) y de hecho existen muchos de esos tours, el problema es encontrar un ciclo hamiltoniano de peso mínimo.

Euler1

Por ejemplo, considere el gráfico que se muestra en la figura del lado derecho. Un recorrido de TSP en el gráfico es 1-2-4-3-1. El costo del tour es 10 + 25 + 30 + 15 que es 80.

El problema es un problema difícil NP famoso. No existe una solución de tiempo polinomial conocido para este problema.

A continuación se presentan diferentes soluciones para el problema del viajante.

Solución ingenua:
1) Considere la ciudad 1 como punto inicial y final.
2) ¡Genere todo (n-1)! Permutaciones de ciudades.
3) Calcule el costo de cada permutación y realice un seguimiento del costo mínimo de permutación.
4) Devuelve la permutación con mínimo coste.

Complejidad de tiempo: Θ (n!)

Programación dinámica:
Sea el conjunto de vértices dado {1, 2, 3, 4,… .n}. Consideremos 1 como punto inicial y final de salida. Para cada otro vértice i (distinto de 1), encontramos la ruta de costo mínimo con 1 como punto de partida, i como punto final y todos los vértices aparecen exactamente una vez. Deje que el costo de esta ruta sea el costo (i), el costo del Ciclo correspondiente sería costo (i) + dist (i, 1) donde dist (i, 1) es la distancia de i a 1. Finalmente, devolvemos el mínimo de todos [cost(i) + dist(i, 1)] valores. Esto parece simple hasta ahora. Ahora la pregunta es ¿cómo obtener el costo (i)?
Para calcular el costo (i) usando la programación dinámica, necesitamos tener alguna relación recursiva en términos de subproblemas. Definamos un término C (S, i) es el costo de la ruta de costo mínimo que visita cada vértice en el conjunto S exactamente una vez, comenzando en 1 y terminando en i.
Comenzamos con todos los subconjuntos de tamaño 2 y calculamos C (S, i) para todos los subconjuntos donde S es el subconjunto, luego calculamos C (S, i) para todos los subconjuntos S de tamaño 3 y así sucesivamente. Tenga en cuenta que 1 debe estar presente en cada subconjunto.

If size of S is 2, then S must be {1, i},
 C(S, i) = dist(1, i) 
Else if size of S is greater than 2.
 C(S, i) = min { C(S-{i}, j) + dis(j, i)} where j belongs to S, j != i and j != 1.

Para un conjunto de tamaño n, consideramos n-2 subconjuntos cada uno de tamaño n-1 de modo que todos los subconjuntos no tienen n-ésimo.
Usando la relación de recurrencia anterior, podemos escribir una solución basada en programación dinámica. Hay como máximo O (n * 2norte) subproblemas, y cada uno requiere un tiempo lineal para resolverlo. Por tanto, el tiempo de ejecución total es O (n2* 2norte). La complejidad del tiempo es mucho menor que O (n!), Pero aún exponencial. El espacio requerido también es exponencial. Por lo tanto, este enfoque tampoco es factible incluso para un número ligeramente mayor de vértices.

Pronto discutiremos algoritmos aproximados para el problema del viajante.

Artículo siguiente: Problema del vendedor ambulante | Conjunto 2

Referencias:
http://www.lsi.upc.edu/~mjserna/docencia/algofib/P07/dynprog.pdf
http://www.cs.berkeley.edu/~vazirani/algorithms/chap6.pdf

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema discutido anteriormente.

¡Atención lector! No dejes de aprender ahora. Obtenga todos los conceptos importantes de DSA con el Curso autodidacta de DSA a un precio asequible para los estudiantes y prepárese para la industria. Para completar su preparación desde el aprendizaje de un idioma hasta DS Algo y muchos más, consulte Curso completo de preparación para entrevistas.

En caso de que desee asistir clases en vivo con expertos, consulte Clases en vivo de DSA para profesionales que trabajan y Programación competitiva en vivo para estudiantes.

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

apple touch icon@2

¿Existe un equivalente de ‘which’ en la línea de comandos de Windows?

Diabetes Type 1 vs Type 2

Diabetes tipo 1 vs diabetes tipo 2: diferencia y comparación