La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

El camí més curt i estratègies per a trobar-lo

Presentaciones similares


Presentación del tema: "El camí més curt i estratègies per a trobar-lo"— Transcripción de la presentación:

1 El camí més curt i estratègies per a trobar-lo
Carlos D'Andrea 1 1 1 1

2 “Caminos” “cortos” 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 ¿Cómo se resuelve esto? Se podrían calcular todas las posibles opciones y quedarse con la más “corta” 6 6 6

7 Hay 15 “longitudes”, 215= 32.768 posibilidades
¿Cómo se resuelve esto? Se podrían calcular todas las posibles opciones y quedarse con la más “corta” Hay 15 “longitudes”, 215= posibilidades 7 7 7

8 Hay 15 “longitudes”, 215= 32.768 posibilidades
¿Cómo se resuelve esto? Se podrían calcular todas las posibles opciones y quedarse con la más “corta” Hay 15 “longitudes”, 215= posibilidades 8 8 8

9 ¡Y podrían ser más!! 9 9 9

10 ¿Es fácil para un ordenador?
10 10

11 ¿Es fácil para un ordenador?
49 ciudades 1950 11 11

12 ¿Es fácil para un ordenador?
49 ciudades 1950 2392 ciudades 1980 12 12

13 Un ordenador... lo hace? 49 ciudades 1950 2392 ciudades 1980
13 13

14 ¿Es fácil para un ordenador?
49 ciudades 1950 2392 ciudades 1980 85900 ciudades 2006 .... Luego de 280 días de cálculo! 14 14

15 Time is Money! 15 15 15

16 ¿Cómo calcular“rápido”?
16 16 16

17 El idioma del ordenador
Un algoritmo es como una receta de cocina 17 17 17

18 El idioma del ordenador
Un algoritmo es como una receta de cocina un conjunto de instrucciones que se sigue para resolver un problema 18 18 18

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

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

21 Test de rapidez 316=3x3x3x3x3x3x3x3x3x3x3x3x3x3x3x3= 21 21 21

22 Test de rapidez 15 operaciones
316=3x3x3x3x3x3x3x3x3x3x3x3x3x3x3x3= 15 operaciones 22 22 22

23 Test de rapidez 15 operaciones 32=9 → 92=81→ 812=6561→ 65612=43046721
316=3x3x3x3x3x3x3x3x3x3x3x3x3x3x3x3= 15 operaciones 32=9 → 92=81→ 812=6561→ 65612= 23 23 23

24 Test de rapidez 15 operaciones 32=9 → 92=81→ 812=6561→ 65612=43046721
316=3x3x3x3x3x3x3x3x3x3x3x3x3x3x3x3= 15 operaciones 32=9 → 92=81→ 812=6561→ 65612= 4 operaciones 24 24 24

25 Iterativo vs recursivo
32^n=3x3x3x3x3x......x3x3x3 2n-1 productos ¡Exponencial! 25 25 25

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

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

28 Hoy aprenderemos... 28 28 28

29 Hoy aprenderemos... Conector mínimo: Algoritmo de Prim 29 29 29

30 Hoy aprenderemos... Conector mínimo: Algoritmo de Prim
Camino más corto: Algoritmo de Dijkstra 30 30 30

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

32 Un poco de lenguaje 32 32 32

33 Un poco de lenguaje Un grafo conexo tiene 33 33 33

34 Un poco de lenguaje Un grafo conexo tiene vértices o nodos 34 34 34

35 Un poco de lenguaje Un grafo conexo tiene vértices o nodos
aristas o lados 35 35 35

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

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

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

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

40 Algoritmo de Prim: 2o paso
Nos quedamos con el lado de longitud más corta, agregamos el nuevo vértice a V, y lo quitamos de W V={A1,A4} W={A2,A3,A5,A6,A7} 40 40 40

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

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

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

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

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

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

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

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

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

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

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

52 Análisis 52 52 52

53 Análisis Algoritmo recursivo: hay dos pasos que se repiten: 53 53 53

54 Análisis Algoritmo recursivo: hay dos pasos que se repiten:
Calcular las longitudes desde un conjunto de vértices hacia el otro 54 54 54

55 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. 55 55 55

56 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: polinomial en # vértices 56 56 56

57 ¿Cómo “ve” un grafo el ordenador?
Matriz 57 57 57

58 Un ejemplo 58 58 58

