algoritmos y estructuras de datos ii programación dinámica algoritmo de floyd conclusión...
Post on 10-Aug-2020
12 Views
Preview:
TRANSCRIPT
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
top related