Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión...

128
Backtracking Programación dinámica Algoritmo de Floyd Conclusión Algoritmos y Estructuras de Datos II Programación dinámica 27 de mayo de 2019 Programación dinámica Algoritmos y Estructuras de Datos II

Transcript of Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión...

Page 1: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Algoritmos y Estructuras de Datos II

Programación dinámica

27 de mayo de 2019

Programación dinámica Algoritmos y Estructuras de Datos II

Page 2: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Clase de hoy

1 Backtracking

2 Programación dinámicaProblema de la monedaProblema de la mochila

3 Algoritmo de FloydProblema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

4 Conclusión

Programación dinámica Algoritmos y Estructuras de Datos II

Page 3: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

BacktrackingProblema de la moneda

Sean 0 ≤ i ≤ n y 0 ≤ j ≤ k ,definimos cambio(i , j) = “menor número de monedasnecesarias para pagar exactamente el monto j condenominaciones d1,d2, . . . ,di .”

cambio(i, j) =

0 j = 0∞ j > 0 ∧ i = 0cambio(i − 1, j) di > j > 0 ∧ i > 0min(cambio(i − 1, j), 1 + cambio(i, j − di)) j ≥ di > 0 ∧ i > 0

En el peor caso es exponencial.

Programación dinámica Algoritmos y Estructuras de Datos II

Page 4: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

BacktrackingProblema de la mochila

Sean 0 ≤ i ≤ n y 0 ≤ j ≤W ,definimos mochila(i , j) = “mayor valor alcanzable sinexceder la capacidad j con objetos 1,2, . . . , i .”

mochila(i, j)=

0 j = 00 j > 0 ∧ i = 0mochila(i−1, j) wi > j > 0 ∧ i > 0max(mochila(i−1, j), vi + mochila(i−1, j−wi)) j ≥ wi > 0 ∧ i > 0

En el peor caso es exponencial.

Programación dinámica Algoritmos y Estructuras de Datos II

Page 5: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

BacktrackingProblema de los caminos de costo mínimo entre cada par de vértices

Sean 1 ≤ i , j ≤ n y 0 ≤ k ≤ n,definimos caminok (i , j) = “menor costo posible paracaminos de i a j cuyos vértices intermedios se encuentranen el conjunto {1,. . . ,k}.”