59 (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 59 59 59

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

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

62 Algoritmo de Dijkstra: 2o paso
Nos quedamos con la menor distancia, incorporamos ese vértice a V y lo quitamos de W V={(A5,0),(A4,3)} W={A1,A2,A3,A5,A7} 62 62 62

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

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

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

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

67 ¡Problema resuelto! 67 67 67

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

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

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

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

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

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

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

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

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

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

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

79 Análisis 79 79 79

80 Análisis Algoritmo recursivo: hay dos pasos que se repiten: 80 80 80

81 Análisis Algoritmo recursivo: hay dos pasos que se repiten:
Calcular las distancias desde un conjunto de vértices hacia el otro 81 81 81

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

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

84 El Problema del Viajante
(????) 84 84 84

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

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

87 ¿Algoritmo eficiente??? 87 87 87

88 ¡No hay! 88 88 88

89 Mejor dicho... 89 89 89

90 Mejor dicho... No se sabe si hay un algoritmo o no 90 90 90

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

92 P vs NP? P = Polinomial (determinístico)
NP = Polinomial (no determinístico) 92 92 92

93 P vs NP 93 93 93

94 Y mientras tanto qué??? 94 94 94

95 "Algoritmo" de Christofides
Es polinomial, y encuentra un camino "razonable", a veces el más corto pero no siempre 95 95 95

96 Comenzamos calculando una red mínima
Algoritmo: paso 0 Comenzamos calculando una red mínima 96 96 96

97 "Marcamos" los vértices a los que llega un número impar de aristas
Algoritmo: 1º paso "Marcamos" los vértices a los que llega un número impar de aristas 97 97 97

98 "Marcamos" los vértices a los que llega un número impar de aristas
Algoritmo: 1º paso "Marcamos" los vértices a los que llega un número impar de aristas 98 98 98

99 "Conectamos" pares de estos vértices
Algoritmo: 2º paso "Conectamos" pares de estos vértices 99 99 99

100 "Conectamos" pares de estos vértices
Algoritmo: 2º paso "Conectamos" pares de estos vértices 100 100 100

101 "Conectamos" pares de estos vértices
Algoritmo: 2º paso "Conectamos" pares de estos vértices 101 101 101

102 "Conectamos" pares de estos vértices
Algoritmo: 2º paso "Conectamos" pares de estos vértices 102 102 102

103 Intentamos "mejorar" los vértices que tienen más de 2 aristas
Algoritmo: 3º paso Intentamos "mejorar" los vértices que tienen más de 2 aristas 103 103 103

104 Intentamos "mejorar" los vértices que tienen más de 2 aristas
Algoritmo: 3º paso Intentamos "mejorar" los vértices que tienen más de 2 aristas A1→A7→A3→A2→A6→A5→A1= 32 104 104 104

105 Intentamos "mejorar" los vértices que tienen más de 2 aristas
Algoritmo: 3º paso Intentamos "mejorar" los vértices que tienen más de 2 aristas A1→A7→A3→A2→A6→A4→A5→A4→A1= 31 105 105 105

106 Para entrenarse mejor.... 106 106

107 Para entrenarse mejor.... Demostrar que los algoritmos de Prim y Dijkstra calculan lo que dicen que calculan 107 107

108 Para entrenarse mejor.... Demostrar que los algoritmos de Prim y Dijkstra calculan lo que dicen que calculan Implementar (programar) estos algoritmos 108 108

109 Para entrenarse mejor.... Demostrar que los algoritmos de Prim y Dijkstra calculan lo que dicen que calculan Implementar (programar) estos algoritmos Estudiar la complejidad de estos algoritmos 109 109

110 Para entrenarse mejor.... 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 110 110

111 Para entrenarse mejor.... 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! 111 111

112 Y si os va este rollo... 112 112

113 Y si os va este rollo... Matemática Discreta 113 113

114 Y si os va este rollo... Matemática Discreta Lógica 114 114

115 Y si os va este rollo... Matemática Discreta Lógica Algoritmos 115 115

116 Y si os va este rollo... Matemática Discreta Lógica Algoritmos
Programación 116 116

117 Y si os va este rollo... Matemática Discreta Lógica Algoritmos
Programación Complejidad 117 117

118 Y si os va este rollo... Matemática Discreta Lógica Algoritmos
Programación Complejidad ... 118 118

119 ¡Al Taller! 119 119


Descargar ppt "El camí més curt i estratègies per a trobar-lo"

Presentaciones similares


Anuncios Google