El cam ms curt i estratgies per a

  • Slides: 119
Download presentation
El camí més curt i estratègies per a trobar-lo Carlos D'Andrea 1

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

“Caminos” “cortos”

“Caminos” “cortos”

El Conector Mínimo

El Conector Mínimo

El Camino más Corto

El Camino más Corto

El Problema del Viajante

El Problema del Viajante

¿Cómo se resuelve esto? Se podrían calcular todas las posibles opciones y quedarse con

¿Cómo se resuelve esto? Se podrían calcular todas las posibles opciones y quedarse con la más “corta”

¿Cómo se resuelve esto? Se podrían calcular todas las posibles opciones y quedarse con

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

¿Cómo se resuelve esto? Se podrían calcular todas las posibles opciones y quedarse con

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

¡Y podrían ser más!!

¡Y podrían ser más!!

¿Es fácil para un ordenador?

¿Es fácil para un ordenador?

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

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

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

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

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

Un ordenador. . . lo hace? 49 ciudades 1950 2392 ciudades 1980 85900 ciudades 2006

¿Es fácil para un ordenador? 49 ciudades 1950 2392 ciudades 1980 85900 ciudades 2006.

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

Time is Money!

Time is Money!

¿Cómo calcular“rápido”?

¿Cómo calcular“rápido”?

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

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

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

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

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

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

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

Test de rapidez 316=3 x 3 x 3 x 3 x 3=43046721

Test de rapidez 316=3 x 3 x 3 x 3 x 3=43046721

Test de rapidez 316=3 x 3 x 3 x 3 x 3=43046721 15 operaciones

Test de rapidez 316=3 x 3 x 3 x 3 x 3=43046721 15 operaciones

Test de rapidez 316=3 x 3 x 3 x 3 x 3=43046721 15 operaciones

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

Test de rapidez 316=3 x 3 x 3 x 3 x 3=43046721 15 operaciones

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

Iterativo vs recursivo 32^n=3 x 3 x 3 x. . . x 3 x

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

Iterativo vs recursivo 32^n=3 x 3 x 3 x. . . x 3 x

Iterativo vs recursivo 32^n=3 x 3 x 3 x. . . x 3 x 3 x 3 2 n-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. .

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

Hoy aprenderemos. . .

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

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

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

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

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

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

Un poco de lenguaje

Un poco de lenguaje

Un poco de lenguaje Un grafo conexo tiene

Un poco de lenguaje Un grafo conexo tiene

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

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

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

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

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

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

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 (A 1), y lo "separamos"

Algoritmo de Prim: paso 0 Elegimos un vértice cualquiera (A 1), y lo "separamos" de los otros V={A 1} W={A 2, A 3, A 4, A 5, A 6, A 7}

Algoritmo de Prim: 1 o paso Calculamos todas longitudes de aristas que salen de

Algoritmo de Prim: 1 o paso Calculamos todas longitudes de aristas que salen de V y llegan a W V={A 1} W={A 2, A 3, A 4, A 5, A 6, A 7}

Algoritmo de Prim: 2 o paso Nos quedamos con el lado de longitud más

Algoritmo de Prim: 2 o paso Nos quedamos con el lado de longitud más corta, agregamos el nuevo vértice a V, y lo quitamos de W V={A 1, A 4} W={A 2, A 3, A 5, A 6, A 7}

Algoritmo de Prim: 3 o paso Como en el 1 er paso, volvemos a

Algoritmo de Prim: 3 o paso Como en el 1 er paso, volvemos a calcular todas longitudes de lados que conectan puntos de V con puntos de W V={A 1, A 4} W={A 2, A 3, A 5, A 6, A 7}

Algoritmo de Prim: 4 o paso Como en el 2 do paso, nos quedamos

Algoritmo de Prim: 4 o paso Como en el 2 do paso, nos quedamos con el lado de menor longitud. Modificamos los conjuntos V y W V={A 1, A 4, A 5} W={A 2, A 3, A 6, A 7}