caminok (i, j) ={

L[i, j] k = 0min(caminok−1(i, j), caminok−1(i, k) + caminok−1(k , j)) k ≥ 1

Es exponencial (3n).

Programación dinámica Algoritmos y Estructuras de Datos II

Page 6: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Programación dinámica

Método para transformar una definición recursiva eniterativaa través de la confección de una tabla de valores.Objetivo: evitar la reiteración de cómputos.Ejemplo: definición recursiva de la secuencia deFibonacci.

Programación dinámica Algoritmos y Estructuras de Datos II

Page 7: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Secuencia de Fibonacci

fn =

{n n ≤ 1fn−1 + fn−2 n > 1

Ya vimos que esta función recursiva es exponencial.La razón, el cálculo de fn lleva a calcular

2 veces fn−2,3 veces fn−3,5 veces fn−4,etc.

Programación dinámica Algoritmos y Estructuras de Datos II

Page 8: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

¿Cómo podemos evitar tantos recálculos?

Llevando una tabla de valores calculados.Comenzando desde los casos bases.Sea f un arreglo de 0 a n.

f[0]:= 0f[1]:= 1f[2]:= f[1]+f[0]f[3]:= f[2]+f[1]etc

Programación dinámica Algoritmos y Estructuras de Datos II

Page 9: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Fibonacci a través de una tabla

fun fib(n: nat) ret r: natvar f: array[0..max(n,1)] of natf[0]:= 0f[1]:= 1for i:= 2 to n do f[i]:= f[i-1] + f[i-2] odr:= f[n]

end fun

¡Este algoritmo es lineal!

Programación dinámica Algoritmos y Estructuras de Datos II

Page 10: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaBacktracking

Vimos la definición

cambio(i, j) =

0 j = 0∞ j > 0 ∧ i = 0cambio(i − 1, j) di > j > 0 ∧ i > 0min(cambio(i − 1, j), 1 + cambio(i, j − di)) j ≥ di > 0 ∧ i > 0

que puede ser exponencial debido a que tiene dos llamadasrecursivas en el último caso.

Programación dinámica Algoritmos y Estructuras de Datos II

Page 11: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaConfección de una tabla

Habiendo dos parámetros, la tabla será una matriz en vezde un vector como en el caso de Fibonacci.Los casos base corresponden al llenado de la primeracolumna y primera fila de la matriz.Como todas las llamadas recursivas se realizandecrementando el “parámetro i” o manteniendolo igualpero en ese caso decrementando el “parámetro j”, sepropone el siguiente método de llenado de la matriz:

fila por fila, desde la primera a la última, de modo de que elvalor correspondiente a cambio(i − 1, j) ya esté computadoal calcular el valor correspondiente a cambio(i , j)dentro de cada fila, desde la primer columna hasta laúltima, de modo de que el valor correspondiente acambio(i , j − di) ya esté computado al calcular cambio(i , j)

Programación dinámica Algoritmos y Estructuras de Datos II

Page 12: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaProgramación dinámica

fun cambio(d:array[1..n] of nat, k: nat) ret r: natvar cam: array[0..n,0..k] of natfor i:= 0 to n do cam[i,0]:= 0 odfor j:= 1 to k do cam[0,j]:=∞ odfor i:= 1 to n do

for j:= 1 to k doif d[i] > j then cam[i,j]:= cam[i-1,j]else cam[i,j]:= min(cam[i-1,j],1+cam[i,j-d[i]])fi

ododr:= cam[n,k]

end fun

Programación dinámica Algoritmos y Estructuras de Datos II

Page 13: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160123

Programación dinámica Algoritmos y Estructuras de Datos II

Page 14: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 01 02 03 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 15: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 02 03 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 16: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 0 ∞ ∞ ∞2 03 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 17: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 0 ∞ ∞ ∞2 03 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 18: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 0 ∞ ∞ ∞ 12 03 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 19: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 0 ∞ ∞ ∞ 1 ∞2 03 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 20: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 0 ∞ ∞ ∞ 1 ∞ ∞2 03 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 21: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 0 ∞ ∞ ∞ 1 ∞ ∞ ∞2 03 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 22: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 0 ∞ ∞ ∞ 1 ∞ ∞ ∞ 22 03 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 23: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 0 ∞ ∞ ∞ 1 ∞ ∞ ∞ 2 ∞ ∞ ∞ 3 ∞ ∞ ∞ 42 03 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 24: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 0 ∞ ∞ ∞ 1 ∞ ∞ ∞ 2 ∞ ∞ ∞ 3 ∞ ∞ ∞ 42 0 ∞3 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 25: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 0 ∞ ∞ ∞ 1 ∞ ∞ ∞ 2 ∞ ∞ ∞ 3 ∞ ∞ ∞ 42 0 ∞3 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 26: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 0 ∞ ∞ ∞ 1 ∞ ∞ ∞ 2 ∞ ∞ ∞ 3 ∞ ∞ ∞ 42 0 ∞ 13 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 27: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 0 ∞ ∞ ∞ 1 ∞ ∞ ∞ 2 ∞ ∞ ∞ 3 ∞ ∞ ∞ 42 0 ∞ 1 ∞ 1 ∞ 2 ∞ 2 ∞ 3 ∞ 3 ∞ 4 ∞ 43 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 28: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 0 ∞ ∞ ∞ 1 ∞ ∞ ∞ 2 ∞ ∞ ∞ 3 ∞ ∞ ∞ 42 0 ∞ 1 ∞ 1 ∞ 2 ∞ 2 ∞ 3 ∞ 3 ∞ 4 ∞ 43 0 ∞ 1 ∞ 1 ∞ 2

Programación dinámica Algoritmos y Estructuras de Datos II

Page 29: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 0 ∞ ∞ ∞ 1 ∞ ∞ ∞ 2 ∞ ∞ ∞ 3 ∞ ∞ ∞ 42 0 ∞ 1 ∞ 1 ∞ 2 ∞ 2 ∞ 3 ∞ 3 ∞ 4 ∞ 43 0 ∞ 1 ∞ 1 ∞ 2 1

Programación dinámica Algoritmos y Estructuras de Datos II

Page 30: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 0 ∞ ∞ ∞ 1 ∞ ∞ ∞ 2 ∞ ∞ ∞ 3 ∞ ∞ ∞ 42 0 ∞ 1 ∞ 1 ∞ 2 ∞ 2 ∞ 3 ∞ 3 ∞ 4 ∞ 43 0 ∞ 1 ∞ 1 ∞ 2 1 2

Programación dinámica Algoritmos y Estructuras de Datos II

Page 31: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 0 ∞ ∞ ∞ 1 ∞ ∞ ∞ 2 ∞ ∞ ∞ 3 ∞ ∞ ∞ 42 0 ∞ 1 ∞ 1 ∞ 2 ∞ 2 ∞ 3 ∞ 3 ∞ 4 ∞ 43 0 ∞ 1 ∞ 1 ∞ 2 1 2 2

Programación dinámica Algoritmos y Estructuras de Datos II

Page 32: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 0 ∞ ∞ ∞ 1 ∞ ∞ ∞ 2 ∞ ∞ ∞ 3 ∞ ∞ ∞ 42 0 ∞ 1 ∞ 1 ∞ 2 ∞ 2 ∞ 3 ∞ 3 ∞ 4 ∞ 43 0 ∞ 1 ∞ 1 ∞ 2 1 2 2 3 2 3 3

Programación dinámica Algoritmos y Estructuras de Datos II

Page 33: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la monedaEjemplo con denominaciones d1 = 4, d2 = 2 y d3 = 7

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞ ∞1 0 ∞ ∞ ∞ 1 ∞ ∞ ∞ 2 ∞ ∞ ∞ 3 ∞ ∞ ∞ 42 0 ∞ 1 ∞ 1 ∞ 2 ∞ 2 ∞ 3 ∞ 3 ∞ 4 ∞ 43 0 ∞ 1 ∞ 1 ∞ 2 1 2 2 3 2 3 3 2 3 3

Programación dinámica Algoritmos y Estructuras de Datos II

Page 34: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaBacktracking

Vimos la definición

mochila(i, j) =

0 j = 00 j > 0 ∧ i = 0mochila(i − 1, j) wi > j > 0 ∧ i > 0max(mochila(i − 1, j), vi + mochila(i − 1, j − wi)) j ≥ wi > 0 ∧ i > 0

que puede ser exponencial debido a que tiene dos llamadasrecursivas en el último caso.

Programación dinámica Algoritmos y Estructuras de Datos II

Page 35: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaConfección de una tabla

Habiendo dos parámetros, la tabla será nuevamente unamatriz.Los casos base corresponden al llenado de la primeracolumna y primera fila de la matriz.Como todas las llamadas recursivas se realizandecrementando el “parámetro i”, la única condiciónnecesaria para el llenado de la tabla es proceder fila porfila, no importa el orden de llenado dentro de cada fila.

Programación dinámica Algoritmos y Estructuras de Datos II

Page 36: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaProgramación dinámica

fun mochila(v:array[1..n] of valor, w:array[1..n] of nat, W: nat)ret r: valor

var moch: array[0..n,0..W] of valorfor i:= 0 to n do moch[i,0]:= 0 odfor j:= 1 to W do moch[0,j]:= 0 odfor i:= 1 to n do

for j:= 1 to W doif w[i] > j then moch[i,j]:= moch[i-1,j]else moch[i,j]:= max(moch[i-1,j],v[i]+moch[i-1,j-w[i]])fi

ododr:= moch[n,W]

end funProgramación dinámica Algoritmos y Estructuras de Datos II

Page 37: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1601234

Programación dinámica Algoritmos y Estructuras de Datos II

Page 38: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 02 03 04 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 39: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 02 03 04 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 40: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 32 03 04 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 41: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 32 03 04 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 42: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 32 03 04 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 43: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 32 0 0 0 0 03 04 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 44: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 32 0 0 0 0 0 2 2 23 04 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 45: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 32 0 0 0 0 0 2 2 2 33 04 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 46: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 32 0 0 0 0 0 2 2 2 3 3 3 3 33 04 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 47: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 32 0 0 0 0 0 2 2 2 3 3 3 3 3 53 04 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 48: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 32 0 0 0 0 0 2 2 2 3 3 3 3 3 5 5 5 53 04 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 49: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 32 0 0 0 0 0 2 2 2 3 3 3 3 3 5 5 5 53 0 0 0 0 0 2 24 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 50: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 32 0 0 0 0 0 2 2 2 3 3 3 3 3 5 5 5 53 0 0 0 0 0 2 2 34 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 51: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 32 0 0 0 0 0 2 2 2 3 3 3 3 3 5 5 5 53 0 0 0 0 0 2 2 3 3 3 3 34 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 52: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 32 0 0 0 0 0 2 2 2 3 3 3 3 3 5 5 5 53 0 0 0 0 0 2 2 3 3 3 3 3 5 5 54 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 53: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 32 0 0 0 0 0 2 2 2 3 3 3 3 3 5 5 5 53 0 0 0 0 0 2 2 3 3 3 3 3 5 5 5 64 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 54: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 32 0 0 0 0 0 2 2 2 3 3 3 3 3 5 5 5 53 0 0 0 0 0 2 2 3 3 3 3 3 5 5 5 6 64 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 55: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 32 0 0 0 0 0 2 2 2 3 3 3 3 3 5 5 5 53 0 0 0 0 0 2 2 3 3 3 3 3 5 5 5 6 64 0 0 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 56: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 32 0 0 0 0 0 2 2 2 3 3 3 3 3 5 5 5 53 0 0 0 0 0 2 2 3 3 3 3 3 5 5 5 6 64 0 0 0 2 2 2 2

Programación dinámica Algoritmos y Estructuras de Datos II

Page 57: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 32 0 0 0 0 0 2 2 2 3 3 3 3 3 5 5 5 53 0 0 0 0 0 2 2 3 3 3 3 3 5 5 5 6 64 0 0 0 2 2 2 2 3 4 4

Programación dinámica Algoritmos y Estructuras de Datos II

Page 58: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 32 0 0 0 0 0 2 2 2 3 3 3 3 3 5 5 5 53 0 0 0 0 0 2 2 3 3 3 3 3 5 5 5 6 64 0 0 0 2 2 2 2 3 4 4 5 5 5 5 5

Programación dinámica Algoritmos y Estructuras de Datos II

Page 59: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema de la monedaProblema de la mochila

Problema de la mochilaEjemplo con valores v1 = 3, v2 = 2, v3 = 3, v4 = 2, w1 = 8, w2 = 5, w3 = 7 y w4 = 3

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 160 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 3 3 3 3 3 3 3 3 32 0 0 0 0 0 2 2 2 3 3 3 3 3 5 5 5 53 0 0 0 0 0 2 2 3 3 3 3 3 5 5 5 6 64 0 0 0 2 2 2 2 3 4 4 5 5 5 5 5 7 7

Programación dinámica Algoritmos y Estructuras de Datos II

Page 60: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Problema del camino de costo mínimo entre todo parde vérticesBacktracking

Vimos la definición

caminok (i, j) ={

L[i, j] k = 0min(caminok−1(i, j), caminok−1(i, k) + caminok−1(k , j)) k ≥ 1

que puede ser exponencial debido a que tiene tres llamadasrecursivas en el último caso.

Programación dinámica Algoritmos y Estructuras de Datos II

Page 61: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Problema del camino de costo mínimoConfección de una tabla

Habiendo tres parámetros, la tabla será un arreglotridimensional.El caso base corresponde al llenado de la matrizcams[0, i , j].Como todas las llamadas recursivas se realizandecrementando el “parámetro k ”, la única condiciónnecesaria para el llenado de la tabla es proceder desde kigual a 0 hasta k igual a n.

Primero se copia cams[0, i , j] := L[i , j] para todo i , j .Luego, para todo k > 0, y para todo i , j se asignacams[k , i , j] :=min(cams[k − 1, i , j], cams[k − 1, i , k ] + cams[k − 1, k , j])

Programación dinámica Algoritmos y Estructuras de Datos II

Page 62: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Problema del camino de costo mínimoProgramación dinámica

fun camino(L:array[1..n,1..n] of costo) ret cams: array[1..n,1..n] of costocopiar L a camsfor k:= 1 to n do

for i:= 1 to n dofor j:= 1 to n do

cams[k,i,j]:= min(cams[k-1,i,j],cams[k-1,i,k]+cams[k-1,k,j])od

odod

end fun

Programación dinámica Algoritmos y Estructuras de Datos II

Page 63: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Problema del camino de costo mínimoProgramación dinámica

fun camino(L:array[1..n,1..n] of costo) ret cams: array[1..n,1..n] of costofor i:= 1 to n do

for j:= 1 to n do cams[0,i,j]:= L[i,j] ododfor k:= 1 to n do

for i:= 1 to n dofor j:= 1 to n do

cams[k,i,j]:= min(cams[k-1,i,j],cams[k-1,i,k]+cams[k-1,k,j])od

odod

end funProgramación dinámica Algoritmos y Estructuras de Datos II

Page 64: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Problema del camino de costo mínimoPrimera observación interesante

Dijimos:“para todo k > 0, y para todo i , j se asigna cams[k , i , j] :=min(cams[k − 1, i , j], cams[k − 1, i , k ] + cams[k − 1, k , j])”¿Qué pasa al calcular la fila k de la matriz k -ésima?

cams[k , k , j] :=min(cams[k − 1, k , j], cams[k − 1, k , k ] + cams[k − 1, k , j]),o sea,cams[k , k , j] := min(cams[k − 1, k , j],0 + cams[k − 1, k , j]),o sea, cams[k , k , j] := cams[k − 1, k , j].

¡La fila k de la matriz k -ésima no cambia!

Programación dinámica Algoritmos y Estructuras de Datos II

Page 65: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Problema del camino de costo mínimoSegunda observación interesante

¿Qué pasa al calcular la columna k de la matriz k -ésima?cams[k , i , k ] :=min(cams[k − 1, i , k ], cams[k − 1, i , k ] + cams[k − 1, k , k ]),o sea,cams[k , i , k ] := min(cams[k − 1, i , k ], cams[k − 1, i , k ] + 0),o sea, m[k , i , k ] := m[k − 1, i , k ].

¡La columna k de la matriz k -ésima tampoco cambia!

Programación dinámica Algoritmos y Estructuras de Datos II

Page 66: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Problema del camino de costo mínimoTercera observación interesante

Para calcular la celda i , j de la matriz k -ésima (k > 0), secalcula:cams[k , i , j] :=min(cams[k − 1, i , j], cams[k − 1, i , k ] + cams[k − 1, k , j]).en este cálculo sólo se necesitan:

la misma celda de la matriz anterior (cams[k − 1, i , j])la celda i , k de la matriz anterior (cams[k − 1, i , k ])esta celda está en la columna k , ¡no cambia!la celda k , j de la matriz anterior (cams[k − 1, k , j])esta celda está en la fila k , ¡no cambia!

¡Entonces podemos hacer todo en una única matriz!

Programación dinámica Algoritmos y Estructuras de Datos II

Page 67: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Problema del camino de costo mínimoProgramación dinámica

fun Floyd(L:array[1..n,1..n] of costo) ret cams: array[1..n,1..n] of costocopiar L a camsfor k:= 1 to n do

for i:= 1 to n dofor j:= 1 to n do

cams[i,j]:= min(cams[i,j],cams[i,k]+cams[k,j])od

odod

end fun

Programación dinámica Algoritmos y Estructuras de Datos II

Page 68: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Problema del camino de costo mínimoProgramación dinámica

fun Floyd(L:array[1..n,1..n] of costo) ret cams: array[1..n,1..n] of costofor i:= 1 to n do

for j:= 1 to n docams[i,j]:= L[i,j]

ododfor k:= 1 to n do

for i:= 1 to n dofor j:= 1 to n do

cams[i,j]:= min(cams[i,j],cams[i,k]+cams[k,j])od

odod

end funProgramación dinámica Algoritmos y Estructuras de Datos II

Page 69: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Grafo

1

2 3 4

5 6

10

4 14

3

1

2

4 8

2

2

3

3 12

Programación dinámica Algoritmos y Estructuras de Datos II

Page 70: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Matriz de adyacencia L

cams0 =

0 4 1 10 ∞ ∞4 0 3 ∞ 1 ∞∞ 2 0 8 4 ∞2 ∞ 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 71: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams1

0 4 1 10 ∞ ∞4 0 3 ∞ 1 ∞∞ 2 0 8 4 ∞2 ∞ 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 72: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams1

0 4 1 10 ∞ ∞4 0 3 ∞ 1 ∞∞ 2 0 8 4 ∞2 ∞ 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 73: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams1

0 4 1 10 ∞ ∞4 0 3 ∞ 1 ∞∞ 2 0 8 4 ∞2 ∞ 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 74: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams1

0 4 1 10 ∞ ∞4 0 3 ∞ 1 ∞∞ 2 0 8 4 ∞2 ∞ 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 75: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams1

0 4 1 10 ∞ ∞4 0 3 14 1 ∞∞ 2 0 8 4 ∞2 ∞ 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 76: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams1

0 4 1 10 ∞ ∞4 0 3 14 1 ∞∞ 2 0 8 4 ∞2 ∞ 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 77: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams1

0 4 1 10 ∞ ∞4 0 3 14 1 ∞∞ 2 0 8 4 ∞2 ∞ 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 78: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams1

0 4 1 10 ∞ ∞4 0 3 14 1 ∞∞ 2 0 8 4 ∞2 ∞ 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 79: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams1

0 4 1 10 ∞ ∞4 0 3 14 1 ∞∞ 2 0 8 4 ∞2 6 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 80: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams1

0 4 1 10 ∞ ∞4 0 3 14 1 ∞∞ 2 0 8 4 ∞2 6 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 81: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams1

0 4 1 10 ∞ ∞4 0 3 14 1 ∞∞ 2 0 8 4 ∞2 6 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 82: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams1

0 4 1 10 ∞ ∞4 0 3 14 1 ∞∞ 2 0 8 4 ∞2 6 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 83: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams1

0 4 1 10 ∞ ∞4 0 3 14 1 ∞∞ 2 0 8 4 ∞2 6 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

= cams1

Programación dinámica Algoritmos y Estructuras de Datos II

Page 84: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams2

0 4 1 10 ∞ ∞4 0 3 14 1 ∞∞ 2 0 8 4 ∞2 6 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 85: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams2

0 4 1 10 ∞ ∞4 0 3 14 1 ∞∞ 2 0 8 4 ∞2 6 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 86: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams2

0 4 1 10 5 ∞4 0 3 14 1 ∞∞ 2 0 8 4 ∞2 6 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 87: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams2

0 4 1 10 5 ∞4 0 3 14 1 ∞6 2 0 8 3 ∞2 6 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 88: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams2

0 4 1 10 5 ∞4 0 3 14 1 ∞6 2 0 8 3 ∞2 6 2 0 7 ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 89: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams2

0 4 1 10 5 ∞4 0 3 14 1 ∞6 2 0 8 3 ∞2 6 2 0 7 ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

= cams2

Programación dinámica Algoritmos y Estructuras de Datos II

Page 90: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams3

0 4 1 10 5 ∞4 0 3 14 1 ∞6 2 0 8 3 ∞2 6 2 0 7 ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 91: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams3

0 4 1 10 5 ∞4 0 3 14 1 ∞6 2 0 8 3 ∞2 6 2 0 7 ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 92: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams3

0 3 1 9 4 ∞4 0 3 14 1 ∞6 2 0 8 3 ∞2 6 2 0 7 ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 93: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams3

0 3 1 9 4 ∞4 0 3 11 1 ∞6 2 0 8 3 ∞2 6 2 0 7 ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 94: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams3

0 3 1 9 4 ∞4 0 3 11 1 ∞6 2 0 8 3 ∞2 4 2 0 5 ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 95: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams3

0 3 1 9 4 ∞4 0 3 11 1 ∞6 2 0 8 3 ∞2 4 2 0 5 ∞9 5 3 11 0 3∞ ∞ 2 1 ∞ 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 96: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams3

0 3 1 9 4 ∞4 0 3 11 1 ∞6 2 0 8 3 ∞2 4 2 0 5 ∞9 5 3 11 0 38 4 2 1 5 0

= cams3

Programación dinámica Algoritmos y Estructuras de Datos II

Page 97: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams4

0 3 1 9 4 ∞4 0 3 11 1 ∞6 2 0 8 3 ∞2 4 2 0 5 ∞9 5 3 11 0 38 4 2 1 5 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 98: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams4

0 3 1 9 4 ∞4 0 3 11 1 ∞6 2 0 8 3 ∞2 4 2 0 5 ∞9 5 3 11 0 38 4 2 1 5 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 99: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams4

0 3 1 9 4 ∞4 0 3 11 1 ∞6 2 0 8 3 ∞2 4 2 0 5 ∞9 5 3 11 0 38 4 2 1 5 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 100: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams4

0 3 1 9 4 ∞4 0 3 11 1 ∞6 2 0 8 3 ∞2 4 2 0 5 ∞9 5 3 11 0 38 4 2 1 5 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 101: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams4

0 3 1 9 4 ∞4 0 3 11 1 ∞6 2 0 8 3 ∞2 4 2 0 5 ∞9 5 3 11 0 38 4 2 1 5 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 102: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams4

0 3 1 9 4 ∞4 0 3 11 1 ∞6 2 0 8 3 ∞2 4 2 0 5 ∞9 5 3 11 0 38 4 2 1 5 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 103: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams4

0 3 1 9 4 ∞4 0 3 11 1 ∞6 2 0 8 3 ∞2 4 2 0 5 ∞9 5 3 11 0 33 4 2 1 5 0

= cams4

Programación dinámica Algoritmos y Estructuras de Datos II

Page 104: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams5

0 3 1 9 4 ∞4 0 3 11 1 ∞6 2 0 8 3 ∞2 4 2 0 5 ∞9 5 3 11 0 33 4 2 1 5 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 105: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams5

0 3 1 9 4 ∞4 0 3 11 1 ∞6 2 0 8 3 ∞2 4 2 0 5 ∞9 5 3 11 0 33 4 2 1 5 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 106: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams5

0 3 1 9 4 74 0 3 11 1 ∞6 2 0 8 3 ∞2 4 2 0 5 ∞9 5 3 11 0 33 4 2 1 5 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 107: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams5

0 3 1 9 4 74 0 3 11 1 46 2 0 8 3 ∞2 4 2 0 5 ∞9 5 3 11 0 33 4 2 1 5 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 108: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams5

0 3 1 9 4 74 0 3 11 1 46 2 0 8 3 62 4 2 0 5 ∞9 5 3 11 0 33 4 2 1 5 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 109: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams5

0 3 1 9 4 74 0 3 11 1 46 2 0 8 3 62 4 2 0 5 89 5 3 11 0 33 4 2 1 5 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 110: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams5

0 3 1 9 4 74 0 3 11 1 46 2 0 8 3 62 4 2 0 5 89 5 3 11 0 33 4 2 1 5 0

= cams5

Programación dinámica Algoritmos y Estructuras de Datos II

Page 111: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams6

0 3 1 9 4 74 0 3 11 1 46 2 0 8 3 62 4 2 0 5 89 5 3 11 0 33 4 2 1 5 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 112: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams6

0 3 1 9 4 74 0 3 11 1 46 2 0 8 3 62 4 2 0 5 89 5 3 11 0 33 4 2 1 5 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 113: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams6

0 3 1 8 4 74 0 3 11 1 46 2 0 8 3 62 4 2 0 5 89 5 3 11 0 33 4 2 1 5 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 114: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams6

0 3 1 8 4 74 0 3 5 1 46 2 0 8 3 62 4 2 0 5 89 5 3 11 0 33 4 2 1 5 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 115: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams6

0 3 1 8 4 74 0 3 5 1 46 2 0 7 3 62 4 2 0 5 89 5 3 11 0 33 4 2 1 5 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 116: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams6

0 3 1 8 4 74 0 3 5 1 46 2 0 7 3 62 4 2 0 5 89 5 3 11 0 33 4 2 1 5 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 117: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams6

0 3 1 8 4 74 0 3 5 1 46 2 0 7 3 62 4 2 0 5 86 5 3 4 0 33 4 2 1 5 0

= cams6

Programación dinámica Algoritmos y Estructuras de Datos II

Page 118: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Reconstrucción del camino

fun Floyd(L:array[1..n,1..n] of costo) ret cams: array[1..n,1..n] of costoret E: array[1..n,1..n] of nat

copiar L a camsinicializar las celdas de E en 0for k:= 1 to n do

for i:= 1 to n dofor j:= 1 to n do

if cams[i,k]+cams[k,j] < cams[i,j]then cams[i,j]:= cams[i,k]+cams[k,j]

E[i,j]:= kfi

odod

odend fun

Programación dinámica Algoritmos y Estructuras de Datos II

Page 119: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Matriz de adyacencia L

cams0 E00 4 1 10 ∞ ∞4 0 3 ∞ 1 ∞∞ 2 0 8 4 ∞2 ∞ 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

0 0 0 0 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 00 0 0 0 0 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 120: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams1

cams1 E10 4 1 10 ∞ ∞4 0 3 14 1 ∞∞ 2 0 8 4 ∞2 6 2 0 ∞ ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

0 0 0 0 0 00 0 0 1 0 00 0 0 0 0 00 1 0 0 0 00 0 0 0 0 00 0 0 0 0 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 121: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams2

cams2 E20 4 1 10 5 ∞4 0 3 14 1 ∞6 2 0 8 3 ∞2 6 2 0 7 ∞∞ ∞ 3 ∞ 0 3∞ ∞ 2 1 ∞ 0

0 0 0 0 2 00 0 0 1 0 02 0 0 0 2 00 1 0 0 2 00 0 0 0 0 00 0 0 0 0 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 122: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams3

cams3 E30 3 1 9 4 ∞4 0 3 11 1 ∞6 2 0 8 3 ∞2 4 2 0 5 ∞9 5 3 11 0 38 4 2 1 5 0

0 3 0 3 3 00 0 0 3 0 02 0 0 0 2 00 3 0 0 3 03 3 0 3 0 03 3 0 0 3 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 123: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams4

cams4 E40 3 1 9 4 ∞4 0 3 11 1 ∞6 2 0 8 3 ∞2 4 2 0 5 ∞9 5 3 11 0 33 4 2 1 5 0

0 3 0 3 3 00 0 0 3 0 02 0 0 0 2 00 3 0 0 3 03 3 0 3 0 04 3 0 0 3 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 124: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams5

cams5 E50 3 1 9 4 74 0 3 11 1 46 2 0 8 3 62 4 2 0 5 89 5 3 11 0 33 4 2 1 5 0

0 3 0 3 3 50 0 0 3 0 52 0 0 0 2 50 3 0 0 3 53 3 0 3 0 04 3 0 0 3 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 125: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Calculando cams6

cams6 E60 3 1 8 4 74 0 3 5 1 46 2 0 7 3 62 4 2 0 5 86 5 3 4 0 33 4 2 1 5 0

0 3 0 6 3 50 0 0 6 0 52 0 0 6 2 50 3 0 0 3 56 3 0 6 0 04 3 0 0 3 0

Programación dinámica Algoritmos y Estructuras de Datos II

Page 126: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Problema de la moneda

fun cambio(d:array[1..n] of nat, k: nat) ret nr: array[0..n] of natvar cam: array[0..n,0..k] of nat

r,s: natfor i:= 0 to n do cam[i,0]:= 0 odfor j:= 1 to k do cam[0,j]:=∞ odfor i:= 1 to n do

for j:= 1 to k doif d[i] > j then cam[i,j]:= cam[i-1,j] else cam[i,j]:= min(cam[i-1,j],1+cam[i,j-d[i]]) fi

ododfor i:= 0 to n do nr[i]:= 0 odnr[0]:= cam[n,k]if cam[n,k] 6=∞ then

r:= ns:= kwhile cam[r,s] > 0 do

if cam[r,s] = cam[r-1,s] then r:= r-1else nr[r]:= nr[r]+1

s:= s-d[r]fi

odfi

end fun

Programación dinámica Algoritmos y Estructuras de Datos II

Page 127: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Problema del camino de costo mínimoAlgoritmo de FloydEjemploReconstrucción del caminoOtras reconstrucciones

Problema de la mochila

fun mochila(v:array[1..n] of valor, w:array[1..n] of nat, W: nat) ret nr: array[1..n] of boolvar moch: array[0..n,0..W] of valor

r,s: natfor i:= 0 to n do moch[i,0]:= 0 odfor j:= 1 to W do moch[0,j]:= 0 odfor i:= 1 to n do

for j:= 1 to W doif w[i] > j then moch[i,j]:= moch[i-1,j] else moch[i,j]:= max(moch[i-1,j],v[i]+moch[i-1,j-w[i]]) fi

ododr:= ns:= Wwhile moch[r,s] > 0 do

if moch[r,s] = moch[r-1,s] then nr[r]:= falseelse nr[r]:= true

s:= s-w[r]fir:= r-1

odend fun

Programación dinámica Algoritmos y Estructuras de Datos II

Page 128: Algoritmos y Estructuras de Datos II Programación dinámica Algoritmo de Floyd Conclusión Backtracking Problema de los caminos de costo mínimo entre cada par de vértices Sean 1

BacktrackingProgramación dinámica

Algoritmo de FloydConclusión

Conclusión

Algoritmos voracesCuando tenemos un criterio de selección que garantizaoptimalidad

BacktrackingCuando no tenemos un criterio asísolución top-downen general es exponencial

Programación dinámicaconstruye una tabla bottom-upevita repetir cálculospero realiza algunos cálculos inútiles.

Programación dinámica Algoritmos y Estructuras de Datos II