Top Banner
Dynamic Programming and Backtracking Ricardo Sánchez Castillo
13

Dynamic programming and backtracking

Aug 15, 2015

Download

Software

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Dynamic programming and backtracking

Dynamic Programming and BacktrackingRicardo Sánchez Castillo

Page 2: Dynamic programming and backtracking

Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 2

Programación Dinámica

p = [ 20, 13, 45, 34, 76]

def sumIterative(p):result = 0for i in range(len(p)):

result = result + p[i]

return result

Iterativa

def sumRecursive(p):if len(p) <= 0:

return 0return p[0] + sumRecursive(p[1 : ])

Recursiva

Page 3: Dynamic programming and backtracking

Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 3

Programación Dinámica

p = [ 20, 13, 45, 34, 76]

def sumRecursive(p):if len(p) <= 0:

return 0return 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

Page 4: Dynamic programming and backtracking

Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 4

Programación Dinámica

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

Page 5: Dynamic programming and backtracking

Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 5

Programación Dinámica

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

𝑟𝑛=max1≤𝑖 ≤𝑛

(𝑝𝑖+𝑟𝑛− 1¿)¿

Page 6: Dynamic programming and backtracking

Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 6

Programación Dinámica4

3

2

1

0

1

0

0

2

1

0

0

1

0

0

Page 7: Dynamic programming and backtracking

Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 7

Programación Dinámica

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 anteriores4

3

2

1

0

1

0

0

2

1

0

0

1

0

0 0

12

3

4

Page 8: Dynamic programming and backtracking

Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 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.

Page 9: Dynamic programming and backtracking

Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 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?

Page 10: Dynamic programming and backtracking

Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 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

Page 11: Dynamic programming and backtracking

Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 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

Page 12: Dynamic programming and backtracking

Public | Ricardo Sánchez Castillo 2015 | University of Nottingham 12

Backtracking

Presentación:

http://www.slideshare.net/RicardoSnchezCastill

Código:

https://www.dropbox.com/sh/gqowc6c5fbnc4mg/AADSCTKHuSnLDTh7_Bee-qlaa?dl=0

Page 13: Dynamic programming and backtracking

Dynamic Programming and BacktrackingRicardo Sánchez Castillo