Upload
edward-cueva
View
220
Download
0
Embed Size (px)
Citation preview
7/31/2019 PROGRAMACION DIMANICA
1/32
7/31/2019 PROGRAMACION DIMANICA
2/32
La programacion dinamica sesuele utilizar en problemas
de optimizacion, donde unasolucion esta formada poruna serie de decisiones.
La programacion dinamica noutiliza recursividad, sinoque alamcena los resultadosde las subproblemas en una
tabla , calculando primerolas soluciones para losproblemas pequenos.
7/31/2019 PROGRAMACION DIMANICA
3/32
Programacin dinmica determinstica.
Programacin dinmica probabilstica.
7/31/2019 PROGRAMACION DIMANICA
4/32
Para que un problema pueda ser
resuelto con la tcnica de
programacin dinmica, debe
cumplir con ciertas caractersticas:Naturaleza secuencial de las
decisiones: El problema puede ser
dividido en etapas.Cada etapa tiene un nmero de
estados asociados a ella. La decisin ptima de cada etapa
depende solo del estado actual y no
de las decisiones anteriores.
CARACTERISTICAS DE PROGRAMACION
La decisin tomada en una etapa
determina cual ser el estado de la
etapa siguiente.
7/31/2019 PROGRAMACION DIMANICA
5/32
7/31/2019 PROGRAMACION DIMANICA
6/32
Para el problema de las monedas conprogramacin dinmica se necesitacrear un algoritmo que permita a una mquina expendedora devolver el
cambio mediante el menor nmero de monedas posible. Mediante laprogramacin dinmica se solucionar el caso en el que el nmero de
monedas de cada tipo es limitado.
7/31/2019 PROGRAMACION DIMANICA
7/32
1. Si el valor de la moneda para dar el cambio que se llamara saldo esmayor o igual que la primera moneda de mayor valor ingresadoentonces se restan ambos.
2. Si el saldo restante de valor de la moneda para dar el cambio siguesiendo mayor o igual que la primera moneda de mayor valor ingresadoentonces se vuelve a restar
3. si no cumple se vuelve evaluar con la segunda moneda de mayor valoringresado, y as sucesivamente.
4. En caso que la resta del saldo llegue a ser cero, se entrega la cantidad demonedas con el valor de la moneda usada el cual en conjunto representa
la cantidad del valor de la moneda que se desea dar el cambio.5. Si se da el caso que la resta sea diferente que cero entonces sedevuelven a las cadenas el valor de las cantidades que ha sido restado.Dando la notificacin de que no es posible el cambio.
6. La entrega de monedas para dar el cambio debe ser el mnimo.
7/31/2019 PROGRAMACION DIMANICA
8/32
7/31/2019 PROGRAMACION DIMANICA
9/32
Auxiliares USA (A)[ ] = {0} , COM A = 0 ,
mon 50 10 6 4 1
can 2 2 2 2 2
Ingresamos N = monedas5
Auxcan can
USA (B) [ ] = {0} , COM B = 0.
Usa 0 0 0 0 0
7/31/2019 PROGRAMACION DIMANICA
10/32
7/31/2019 PROGRAMACION DIMANICA
11/32
mon 50 10 6 4 1
Aux
can2 2 2 2 2
Usa 0 0 0 0 0FOR 1
PARA
62SALDO
Buscar
SALDO = = 0
i=0
>= 50
SALDO
62
31
= SALDO/2
NUEVO SALDO =
saldo = ( saldo* 2 )mon [i]
no se encuentra
si auxcan[i] >= 1Entonces
( )
Usa (A) 0 0 0 0 0
pos 0 1 2 3 4
Usamos 1 moneda s/. 50
1
NUEVO SALDO = 12
1
Dar cambio
para s/.62
7/31/2019 PROGRAMACION DIMANICA
12/32
mon 50 10 6 4 1
Aux
can1 2 2 2 2
Usa 0 0 0 0 0
PARA
12SALDO
Buscar
SALDO = = 0
i=1
>= 10
SALDO
12
6
= SALDO/2
NUEVO SALDO =
saldo = ( saldo* 2 )mon [pos]
Si se encuentra
si auxcan[pos] >= 1Entonces
( )
Usa (A) 1 0 0 0 0
pos 0 1 2 3 4
Usamos 1 moneda s/. 6
1
NUEVO SALDO = 6
1
PARA
12
i=0
>= 50
Pos = 2
7/31/2019 PROGRAMACION DIMANICA
13/32
mon 50 10 6 4 1
Aux
can1 2 1 2 2
Usa 0 0 0 0 0
PARA
6SALDO
Buscar
SALDO = = 0
i=2
>= 6
SALDO
6
3
= SALDO/2
NUEVO SALDO =
saldo = ( saldo* 2 )mon [i]
No se encuentra
si auxcan[i] >= 1Entonces
( )
Usa (A) 1 0 1 0 0
pos 0 1 2 3 4
Usamos 1 moneda s/. 6
1
NUEVO SALDO = 0
0
PARA
6
i=1
>= 102
7/31/2019 PROGRAMACION DIMANICA
14/32
7/31/2019 PROGRAMACION DIMANICA
15/32
mon 50 10 6 4 1
Aux
can1 2 0 2 2
Usa 0 0 0 0 0FOR 2
PARA
62SALDO
Buscar
SALDO = = 0
i=0
>= 50
SALDO
62
31
= SALDO/2
NUEVO SALDO =
saldo = ( saldo* 2 )mon [i]
no se encuentra
si auxcan[i] >= 1Entonces
( )
Usa (A) 1 0 2 0 0
pos 0 1 2 3 4
Usamos 1 moneda s/. 50
NUEVO SALDO = 12
0
ComA = 3
Usa (B) 0 0 0 0 0
1
7/31/2019 PROGRAMACION DIMANICA
16/32
mon 50 10 6 4 1
Aux
can0 2 0 2 2
Usa 0 0 0 0 0
PARA
12SALDO
Buscar
SALDO = = 0
i=1
>= 10
SALDO
12
6
= SALDO/2
NUEVO SALDO =
saldo = ( saldo* 2 )mon [i]
Si se encuentra
si auxcan[pos] >= 1Entonces
( )
Usa (A) 1 0 0 0 0
pos 0 1 2 3 4
Usamos 1 moneda s/. 10
NUEVO SALDO = 2
1
PARA
12
i=0
>= 50
Pos = 2
ComA = 3
Usa (B) 1 0 0 0 0
1
7/31/2019 PROGRAMACION DIMANICA
17/32
mon 50 10 6 4 1
Aux
can0 1 0 2 2
Usa 0 0 0 0 0
PARA2
SALDO
Buscar
SALDO = = 0
i=4>= 1
SALDO
2
1
= SALDO/2
NUEVO SALDO =
saldo = ( saldo* 2 ) mon [pos]
Si se encuentra
si auxcan[pos] >= 1Entonces ( )
Usa (A) 1 0 0 0 0
pos 0 1 2 3 4
Usamos 1 moneda s/. 1
NUEVO SALDO = 1
1
Pos = 4
ComA = 3
Usa (B) 1 1 0 0 0
1
PARA i=12 >= 10
PARA i=2
2 >= 6
PARA i=3
2 >= 4
7/31/2019 PROGRAMACION DIMANICA
18/32
mon 50 10 6 4 1
Aux
can0 1 0 2 1
Usa 0 0 0 0 0
PARA1
SALDO
Buscar
SALDO = = 0
i=4>= 1
SALDO
1
0.5
= SALDO/2
NUEVO SALDO =
saldo = saldomon [pos]
No se encuentra
Entonces
( )
Usa (A) 1 0 0 0 0
pos 0 1 2 3 4
Usamos 1 moneda s/. 1
NUEVO SALDO = 0
0
ComA = 3
Usa (B) 1 1 0 0 1
1
2
7/31/2019 PROGRAMACION DIMANICA
19/32
Entonces
ComA =
Usa (B) 1 1
ComA +
ComA = 1
0 0 2
2224
7/31/2019 PROGRAMACION DIMANICA
20/32
AHORA
ComA < ComB
ENTONCES
Usa =
Usa (A) 1 0
Usa +
2 0 0
Usa 0 0 0 0 01 0 02 0
7/31/2019 PROGRAMACION DIMANICA
21/32
AHORA
can =
Usa 1 0
can -
2 0 0
Can 2 2 2 2 21 2 20 2
7/31/2019 PROGRAMACION DIMANICA
22/32
mon 50 10 6 4 1
can 1 2 0 2 2
Usa 1 0 2 0 0
pos 0 1 2 3 4
Se hace entrega de
1
2
moneda
moneda
s/. 50
s/. 6
Usando solo 3 monedas
7/31/2019 PROGRAMACION DIMANICA
23/32
7/31/2019 PROGRAMACION DIMANICA
24/32
mon 50 10 6 4 1
Aux
can2 2 2 2 2
Usa 0 0 0 0 0FOR 1
PARA
53SALDO
Buscar
SALDO = = 0
i=0
>=50
SALDO
53
26.5
= SALDO/2
NUEVO SALDO =
saldo = ( saldo* 2 )mon [i]
no se encuentra
si auxcan[i] >= 1Entonces
( )
Usa (A) 0 0 0 0 0
pos 0 1 2 3 4
Usamos 1 moneda s/. 50
1
NUEVO SALDO = 3
1
Dar cambio
para s/. 53
7/31/2019 PROGRAMACION DIMANICA
25/32
mon 50 10 6 4 1
Aux
can1 2 2 2 2
Usa 0 0 0 0 0
PARA3
SALDO
Buscar
SALDO = = 0
i=4>= 1
SALDO
3
1.5
= SALDO/2
NUEVO SALDO =
saldo = ( saldo* 2 ) mon [pos]
Si se encuentra
si auxcan[pos] >= 1Entonces ( )
Usa (A) 1 0 0 0 0
pos 0 1 2 3 4
Usamos 1 moneda s/. 1
NUEVO SALDO = 2
1
Pos = 4
1
PARA i=13 >= 10
PARA i=2
3 >= 6
PARA i=3
3 >= 4
7/31/2019 PROGRAMACION DIMANICA
26/32
mon 50 10 6 4 1
Aux
can1 2 2 2 1
Usa 0 0 0 0 0
PARA2
SALDO
Buscar
SALDO = = 0
i=4>= 1
SALDO
1
1
= SALDO/2
NUEVO SALDO =
saldo = (saldo*2)mon [pos]
Entonces
( )
Usa (A) 1 0 0 0 1
pos 0 1 2 3 4
Usamos 1 moneda s/. 1
NUEVO SALDO = 1
0
1
2
Si se encuentra
si auxcan[pos] >= 1
Pos = 4
7/31/2019 PROGRAMACION DIMANICA
27/32
mon 50 10 6 4 1
Aux
can1 2 2 2 0
Usa 0 0 0 0 0
PARA1
SALDO
Buscar
SALDO = = 0
i=4>= 1
SALDO
1
0.5
= SALDO/2
NUEVO SALDO =
Entonces
( )
Usa (A) 1 0 0 0 2
pos 0 1 2 3 4
SALDO = 1
No se encuentra
si auxcan[i] >= 1
i=i +1
i=5
7/31/2019 PROGRAMACION DIMANICA
28/32
Ahora
si
saldo diferente de cero y i es igual N
entonces
Usa (A) 1 0 0 0 200
7/31/2019 PROGRAMACION DIMANICA
29/32
7/31/2019 PROGRAMACION DIMANICA
30/32
7/31/2019 PROGRAMACION DIMANICA
31/32
Con el desarrollo de la investigacin nos hemos podido dar cuenta que la programacindinmica es un mtodo para reducir el tiempo de ejecucin del algoritmo, ya que se
desarrolla mediante subproblemas.
Adems la programacin dinmica es un mtodo capaz de resolver de manera eficientealgunos algoritmos que alguna no pudieron ser desarrollados por otras tcnicas.
La programacin dinmica encuentra la solucin optima de un problema con n variablesdescomponindolos en n etapas, siendo cada eta a un subproblema de una sola variable,
sin embargo, como naturaleza de la etapa difiere de acuerdo con el problema deoptimizacin.
Los clculos de programacin dinmica se hacen en forma recursiva, ya que la solucinptima de un problema se usa como dato para el siguiente subproblema. Para cuando seresuelve el ltimo problema queda en la mano la solucin optima de todo el problema.
7/31/2019 PROGRAMACION DIMANICA
32/32