La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Técnicas Algorítmicas

Presentaciones similares


Presentación del tema: "Técnicas Algorítmicas"— Transcripción de la presentación:

1 Técnicas Algorítmicas
Gonzalo Sainz-Trápaga (GomoX) Charlas PC 26 de Julio de 2008

2 Problemas Técnicas exactas Técnicas aproximadas
Temas Problemas Técnicas exactas Técnicas aproximadas

3 Problemas

4 De decisión ¿183287 es primo? ¿Cuál es el mínimo de
la secuencia [7,8,32]?

5 Elegir o proponer una solución.
De optimización Hallar el camino más corto entre Buenos Aires y Beijing Ordenar la secuencia: [1,9,34,-2,6,28] Elegir o proponer una solución.

6 Técnicas Exactas

7 Fuerza Bruta Probar todas las opciones.

8 Fuerza Bruta Se recorre todo el universo de soluciones posibles.
for cand in generarCandidatos(): if esSolucion(cand): return cand

9 Ordenar por fuerza bruta:
for p in permutaciones(secuencia): if estaOrdenado(p): return p

10 Fuerza Bruta Limitaciones Usos reales

11 Backtracking Probar todas las opciones, de forma más inteligente.

12 Backtracking Orden!

13 Ordenar la secuencia [3,1,2]:
Backtracking Ordenar la secuencia [3,1,2]:

14 Backtracking Podas Recursión

15 Backtracking Limitaciones Usos reales

16 Divide & Conquer “Vamos por partes” - Jack el destripador

17 Divide & Conquer “Dividir” “Conquistar” “Combinar”

18 Divide & Conquer Merge sort: def mergesort(l): m1 = l[0:len(l)/2]
m2 = l[len(l)/2:len(l)] return combinar(mergesort(m1), mergesort(m2))

19 Divide & Conquer Recursión Paralelismo

20 Divide & Conquer Usos reales Limitaciones

21 Programación Dinámica “Usar COBOL arruina el cerebro”
- Edsger Dijkstra

22 Programación Dinámica
Subestructura Óptima Recursión

23 Programación Dinámica
Fibonacci: def fibo(n): if n == 1 or n == 2: return 1 else: return fibo(n-1) + fibo(n-2)

24 fibo(n) = fibo(n-1) + fibo(n-2)
Programación Dinámica fibo(n) = fibo(n-1) + fibo(n-2) fibo(n-2) + fibo(n-3) fibo(n-3) + fibo(n-4) fibo(n-4) + fibo(n-5)

25 Programación Dinámica
Solapamiento A B

26 Programación Dinámica
“Top-down” “Bottom-up”

27 Programación Dinámica
Fibonacci (top down): tabla = {} def fibo(n): if n == 1 or n == 2: return 1 else: if n in tabla: return tabla[n] res = fibo(n-1) + fibo(n-2) tabla[n] = res return res

28 Programación Dinámica
Fibonacci (bottom up): tabla = {} def fibo(n): if n == 1 or n == 2: return 1 else: tabla[1] = fibo(1) tabla[2] = fibo(2) for i in 3…n-1: tabla[i] = tabla[i-1] + tabla[i-2] return tabla[n-1] + tabla[n-2]

29 Programación Dinámica
Fibonacci (bottom up 2.0): def fibo(n): if n == 1 or n == 2: return 1 else: t1 = fibo(1) t2 = fibo(2) for i in 3…n-1: tmp = t2 t2 = t1 + t2 t1 = tmp return t1 + t2

30 Programación Dinámica
Usos reales Limitaciones

31 Programación Lineal

32 Programación Lineal Ecuaciones lineales SIMPLEX Programación entera

33 Técnicas Aproximadas

34 "La mayor deficiencia de la raza humana es nuestra incapacidad para comprender la función exponencial." - Albert Bartlett

35 Heurísticas

36 Metaheurísticas

37 Algoritmos Golosos

38 Algoritmos golosos Usos Limitaciones

39 Taboo Search

40 Algoritmos Genéticos - Charles Darwin

41 Algoritmos Genéticos Algoritmo genético: generacion = 0
poblacion = generarIndividuosAleatorios() while(generacion < 5000): padres = poblacion.tomarAlgunos() poblacion.agregar(padres.procrear()) poblacion.mutarAlgunos() poblacion.matarAlgunos() generacion++ poblacion.sort(aptitud) machoAlfa = poblacion[0] return machoAlfa

42 Algoritmos Genéticos Usos Parametrización

43 Otras metaheurísticas
GRASP Colonias de hormigas Redes neuronales

44 Problemas de las Metaheurísticas Confiabilidad Parametrización

45 Más opciones! Algoritmos aproximados Algoritmos híbridos

46 Esta charla fue traída a ustedes por cortesía de Lotux Neon.

47 ¿Preguntas?

48 Fin.


Descargar ppt "Técnicas Algorítmicas"

Presentaciones similares


Anuncios Google