Problemes de Viatjants
Carlos D'Andrea
Facultat de Matemàtiques
1
Problemes de Viatjants



El Conector Mínimo
El Camino más Corto
El Problema del Viajante
El Conector Mínimo
El Camino más Corto
El Problema del Viajante
Fáciles de resolver??
¿Todas las rutas posibles?
6 ciudades 120=5x4x3x2x1
10 ciudades 362880=9x8x7x6x5x4x3x2x1
15 ciudades >100.000.000.000
20 ciudades > 1017
Algoritmo
Un algoritmo es como una receta de cocina, un
conjunto de instrucciones precisas que uno
sigue para resolver un problema
Algoritmo eficiente
Los algoritmos eficientes son aquelllos que un
ordenador puede realizar en tiempo razonable
¿"Razonable"?
Si la cantidad de pasos a realizar es exponencial
(como el factorial del número de vértices), el
algoritmo NO es eficiente
¿"Exponencial"?
316=3x3x3x3x3x3x3x3x3x3x3x3x3x3x3x3=43046721
15 operaciones
32=9 → 92=81→ 812=6561→ 65612=43046721
4 operaciones
Iterativo vs recursivo
32^n=3x3x3x3x3x......x3x3x3
2n-1 productos ¡Exponencial!
32=9 → 92=81→ .....→ (32^(n-1))2
n productos ¡Lineal!
En nuestro caso...
¿Es posible encontrar un algoritmo (recursivo,
iterativo o...) que resuelva los tres problemas sin
tener que hacer una cantidad exponencial de
operaciones?
Hoy aprenderemos...
Conector mínimo: Algoritmo de Prim
Camino más corto: Algoritmo de Dijkstra
Problema del Viajante: ???
Un poco de lenguaje
Un grafo conexo tiene
vértices o nodos
aristas o lados
las aristas tienen pesos o longitudes
Conector Mínimo
(Algoritmo de Prim)
Dado un grafo conexo, encuentra una red mínima
o un conector mínimo entre todos sus vértices
Algoritmo de Prim: paso 0
Elegimos un vértice cualquiera (A1), y lo
"separamos" de los otros
V={A1}
W={A2,A3,A4,A5,A6,A7}
Algoritmo de Prim: 1o paso
Calculamos todas las longitudes de aristas que
salen de V y llegan a W
V={A1}
W={A2,A3,A4,A5,A6,A7}
Algoritmo de Prim: 2o paso
Nos quedamos con el lado de longitud más corta,
y agregamos el nuevo vértice a V
V={A1,A4}
W={A2,A3,A5,A6,A7}
Algoritmo de Prim: 3o paso
Como en el 1er paso, volvemos a calcular todas
las longitudes de lados que conectan puntos de V
con puntos de W
V={A1,A4}
W={A2,A3,A5,A6,A7}
Algoritmo de Prim: 4o paso
Como en el 2do paso, nos quedamos con el lado
de menor longitud. Modificamos los conjuntos V y
W
V={A1,A4,A5}
W={A2,A3,A6,A7}
Algoritmo de Prim: 5o paso
Repetimos el 1er paso
V={A1,A4,A5}
W={A2,A3,A6,A7}
Algoritmo de Prim: 6o paso
Repetimos el 2do paso
V={A1,A4,A5,A7}
W={A2,A3,A6}
Algoritmo de Prim: 7o paso
Repetimos el 1er paso
V={A1,A4,A5,A7}
W={A2,A3,A6}
Algoritmo de Prim: 8o paso
Repetimos el 2do paso
V={A1,A4,A5,A7,A3}
W={A2,A6}
Algoritmo de Prim: 9o paso
Repetimos el 1er paso
V={A1,A4,A5,A7,A3}
W={A2,A6}
Algoritmo de Prim: 10o paso
Repetimos el 2do paso
V={A1,A4,A5,A7,A3,A2}
W={A6}
Algoritmo de Prim: finale
Repetimos el 1er paso
V={A1,A4,A5,A7,A3,A2}
y el 2do una vez más
W={A6}
Y la red mínima es...
Análisis
Algoritmo recursivo: hay dos pasos que se repiten:
(1) Calcular las longitudes desde un conjunto de
vértices hacia el otro
(2) Elegir el lado de longitud mínima e incrementar el
conjunto de vértices de partida.
Cantidad de pasos: 2 x (cantidad de vértices -1)
¿Cómo lo ve el ordenador?
Grafo
Matriz
El código
El Camino más corto
(Algoritmo de Dijkstra)
Dados un grafo conexo y dos de sus vértices,
encuentra un camino de longitud mínima que los
une
Algoritmo de Dijkstra: paso 0