Algoritmo de Prim: 5 o paso Repetimos el 1 er paso V={A 1, A

Algoritmo de Prim: 5 o paso Repetimos el 1 er paso V={A 1, A 4, A 5} W={A 2, A 3, A 6, A 7}

Algoritmo de Prim: 6 o paso Repetimos el 2 do paso V={A 1, A

Algoritmo de Prim: 6 o paso Repetimos el 2 do paso V={A 1, A 4, A 5, A 7} W={A 2, A 3, A 6}

Algoritmo de Prim: 7 o paso Repetimos el 1 er paso V={A 1, A

Algoritmo de Prim: 7 o paso Repetimos el 1 er paso V={A 1, A 4, A 5, A 7} W={A 2, A 3, A 6}

Algoritmo de Prim: 8 o paso Repetimos el 2 do paso V={A 1, A

Algoritmo de Prim: 8 o paso Repetimos el 2 do paso V={A 1, A 4, A 5, A 7, A 3} W={A 2, A 6}

Algoritmo de Prim: 9 o paso Repetimos el 1 er paso V={A 1, A

Algoritmo de Prim: 9 o paso Repetimos el 1 er paso V={A 1, A 4, A 5, A 7, A 3} W={A 2, A 6}

Algoritmo de Prim: 10 o paso Repetimos el 2 do paso V={A 1, A

Algoritmo de Prim: 10 o paso Repetimos el 2 do paso V={A 1, A 4, A 5, A 7, A 3, A 2} W={A 6}

Algoritmo de Prim: finale Repetimos el 1 er paso V={A 1, A 4, A

Algoritmo de Prim: finale Repetimos el 1 er paso V={A 1, A 4, A 5, A 7, A 3, A 2} W={A 6}

Algoritmo de Prim: finale Repetimos el 1 er paso V={A 1, A 4, A

Algoritmo de Prim: finale Repetimos el 1 er paso V={A 1, A 4, A 5, A 7, A 3, A 2} y el 2 do una vez más W={A 6}

Y la red mínima es. . .

Y la red mínima es. . .

Análisis

Análisis

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

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

Análisis Algoritmo recursivo: hay dos pasos que se repiten: (1) Calcular las longitudes desde

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

Análisis Algoritmo recursivo: hay dos pasos que se repiten: (1) Calcular las longitudes desde

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.

Análisis Algoritmo recursivo: hay dos pasos que se repiten: (1) Calcular las longitudes desde

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

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

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

Un ejemplo

Un ejemplo

El Camino más corto (Algoritmo de Dijkstra) Dados un grafo conexo y dos de

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

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={(A 5, 0)} W={A 1, A 2, A 3, A 4, A 5, A 7}

Algoritmo de Dijkstra: 1 o paso Calculamos todas las distancias posibles entre vértices de

Algoritmo de Dijkstra: 1 o paso Calculamos todas las distancias posibles entre vértices de V y vértices de W V={(A 5, 0)} W={A 1, A 2, A 3, A 4, A 6, A 7}

Algoritmo de Dijkstra: 2 o paso Nos quedamos con la menor distancia, incorporamos ese

Algoritmo de Dijkstra: 2 o paso Nos quedamos con la menor distancia, incorporamos ese vértice a V y lo quitamos de W V={(A 5, 0), (A 4, 3)} W={A 1, A 2, A 3, A 5, A 7}

Algoritmo de Dijkstra: 3 o paso Repetimos el primer paso V={(A 5, 0), (A

Algoritmo de Dijkstra: 3 o paso Repetimos el primer paso V={(A 5, 0), (A 4, 3)} W={A 1, A 2, A 3, A 5, A 7}

Algoritmo de Dijkstra: 4 o paso Repetimos el segundo paso V={(A 5, 0), (A

Algoritmo de Dijkstra: 4 o paso Repetimos el segundo paso V={(A 5, 0), (A 4, 3), (A 1, 4)} W={A 2, A 3, A 5, A 7}

Algoritmo de Dijkstra: 5 o paso Repetimos el primer paso V={(A 5, 0), (A

Algoritmo de Dijkstra: 5 o paso Repetimos el primer paso V={(A 5, 0), (A 4, 3), (A 1, 4)} W={A 2, A 3, A 5, A 7}

Algoritmo de Dijkstra: 6 o paso Repetimos el segundo paso V={(A 5, 0), (A

Algoritmo de Dijkstra: 6 o paso Repetimos el segundo paso V={(A 5, 0), (A 4, 3), (A 1, 4), (A 7, 8)} W={A 2, A 3, A 5}

¡Problema resuelto!

¡Problema resuelto!

Camino más corto A 6 - A 7 V={(A 6, 0)} W={A 1, A

Camino más corto A 6 - A 7 V={(A 6, 0)} W={A 1, A 2, A 3, A 4, A 5, A 7}

Camino más corto A 6 - A 7 V={(A 6, 0), (A 4, 5)}

Camino más corto A 6 - A 7 V={(A 6, 0), (A 4, 5)} W={A 1, A 2, A 3, A 5, A 7}

Camino más corto A 6 - A 7 V={(A 6, 0), (A 4, 5)}

Camino más corto A 6 - A 7 V={(A 6, 0), (A 4, 5)} W={A 1, A 2, A 3, A 5, A 7}

Camino más corto A 6 - A 7 V={(A 6, 0), (A 4, 5),

Camino más corto A 6 - A 7 V={(A 6, 0), (A 4, 5), (A 1, 5)} W={A 2, A 3, A 5, A 7}

Camino más corto A 6 - A 7 V={(A 6, 0), (A 4, 5),

Camino más corto A 6 - A 7 V={(A 6, 0), (A 4, 5), (A 1, 5)} W={A 2, A 3, A 5, A 7}

Camino más corto A 6 - A 7 V={(A 6, 0), (A 4, 5),

Camino más corto A 6 - A 7 V={(A 6, 0), (A 4, 5), (A 1, 5), (A 2, 7)} W={A 3, A 5, A 7}

Camino más corto A 6 - A 7 V={(A 6, 0), (A 4, 5),

Camino más corto A 6 - A 7 V={(A 6, 0), (A 4, 5), (A 1, 5), (A 2, 7)} W={A 3, A 5, A 7}

Camino más corto A 6 - A 7 V={(A 6, 0), (A 4, 5),

Camino más corto A 6 - A 7 V={(A 6, 0), (A 4, 5), (A 1, 5), (A 2, 7), (A 5, 0)} W={A 3, A 7}

Camino más corto A 6 - A 7 V={(A 6, 0), (A 4, 5),

Camino más corto A 6 - A 7 V={(A 6, 0), (A 4, 5), (A 1, 5), (A 2, 7), (A 5, 0)} W={A 3, A 7}

Camino más corto A 6 - A 7 V={(A 6, 0), (A 4, 5),

Camino más corto A 6 - A 7 V={(A 6, 0), (A 4, 5), (A 1, 5), (A 2, 7), (A 5, 8)(A 7, 9)} W={A 3}

Y el camino más corto es. . . V={(A 6, 0), (A 4, 5),

Y el camino más corto es. . . V={(A 6, 0), (A 4, 5), (A 1, 5), (A 2, 7), (A 5, 8)(A 7, 9)} W={A 3}

Análisis

Análisis

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

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

Análisis Algoritmo recursivo: hay dos pasos que se repiten: (1) Calcular las distancias desde

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

Análisis Algoritmo recursivo: hay dos pasos que se repiten: (1) Calcular las distancias desde

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

Análisis Algoritmo recursivo: hay dos pasos que se repiten: (1) Calcular las distancias desde

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 (? ? )

El Problema del Viajante (? ? )

Y el paseo más corto es. . . A 1→A 7→A 3→A 2→A 6→A

Y el paseo más corto es. . . A 1→A 7→A 3→A 2→A 6→A 4→A 5→A 4→A 1= 31

Sin pasar 2 veces por el mismo lugar. . A 1→A 7→A 3→A 2→A

Sin pasar 2 veces por el mismo lugar. . A 1→A 7→A 3→A 2→A 6→A 5→A 1= 32

¿Algoritmo eficiente? ? ?

¿Algoritmo eficiente? ? ?

¡No hay!

¡No hay!

Mejor dicho. . .

Mejor dicho. . .

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

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

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

Mejor dicho. . . No se sabe si hay un algoritmo o no Desde el año 2000 hay una recompensa de 1. 000 U$D para quien "resuelva" resuelva el problema

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

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

P vs NP

P vs NP

Y mientras tanto qué? ? ?

Y mientras tanto qué? ? ?

"Algoritmo" de Christofides Es polinomial, y encuentra un camino "razonable", a veces el más

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

Algoritmo: paso 0 Comenzamos calculando una red mínima

Algoritmo: paso 0 Comenzamos calculando una red mínima

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

Algoritmo: 1º paso "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

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

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

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

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

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

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

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

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

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

Algoritmo: 3º paso 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

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

Algoritmo: 3º paso Intentamos "mejorar" los vértices que tienen más de 2 aristas A 1→A 7→A 3→A 2→A 6→A 5→A 1= 32

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

Algoritmo: 3º paso Intentamos "mejorar" los vértices que tienen más de 2 aristas A 1→A 7→A 3→A 2→A 6→A 4→A 5→A 4→A 1= 31

Para entrenarse mejor. .

Para entrenarse mejor. .

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

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

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

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

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

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

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

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

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

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!

Y si os va este rollo. . .

Y si os va este rollo. . .

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

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

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

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

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

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

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

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

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

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

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

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

¡Al Taller!

¡Al Taller!