SlideShare a Scribd company logo
1 of 13
Dynamic
Programming and
Backtracking
Ricardo Sánchez Castillo
Programación Dinámica
Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 2
p = [ 20, 13, 45, 34, 76]
def sumIterative(p):
result = 0
for i in range(len(p)):
result = result + p[i]
return result
Iterativa
def sumRecursive(p):
if len(p) <= 0:
return 0
return p[0] + sumRecursive(p[1 : ])
Recursiva
Programación Dinámica
Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 3
p = [ 20, 13, 45, 34, 76]
def sumRecursive(p):
if len(p) <= 0:
return 0
return p[0] + sumRecursive(p[1 : ])
Recursiva
20 + [13,45,34,76]
13 + [45,34,76]
45 + [34,76]
34 + [76]
76 + []
[] = 0
76 + 0 = 76
34 + 76 = 110
45 + 110 = 155
13 + 155 = 168
20 + 168 = 188
Programación Dinámica
Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 4
Longitud 1 2 3 4 5 6 7 8 9 10
Precio 1 5 7 9 10 17 19 20 24 30
= 9
= 8
= 10
Programación Dinámica
Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 5
i=1 i=2 i=3 i=4
8
7
4
7
10
7
8 9
Longitud Precio
1 1
2 5
3 7
4 9
5 10
6 17
7 19
8 20
9 24
10 30
𝑟𝑛 = max
1≤𝑖≤𝑛
(𝑝𝑖 + 𝑟𝑛−1)
Programación Dinámica
Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 6
4
3
2
1
0
1
0
0
2
1
0
0
1
0
0
2 𝑛 𝑛𝑜𝑑𝑜𝑠
2 𝑛−1 𝑟𝑎𝑚𝑎𝑠
Programación Dinámica
Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 7
Top-down
• Mismo procedimiento recursivo
• Guardar el resultado en memoria
• Algunas veces no resolverá todas
las posibles combinaciones
Bottom-up:
• Resolver los elementos más “pequeños”
primero
• Continuar ascendiendo basado en los
resultados anteriores
4
3
2
1
0
1
0
0
2
1
0
0
1
0
0
0
1
2
3
4
Programación Dinámica
Condiciones
• Subestructura optima: La solución optima a un problema está
construida a partir de la solución de sus sub-problemas.
• Superposición de problemas: Los problemas se sobreponen. En una
solución recursiva, el algoritmo calcula la solución a los mismos
sub-problemas muchas veces.
Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 8
Programación Dinámica
Otros ejemplos:
• Longest common subsequence (LCS): Detectar la sub-secuencia
más grande a partir de dos secuencias, de aquí deriva la distancia
de Levenshtein utilizada para la detección de plagiarismo.
• Número de caminos: ¿Cuántos caminos hay entre un punto (0, 0) a
un punto (i, j)? De aquí deriva el algoritmo Floyd-Warshall.
• Multiplicación de cadenas de matrices: La multiplicación de
matrices es asociativa, ¿De que forma deberíamos de agrupar los
paréntesis para hacer la menor cantidad de cálculos?
Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 9
Backtracking
• Genera todas las posibles combinaciones para un problema
• Se basa en el “stack” generado durante la recursión
• Cuando la función recursiva regresa, regresamos al estado anterior
Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 10
Backtracking
Método general:
• Identificar los casos base
• Detectar los posibles estados que se pueden generar a partir de
un punto inicial
• Mover al primer estado y aplicar recursión
• Probar sobre todos los estados
• En caso de que ninguno resuelva el problema, volver al estado
inicial y regresar un valor
Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 11
Backtracking
Presentación:
http://www.slideshare.net/RicardoSnchezCastill
Código:
https://www.dropbox.com/sh/gqowc6c5fbnc4mg/AADSCTKH
uSnLDTh7_Bee-qlaa?dl=0
Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 12
Dynamic
Programming and
Backtracking
Ricardo Sánchez Castillo

More Related Content

What's hot (12)

Lenguajesdeprogramacion c nivel1-unidad2-03-expresiones y funciones matematicas
Lenguajesdeprogramacion c nivel1-unidad2-03-expresiones y funciones matematicasLenguajesdeprogramacion c nivel1-unidad2-03-expresiones y funciones matematicas
Lenguajesdeprogramacion c nivel1-unidad2-03-expresiones y funciones matematicas
 