Separamos los vértices en 2 conjuntos, uno de ellos
solamente tendrá a uno de los extremos con una
distancia asociada (= 0)
V={(A5,0)} W={A1,A2,A3,A4,A5,A7}
Algoritmo de Dijkstra: 1o paso
Calculamos todas las distancias posibles entre
vértices de V y vértices de W
V={(A5,0)} W={A1,A2,A3,A4,A6,A7}

Algoritmo de Dijkstra: 2o paso
Nos quedamos con la menor distancia, y la
incorporamos al conjunto V
V={(A5,0),(A4,3)} W={A1,A2,A3,A5,A7}

Algoritmo de Dijkstra: 3o paso
Repetimos el primer paso

V={(A5,0),(A4,3)} W={A1,A2,A3,A5,A7}
Algoritmo de Dijkstra: 4o paso
Repetimos el segundo paso

V={(A5,0),(A4,3),(A1,4)} W={A2,A3,A5,A7}
Algoritmo de Dijkstra: 5o paso
Repetimos el primer paso

V={(A5,0),(A4,3),(A1,4)} W={A2,A3,A5,A7}
Algoritmo de Dijkstra: 6o paso
Repetimos el segundo paso

V={(A5,0),(A4,3),(A1,4),(A7,8)} W={A2,A3,A5}
¡Problema resuelto!
Camino más corto A6- A7
V={(A6,0)} W={A1,A2,A3,A4,A5,A7}
Camino más corto A6- A7
V={(A6,0),(A4,5)} W={A1,A2,A3,A5,A7}
Camino más corto A6- A7
V={(A6,0),(A4,5)} W={A1,A2,A3,A5,A7}
Camino más corto A6- A7
V={(A6,0),(A4,5),(A1,5)}
W={A2,A3,A5,A7}
Camino más corto A6- A7
V={(A6,0),(A4,5),(A1,5)} W={A2,A3,A5,A7}
Camino más corto A6- A7
V={(A6,0),(A4,5),(A1,5),(A2,7)} W={A3,A5,A7}
Camino más corto A6- A7
V={(A6,0),(A4,5),(A1,5),(A2,7)}
W={A3,A5,A7}
Camino más corto A6- A7
V={(A6,0),(A4,5),(A1,5),(A2,7),(A5,0)} W={A3,A7}
Camino más corto A6- A7
V={(A6,0),(A4,5),(A1,5),(A2,7),(A5,0)} W={A3,A7}
Camino más corto A6- A7
V={(A6,0),(A4,5),(A1,5),(A2,7),(A5,8)(A7,9)} W={A3}
Y el camino más corto es...
V={(A6,0),(A4,5),(A1,5),(A2,7),(A5,8)(A7,9)}
W={A3}
Análisis
Algoritmo recursivo: hay dos pasos que se repiten:
(1) Calcular las distancias desde un conjunto de
vértices hacia el otro
(2) Elegir la distancia mínima e incrementar el
conjunto de vértices de partida hasta llegar al
destino
Al llegar al destino hay que "desandar" el camino
El Problema del Viajante
(????)
Y el paseo más corto es...
A1→A7→A3→A2→A6→A4→A5→A4→A1= 31
Sin pasar 2 veces por el
mismo lugar..
A1→A7→A3→A2→A6→A5→A1= 32
¿Algoritmo???
No hay!
Mejor dicho:
 No se sabe si hay un
algoritmo o no (???)
 Desde el año 2000 hay una
recompensa de 1.000.000 u$d
para quien "resuelva" el
problema
Yo quiero ser millonario...
Primeros pasos....
Demostrar que los algoritmos de Prim y Dijkstra calculan lo
que dicen que calculan
Implementar (programar) estos algoritmos
Estudiar la complejidad de estos algoritmos
Aprender a diferenciar las clases de complejidad
Tener ideas originales!

En esta facultad...
Grados, masters y doctorados en
Matemática e Informática
Facultat de Matemàtiques
Grupos de Investigación en:
Matemática discreta y algoritmos
Álgebra Computacional
Aspectos computacionales de
sistemas dinámicos
...
61
¡Al Taller!
Descargar

Mobilitat internacional 2009-10