Xerrada_presentacio.ppt
Download
Report
Transcript Xerrada_presentacio.ppt
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!