Examen primera evaluacion_iii_2009_2010_solucion
Examen primera evaluacion_iii_2009_2010_solucionExamen primera evaluacion_iii_2009_2010_solucion
Examen primera evaluacion_iii_2009_2010_solucion
 
TEOREMA FUNNDAMENNTAL DEL CALCULO
TEOREMA FUNNDAMENNTAL DEL CALCULOTEOREMA FUNNDAMENNTAL DEL CALCULO
TEOREMA FUNNDAMENNTAL DEL CALCULO
 
Ejercicio 8
Ejercicio 8Ejercicio 8
Ejercicio 8
 
4ta parte expresiones y funciones matemáticas
 4ta parte expresiones y funciones matemáticas 4ta parte expresiones y funciones matemáticas
4ta parte expresiones y funciones matemáticas
 
3ª semana límites
3ª semana  límites3ª semana  límites
3ª semana límites
 
Taller 2 MATLAB
Taller 2 MATLABTaller 2 MATLAB
Taller 2 MATLAB
 
Sumas y restas
Sumas y restas Sumas y restas
Sumas y restas
 
Img004
Img004Img004
Img004
 
Unidad 3
Unidad 3Unidad 3
Unidad 3
 
Examen álgebra lineal
Examen álgebra linealExamen álgebra lineal
Examen álgebra lineal
 
Aplicaciones de calculo
Aplicaciones de calculoAplicaciones de calculo
Aplicaciones de calculo
 

Similar to Dynamic programming and backtracking

1raclasedemtodosnumricos-150903221928-lva1-app6892 (1).pptx
1raclasedemtodosnumricos-150903221928-lva1-app6892 (1).pptx1raclasedemtodosnumricos-150903221928-lva1-app6892 (1).pptx
1raclasedemtodosnumricos-150903221928-lva1-app6892 (1).pptx
YeshuaCamposChvez
 
Practica 2 problemas de programacion
Practica 2 problemas de programacionPractica 2 problemas de programacion
Practica 2 problemas de programacion
Jesus Salas Castro
 
Matlab
MatlabMatlab
Matlab
ford81
 
Clase 9 grafos parte iii (cam min - arbol min)-ay_ed-2014
Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014
Clase 9 grafos parte iii (cam min - arbol min)-ay_ed-2014
Nicolas Mattone
 
Programación estructurada
Programación  estructuradaProgramación  estructurada
Programación estructurada
Pal Almaza
 

Similar to Dynamic programming and backtracking (20)

Introducción a los Métodos Numéricos
Introducción a los Métodos NuméricosIntroducción a los Métodos Numéricos
Introducción a los Métodos Numéricos
 
1raclasedemtodosnumricos-150903221928-lva1-app6892 (1).pptx
1raclasedemtodosnumricos-150903221928-lva1-app6892 (1).pptx1raclasedemtodosnumricos-150903221928-lva1-app6892 (1).pptx
1raclasedemtodosnumricos-150903221928-lva1-app6892 (1).pptx
 
Problemasjava2
Problemasjava2Problemasjava2
Problemasjava2
 
Practica 2 problemas de programacion
Practica 2 problemas de programacionPractica 2 problemas de programacion
Practica 2 problemas de programacion
 
Matlab
MatlabMatlab
Matlab
 
Matlab (1)
Matlab (1)Matlab (1)
Matlab (1)
 
Clase 9 grafos parte iii (cam min - arbol min)-ay_ed-2014
Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014Clase 9  grafos parte iii (cam min - arbol min)-ay_ed-2014
Clase 9 grafos parte iii (cam min - arbol min)-ay_ed-2014
 
Programación estructurada
Programación  estructuradaProgramación  estructurada
Programación estructurada
 
Optimizacion_Robusta_II
Optimizacion_Robusta_IIOptimizacion_Robusta_II
Optimizacion_Robusta_II
 
Matematica computacional
Matematica computacionalMatematica computacional
Matematica computacional
 
Lo básico para programar
Lo básico para programarLo básico para programar
Lo básico para programar
 
Programación estructurada
Programación  estructuradaProgramación  estructurada
Programación estructurada
 
Prog estruct
Prog estructProg estruct
Prog estruct
 
