La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Problemes de Viatjants

Presentaciones similares


Presentación del tema: "Problemes de Viatjants"— Transcripción de la presentación:

1 Problemes de Viatjants
Carlos D'Andrea Facultat de Matemàtiques 1 1 1 1

2 Problemes de Viatjants
El Conector Mínimo El Camino más Corto El Problema del Viajante 2 2 2

3 El Conector Mínimo 3 3 3

4 El Camino más Corto 4 4 4

5 El Problema del Viajante
5 5 5

6 Fáciles de resolver?? 6 6 6

7 ¿Todas las rutas posibles?
6 ciudades 120=5x4x3x2x1 10 ciudades =9x8x7x6x5x4x3x2x1 15 ciudades > 20 ciudades > 1017 7 7

8 Algoritmo Un algoritmo es como una receta de cocina, un conjunto de instrucciones precisas que uno sigue para resolver un problema 8 8 8

9 Algoritmo eficiente Los algoritmos eficientes son aquelllos que un ordenador puede realizar en tiempo razonable 9 9 9

10 ¿"Razonable"? Si la cantidad de pasos a realizar es exponencial (como el factorial del número de vértices), el algoritmo NO es eficiente 10 10 10

11 ¿"Exponencial"? 15 operaciones 32=9 → 92=81→ 812=6561→ 65612=43046721
316=3x3x3x3x3x3x3x3x3x3x3x3x3x3x3x3= 15 operaciones 32=9 → 92=81→ 812=6561→ 65612= 4 operaciones 11 11 11

12 Iterativo vs recursivo
32^n=3x3x3x3x3x......x3x3x3 2n-1 productos ¡Exponencial! 32=9 → 92=81→ .....→ (32^(n-1))2 n productos ¡Lineal! 12 12 12

13 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? 13 13 13

14 Hoy aprenderemos... Conector mínimo: Algoritmo de Prim
Camino más corto: Algoritmo de Dijkstra Problema del Viajante: ??? 14 14 14

15 Un poco de lenguaje Un grafo conexo tiene vértices o nodos
aristas o lados las aristas tienen pesos o longitudes 15 15 15

16 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 16 16 16

17 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} 17 17 17

18 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} 18 18 18

19 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} 19 19 19

20 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} 20 20 20

21 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} 21 21 21

22 Algoritmo de Prim: 5o paso
Repetimos el 1er paso V={A1,A4,A5} W={A2,A3,A6,A7} 22 22 22

23 Algoritmo de Prim: 6o paso
Repetimos el 2do paso V={A1,A4,A5,A7} W={A2,A3,A6} 23 23 23

24 Algoritmo de Prim: 7o paso
Repetimos el 1er paso V={A1,A4,A5,A7} W={A2,A3,A6} 24 24 24

25 Algoritmo de Prim: 8o paso
Repetimos el 2do paso V={A1,A4,A5,A7,A3} W={A2,A6} 25 25 25

26 Algoritmo de Prim: 9o paso
Repetimos el 1er paso V={A1,A4,A5,A7,A3} W={A2,A6} 26 26 26

27 Algoritmo de Prim: 10o paso
Repetimos el 2do paso V={A1,A4,A5,A7,A3,A2} W={A6} 27 27 27

28 Algoritmo de Prim: finale
Repetimos el 1er paso V={A1,A4,A5,A7,A3,A2} W={A6} y el 2do una vez más 28 28 28

29 Y la red mínima es... 29 29 29

30 Análisis Algoritmo recursivo: hay dos pasos que se repiten:
Calcular las longitudes desde un conjunto de vértices hacia el otro 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) 30 30 30

31 ¿Cómo lo ve el ordenador?
Grafo Matriz 31 31 31

32 El código 32 32 32

33 (Algoritmo de Dijkstra)
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 33 33 33

34 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} 34 34 34

35 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} 35 35 35

36 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} 36 36 36

37 Algoritmo de Dijkstra: 3o paso
Repetimos el primer paso V={(A5,0),(A4,3)} W={A1,A2,A3,A5,A7} 37 37 37

38 V={(A5,0),(A4,3),(A1,4)} W={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} 38 38 38

39 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} 39 39 39

40 V={(A5,0),(A4,3),(A1,4),(A7,8)} W={A2,A3,A5}
Algoritmo de Dijkstra: 6o paso Repetimos el segundo paso V={(A5,0),(A4,3),(A1,4),(A7,8)} W={A2,A3,A5} 40 40 40

41 ¡Problema resuelto! 41 41 41

42 Camino más corto A6- A7 V={(A6,0)} W={A1,A2,A3,A4,A5,A7} 42 42 42

43 Camino más corto A6- A7 V={(A6,0),(A4,5)} W={A1,A2,A3,A5,A7} 43 43 43

44 Camino más corto A6- A7 V={(A6,0),(A4,5)} W={A1,A2,A3,A5,A7} 44 44 44

45 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} 45 45 45

46 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} 46 46 46

47 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} 47 47 47

48 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} 48 48 48

49 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} 49 49 49

50 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} 50 50 50

51 V={(A6,0),(A4,5),(A1,5),(A2,7),(A5,8)(A7,9)} W={A3}
Camino más corto A6- A7 V={(A6,0),(A4,5),(A1,5),(A2,7),(A5,8)(A7,9)} W={A3} 51 51 51

52 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} 52 52 52

53 Análisis Algoritmo recursivo: hay dos pasos que se repiten:
Calcular las distancias desde un conjunto de vértices hacia el otro 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 53 53 53

54 El Problema del Viajante
(????) 54 54 54

55 Y el paseo más corto es... A1→A7→A3→A2→A6→A4→A5→A4→A1= 31 55 55 55

56 Sin pasar 2 veces por el mismo lugar..
A1→A7→A3→A2→A6→A5→A1= 32 56 56 56

57 ¿Algoritmo??? 57 57 57

58 No hay! Mejor dicho: No se sabe si hay un algoritmo o no (???)
Desde el año 2000 hay una recompensa de u$d para quien "resuelva" el problema 58 58 58

59 Yo quiero ser millonario...
59 59 59

60 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! 60 60

61 En esta facultad... Grados, masters y doctorados en Matemática e Informática Grupos de Investigación en: Matemática discreta y algoritmos Álgebra Computacional Aspectos computacionales de sistemas dinámicos ... Facultat de Matemàtiques 61 61 61 61

62 ¡Al Taller! 62 62


Descargar ppt "Problemes de Viatjants"

Presentaciones similares


Anuncios Google