PROGRAMACION DIMANICA

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