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

Post on 10-Aug-2020

10 views 0 download

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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