Descargar la presentación
La descarga está en progreso. Por favor, espere
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.
Presentaciones similares
© 2025 SlidePlayer.es Inc.
All rights reserved.