Title: T
1Técnicas Algorítmicas
- Gonzalo Sainz-Trápaga (GomoX)
- Charlas PC 2008
- www.pcmasmas.com
- 26 de Julio de 2008
2Temas
- Problemas
- Técnicas exactas
- Técnicas aproximadas
3Problemas
4De decisión
- Cuál es el mínimo de
- la secuencia 7,8,32?
5De 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.
6Técnicas Exactas
7Fuerza Bruta
Probar todas las opciones.
8Fuerza Bruta
Se recorre todo el universo de soluciones
posibles.
for cand in generarCandidatos() if
esSolucion(cand) return cand
9Fuerza Bruta
Ordenar por fuerza bruta
for p in permutaciones(secuencia) if
estaOrdenado(p) return p
10Fuerza Bruta
11Backtracking
Probar todas las opciones,
de forma más inteligente.
12Backtracking
Orden!
13Backtracking
Ordenar la secuencia 3,1,2
14Backtracking
15Backtracking
16Divide Conquer
Vamos por partes
- Jack el destripador
17Divide Conquer
- Dividir
- Conquistar
- Combinar
18Divide Conquer
Merge sort
def mergesort(l) m1 l0len(l)/2 m2
llen(l)/2len(l) return combinar(mergesort(m1)
, mergesort(m2))
19Divide Conquer
20Divide Conquer
21Programación Dinámica
Usar COBOL arruina el cerebro
- Edsger Dijkstra
22Programación Dinámica
Subestructura Óptima
Recursión
23Programación Dinámica
Fibonacci
def fibo(n) if n 1 or n 2 return 1
else return fibo(n-1) fibo(n-2)
24Programació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)
25Programación Dinámica
Solapamiento
A
B
26Programación Dinámica
27Programación Dinámica
Fibonacci (top down)
tabla def fibo(n) if n 1 or n 2
return 1 else if n in tabla return
tablan else res fibo(n-1)
fibo(n-2) tablan res return res
28Programación Dinámica
Fibonacci (bottom up)
tabla def fibo(n) if n 1 or n
2 return 1 else tabla1 fibo(1)
tabla2 fibo(2) for i in 3n-1
tablai tablai-1 tablai-2
return tablan-1 tablan-2
29Programació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 3n-1 tmp t2 t2 t1 t2
t1 tmp return t1 t2
30Programación Dinámica
31Programación Lineal
32Programación Lineal
- Ecuaciones lineales
- SIMPLEX
- Programación entera
33Técnicas Aproximadas
34"La mayor deficiencia de la raza humana es
nuestra incapacidad para comprender la función
exponencial."
- Albert Bartlett
35Heurísticas
36Metaheurísticas
37Algoritmos Golosos
38Algoritmos golosos
39Taboo Search
40Algoritmos Genéticos
- Charles Darwin
41Algoritmos Genéticos
Algoritmo genético
generacion 0 poblacion generarIndividuosAleato
rios() while(generacion lt 5000) padres
poblacion.tomarAlgunos() poblacion.agregar(padre
s.procrear()) poblacion.mutarAlgunos()
poblacion.matarAlgunos() generacion poblacion
.sort(aptitud) machoAlfa poblacion0 return
machoAlfa
42Algoritmos Genéticos
43Otras metaheurísticas
GRASP Colonias de hormigas Redes neuronales
44Problemas de las Metaheurísticas
- Confiabilidad
- Parametrización
45Más opciones!
- Algoritmos aproximados
- Algoritmos híbridos
46Esta charla fue traída a ustedes por cortesía de
Lotux Neon.
47Preguntas?
48Fin.