Fundamentosdeprogramacion 2
Fundamentosdeprogramacion 2Fundamentosdeprogramacion 2
Fundamentosdeprogramacion 2
 
01 laboratorio n°1 • algoritmos
01 laboratorio n°1 • algoritmos01 laboratorio n°1 • algoritmos
01 laboratorio n°1 • algoritmos
 
Practica 2
Practica 2Practica 2
Practica 2
 
Lo básico para programar
Lo básico para programarLo básico para programar
Lo básico para programar
 
Prog est 1
Prog est 1Prog est 1
Prog est 1
 
2_LenguajeMATLAB
2_LenguajeMATLAB2_LenguajeMATLAB
2_LenguajeMATLAB
 
Seminario de matlab
Seminario de matlabSeminario de matlab
Seminario de matlab
 

Dynamic programming and backtracking

  • 2. Programación Dinámica Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 2 p = [ 20, 13, 45, 34, 76] def sumIterative(p): result = 0 for i in range(len(p)): result = result + p[i] return result Iterativa def sumRecursive(p): if len(p) <= 0: return 0 return p[0] + sumRecursive(p[1 : ]) Recursiva
  • 3. Programación Dinámica Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 3 p = [ 20, 13, 45, 34, 76] def sumRecursive(p): if len(p) <= 0: return 0 return p[0] + sumRecursive(p[1 : ]) Recursiva 20 + [13,45,34,76] 13 + [45,34,76] 45 + [34,76] 34 + [76] 76 + [] [] = 0 76 + 0 = 76 34 + 76 = 110 45 + 110 = 155 13 + 155 = 168 20 + 168 = 188
  • 4. Programación Dinámica Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 4 Longitud 1 2 3 4 5 6 7 8 9 10 Precio 1 5 7 9 10 17 19 20 24 30 = 9 = 8 = 10
  • 5. Programación Dinámica Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 5 i=1 i=2 i=3 i=4 8 7 4 7 10 7 8 9 Longitud Precio 1 1 2 5 3 7 4 9 5 10 6 17 7 19 8 20 9 24 10 30 𝑟𝑛 = max 1≤𝑖≤𝑛 (𝑝𝑖 + 𝑟𝑛−1)
  • 6. Programación Dinámica Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 6 4 3 2 1 0 1 0 0 2 1 0 0 1 0 0 2 𝑛 𝑛𝑜𝑑𝑜𝑠 2 𝑛−1 𝑟𝑎𝑚𝑎𝑠
  • 7. Programación Dinámica Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 7 Top-down • Mismo procedimiento recursivo • Guardar el resultado en memoria • Algunas veces no resolverá todas las posibles combinaciones Bottom-up: • Resolver los elementos más “pequeños” primero • Continuar ascendiendo basado en los resultados anteriores 4 3 2 1 0 1 0 0 2 1 0 0 1 0 0 0 1 2 3 4
  • 8. Programación Dinámica Condiciones • Subestructura optima: La solución optima a un problema está construida a partir de la solución de sus sub-problemas. • Superposición de problemas: Los problemas se sobreponen. En una solución recursiva, el algoritmo calcula la solución a los mismos sub-problemas muchas veces. Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 8
  • 9. Programación Dinámica Otros ejemplos: • Longest common subsequence (LCS): Detectar la sub-secuencia más grande a partir de dos secuencias, de aquí deriva la distancia de Levenshtein utilizada para la detección de plagiarismo. • Número de caminos: ¿Cuántos caminos hay entre un punto (0, 0) a un punto (i, j)? De aquí deriva el algoritmo Floyd-Warshall. • Multiplicación de cadenas de matrices: La multiplicación de matrices es asociativa, ¿De que forma deberíamos de agrupar los paréntesis para hacer la menor cantidad de cálculos? Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 9
  • 10. Backtracking • Genera todas las posibles combinaciones para un problema • Se basa en el “stack” generado durante la recursión • Cuando la función recursiva regresa, regresamos al estado anterior Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 10
  • 11. Backtracking Método general: • Identificar los casos base • Detectar los posibles estados que se pueden generar a partir de un punto inicial • Mover al primer estado y aplicar recursión • Probar sobre todos los estados • En caso de que ninguno resuelva el problema, volver al estado inicial y regresar un valor Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 11