SlideShare a Scribd company logo
1 of 66
Download to read offline
Programación Dinámica


          Dra. Laura Cruz Reyes
Instituto Tecnológico de Ciudad Madero
                 México
Programación dinámica vs.
           divide y vencerás

    Divide y vencerás:
        Divide el problema en suproblemas.
        Integra las soluciones parciales para lograr una solución final.
        Repite procesamiento en subproblemas idénticos
    Programación dinámica:
        Divide el problema en suproblemas.
        Integra las soluciones parciales para lograr una solución final.
        Durante el proceso de división-integración guarda la solución
        de los subproblemas encontrados para evitar resolverlos cuando
        los vuelva a encontrar.




Laura Cruz Reyes             Programación Dinámica
Divide y vencerás
   • Si un problema es demasiado grande para
     resolverlo de una vez, se descompone en varias
     partes más fáciles de resolver.
   • Más formalmente, dado un problema a resolver
     planteado en términos de una entrada de tamaño
     n, la técnica de divide y vencerás parte la entrada
     en k subproblemas, 1< k< n.
   • Estos        subproblemas        se       resuelven
     independientemente y después se combinan sus
     soluciones parciales para obtener la solución del
     problema original.
Laura Cruz Reyes        Programación Dinámica
Aplicaciones de
                   divide y vencerás

        Ordenamiento
         • Mezcla
         • Quicksort
         • Heap

        Búsqueda
         • Búsqueda binaria


Laura Cruz Reyes       Programación Dinámica
Programación dinámica

    Bajo el principio de divide y vencerás se divide un
    problema en varios problemas más pequeños que
    se pueden resolver independientemente.

    En la programación dinámica, aplica cuando los
    subproblemas no son independienes. Se
    resuelven todos una sóla vez y se almacenan las
    respuestas para dar solución a problemas
    mayores.

Laura Cruz Reyes     Programación Dinámica
Programación dinámica

    Un problema puede ser resuelto por
    programación dinámica si cumple el
    principio de Optimalidad:

         Cualquier decisión que suponga encontrar la
        mejor forma de resolver un pequeño
        subproblema es también válida cuando el
        subproblema pasa a ser una parte de un
        problema mayor
Laura Cruz Reyes      Programación Dinámica
Programación dinámica

    Dos dificultades que pueden surgir en la
    programación dinámica son las siguientes:

         Puede que no siempre sea posible combinar
        las soluciones de dos problemas pequeños
        para obtener la de uno mayor.
         El número de subproblemas a resolver puede
        ser inaceptablemente grande.

Laura Cruz Reyes     Programación Dinámica
Pasos de la programación
               dinámica

El desarrollo de un algoritmo de programación dinámica
     puede realizarse en 4 pasos.
1. Caracterizar la estructura de una solución óptima.
2. Definir una estructura para guardar los elementos de
     la solución óptima.
3. Definir recursivamente el valor de una solución óptima
     y su estructura de almacenamiento.
4. Diseñar un algoritmo para obtener la solución óptima
     y su valor usando abajo-arriba (button-up).
5. Diseñar un algoritmo para extraer la solución óptima a
     partir de información previamente calculada.

Laura Cruz Reyes      Programación Dinámica
Aplicaciones de la
            programación dinámica

    En los siguientes problemas la programación
    dinámica es más eficaz que la técnica de fuerza
    bruta. Con esta última, el número de posibles
    soluciones a evaluar es exponencial.

         Problema   del orden de multiplicación de matrices
         Problema   del cambio de moneda
         Problema   de la mochila 0-1
         Problema   de la subsecuencia común más larga

Laura Cruz Reyes          Programación Dinámica
Problema del orden de
multiplicación de matrices
Multiplicación de matrices
  Algoritmo multiplicaciónMatrices
  Entradas: Matrices A y B, y enteros m, n, y p,
  que indican que A es una matriz de m × n y B es
  una matriz de n × p
  Salidas: Matriz C, una matriz de m × p. C se pasa
  al algoritmo, el cual la llena.
  multMat(A,B,C,m,n,p)
  1.   for (i =0; i<m; i++)
  2.        for (j =0; j<p; j++)
  3.               cij = 0
  4.               for (k =0; k<n; k++)
  5.                      cij += aik bkj


Laura Cruz Reyes     Programación Dinámica
Número de multiplicaciones

  Si se desea obtener la evaluación del producto
  de n matrices

             A = A1 x A2 x.....x An

  Donde Ai es una matriz con ri-1 renglones y ri
  columnas. El orden de multiplicación de las
  matrices afecta     al número total    de las
  operaciones requeridas para evaluar A.

Laura Cruz Reyes           Programación Dinámica
Número de multiplicaciones
En el algoritmo clásico de multiplicación de una matriz m x n
por una matriz n x p, el número de multiplicaciones es mnp.

Sea el siguiente producto:
       A=     A1 x     A2 x A3 x A4
           [10 x 20] [20 x 50] [50 x 1] [1 x 100]

El orden de evaluación
       A1 x (A2 x (A3 x A4)) requiere 125,000 operaciones.

El orden de evaluación
       (A1 x (A2 x A3)) x A4 requiere 2200 operaciones.
 Laura Cruz Reyes       Programación Dinámica
Número de multiplicaciones
          A=        A1 x     A2 x A3 x        A4
                   [10 x 20]     [20 x 50]   [50 x 1]   [1 x 100]

El orden de evaluación (A1 x (A2 x A3)) x A4 requiere 2200 operaciones

    (A2 x A3) con dimensiones [20 x 50] [50 x 1] respectivamente
        Requiere 20*50*1=1000 multiplicaciones
        Genera la matriz A2A3 con dimensiones [20 x 1]
    (A1 x A2A3) con dimensiones [10 x 20] [20 x 1] respectivamente
        Requiere 10*20*1=200 multiplicaciones
        Genera la matriz A1A2A3 con dimensiones [10 x 1]
    (A1A2A3 x A4) con dimensiones [10 x 1] [1 x 100] respectivamente
        Requiere 10*1*100=1000 multiplicaciones
        Genera la matriz A1A2A3A4 con dimensiones [10 x 100]

Total de multiplicaciones = 1000+200+1000=2200



Laura Cruz Reyes                    Programación Dinámica
Problema del orden de multiplicación
            de matrices


     Dada una cadena ‹A1, A2,...An› de n matrices,
     donde i=1,2,...,n, Ai tiene dimensiones ri-1 x ri .

     Se busca poner paréntesis completamente al
     producto A1, A2,...An de manera que minimice el
     número de operaciones escalares.



Laura Cruz Reyes       Programación Dinámica
Solución óptima y su valor
    Sea el siguiente producto:
      A=          A1 x       A2 x A3 x A4
              [10 x 20] [20 x 50] [50 x 1] [1 x 100]

    Solución óptima: colocación de paréntesis con menor costo
    ( ((A1(A2A3)) ((A4A5) A6))

    Valor de la solución óptima: mínimo número de multiplicaciones
    2200 multiplicaciones

    Producto obtenido con el menor número de multiplicaciones
    A=( ((A1(A2A3)) ((A4A5) A6))



Laura Cruz Reyes           Programación Dinámica
Paso 1: Caracterizar la estructura de
            una solución óptima

        División del problema en subproblemas: Para colocar
       paréntesis, dada una cadena de matrices Ai Ai+1 … Aj se divide el
       producto en términos de k, con i ≤ k< j, quedando dos
       subcadenas: (A1 … Ak) y (Ak+1… An )

                                                           1..4

                        k=1                                 k=2                                            k=3
       1..1                   2..4                  1..2            3..4                        1..3                  4..4

              k=2               k=3                 k=1             k=3                 k=1                         k=2
       2..2      3..4         2..3      4..4 1..1           2..2 3..3      4..4 1..1           2..3          1..2         3..3


         3..3       4..4 2..2        3..3                                              2..2         3..3    1..1          2..2
              k=3               k=2                                                           k=2                   k=1


              La estructura debe permitir generar soluciones alternas, entre ellas la óptima

Laura Cruz Reyes                             Programación Dinámica
Paso 1: Caracterizar la estructura de
            una solución óptima

                                                       1..4

                    k=1                                 k=2                                              k=3
    1..1                  2..4                  1..2              3..4                        1..3                  4..4

           k=2               k=3                k=1               k=3                 k=1                         k=2
    2..2     3..4         2..3      4..4 1..1           2..2   3..3      4..4 1..1           2..3          1..2         3..3


      3..3       4..4 2..2       3..3                                                2..2         3..3    1..1          2..2
           k=3               k=2                                                            k=2                   k=1

                                                                                A1 x A2 x A3 x A4
                                                                  k=3
                                                                               (A1 x A2 x A3) x (A4 )
                                                                  k=1
                                                                                ((A1 ) x (A2 x A3)) x (A4 )
                                                                  k=2
                                                                                ((A1 ) x ((A2 ) x (A3 ))) x (A4 )
Laura Cruz Reyes                                Programación Dinámica
Paso 2: Definir una estructura para guardar los
       elementos de la solución óptima


  Pare construir la solución óptima, se define una matriz
  s[i,j], la cual contendrá el valor de k que logra una
  colocación óptima de paréntesis.

                                                 1..4

                k=1                               k=2                                          k=3
        1..1           2..4               1..2          3..4                        1..3                 4..4

                                                                            k=1                        k=2
                                                               4..4 1..1           2..3         1..2         3..3

        s[1,4]=k_óptima=3 ⇒ (A1 x A2 x A3) x (A4 );
        s[1,3]=k_óptima=1 ⇒ ((A1 ) x (A2 x A3)) x (A4 );                   2..2         3..3
        s[2,3]=k_óptima=2 ⇒ ((A1 ) x ((A2 ) x (A3 ))) x (A4 );                    k=2




 Laura Cruz Reyes                     Programación Dinámica
Paso 3: Definir recursivamente el valor
        de una solución óptima

      Para calcular el número de multiplicaciones de una
      solución, se define un arreglo m[i,j] el cual contendra el
      costo mínimo de la subcadena Ai … Aj usando el punto
      de corte óptimo k:
                                                                1..4
      Ejemplo: Si k=2, m[1,4] = m[1,2]+m[3,4]+r0r2r4
                                                                k=2
                                                       1..2              3..4




      Ejemplo: Si k=3, m[1,4] = m[1,3]+m[4,4]+r0r3r4              1..4

                                                                  k=3
                                                         1..3              4..4



Laura Cruz Reyes          Programación Dinámica
Paso 3: Definir recursivamente el valor
        de una solución óptima

      Sea m[i,j] un arreglo que almacena el costo mínimo de
      la subcadena Ai … Aj usando el punto de corte óptimo k.
      Por lo tanto, la tabla se llena con la siguiente regla:

           Si i == j entonces m[i,j] = 0, quiere decir que la cadena es de
              una sola matriz así que no requiere de multiplicaciones
              escalares.

           Si i < j entonces m[i,j] = min(m[i,k]+ m[k+1,j] +ri-1rkrj), i≤k<j

    • El término m[i,k] es el costo mínimo de evaluar A′ = Ai x Ai+1 x...x Ak
    • El término m[k+1,j] es el costo mínimo de evaluar A′′ = Ak + 1 x Ak+2 x...x Aj
    • El tercer término es el costo de multiplicar A′ x A′′ .



Laura Cruz Reyes               Programación Dinámica
Paso 4: Diseñar un algoritmo para
 obtener la solución óptima y su valor

Tamaño subcadena/
nivel de procesamiento
1            m11= 0                     m22= 0                      m33= 0                    m44= 0
2            m12= 10,000                m23= 1000                   m34= 5000
3            m13= 1200                  m24= 3000
4            m14= 2200
                                               1..4                                                               Arriba
                                                                                                                   (up)
                K=1                             K=2                                          K=3
1..1              2..4                  1..2              3..4                       1..3             4..4

       K=2            K=3               K=1               K=3                 K=1                    K=2
2..2     3..4     2..3      4..4 1..1           2..2   3..3      4..4 1..1           2..3     1..2         3..3


 3..3    4..4 2..2       3..3                                                2..2     3..3   1..1          2..2
       K=3            K=2                                                           K=2              K=1           Abajo
                                                                                                                  (button)
Laura Cruz Reyes                                Programación Dinámica
Paso 4: Diseñar un algoritmo para
   obtener la solución óptima y su valor

         Valor de solución óptima:                              Solución óptima:
         Matriz de costos mínimos                          Matriz de cortes óptimos k
                 m[i,j]                                            s[i,j]
     0                                                      1
                0
                                                                  2
                        0
                                                                        3
                               0
                                             Ta
                                                ma
                                                  ño
                                                                             4
                                                       1




Laura Cruz Reyes                   Programación Dinámica
Paso 4: Diseñar un algoritmo para
obtener la solución óptima y su valor

         Valor de solución óptima:                              Solución óptima:
         Matriz de costos mínimos                          Matriz de cortes óptimos k
                 m[i,j]                                            s[i,j]
     0          10000                                       1     1
                0       1000
                                                                  2     2
                        0      5000
                                             Ta
                                                                        3    3
                               0                ma
                                                   ño
                                             Ta       2
                                                ma
                                                   ño
                                                                             4
                                                      1




Laura Cruz Reyes                   Programación Dinámica
Paso 4: Diseñar un algoritmo para
obtener la solución óptima y su valor

         Valor de solución óptima:                              Solución óptima:
         Matriz de costos mínimos                          Matriz de cortes óptimos k
                 m[i,j]                                            s[i,j]
     0          10000   1200                                1     1     1
                0       1000   3000
                                                                  2     2    2
                                             Ta
                        0      5000             ma
                                                   ño
                                             Ta
                                                      3                 3    3
                               0                ma
                                                   ño
                                             Ta       2
                                                ma
                                                   ño
                                                                             4
                                                      1




Laura Cruz Reyes                   Programación Dinámica
Paso 4: Diseñar un algoritmo para
obtener la solución óptima y su valor

         Valor de solución óptima:                              Solución óptima:
         Matriz de costos mínimos                          Matriz de cortes óptimos k
                 m[i,j]                                            s[i,j]
     0          10000   1200   2200                         1     1     1    3
                                             Ta
                                                ma
                0       1000   3000               ño
                                                       4          2     2    2
                                             Ta
                        0      5000             ma
                                                   ño
                                             Ta
                                                      3                 3    3
                               0                ma
                                                   ño
                                             Ta       2
                                                ma
                                                   ño
                                                                             4
                                                      1




Laura Cruz Reyes                   Programación Dinámica
Algoritmo para obtener la
                 solución óptima y su valor
Algoritmo ordenCadenaMatrices(R)
Entradas:R es el vector   de dimensiones de una cadena de n matrices, la
         matriz i tiene   dimensiones ri-1 x ri
Salidas: M es la matriz   de costos mínimos, expresado en número de multiplicaciones
         S es la matriz   de puntos-de-corte óptimos
  1    n ← lenght(R)-1
  2    for i = 1 to n do mii= 0 /*costo de cadenas de tamaño 1*/
  3    for l = 2 to n do            /*tamaño de la cadena*/
  4      for i=1 to n–l+1 do         /*inicio de la cadena*/
  5         j ← i+l–1               /*fin de la cadena*/
  6          mij ← ∞
  7             for k = i to j-1 do /*punto-corte de cadena*/
  8               q ← mik + mk+1,j + ri - 1* rk * rj
  9              if q < mij
  10             then mij ← q /* valor: mejor costo de cadena*/
  11                 sij ← k /*solución: mejor punto-corte de cadena*/

   Laura Cruz Reyes               Programación Dinámica
Complejidad del algoritmo

       Existen solamente n(n-1)/2 problemas diferentes
       (cadenas), y la programación dinámica resuelve
       cada problema exactamente una vez*, por lo tanto


                                 T(n)= n2 /2= θ(n2)

       * No se están contabilizando las evaluaciones de un mismo problema con diferentes valores de k




Laura Cruz Reyes                         Programación Dinámica
Complejidad del algoritmo
   Operación básica: número de subproblemas evaluados*


                    T(n)=subproblemas de tamaño 1+ suproblemas de tamaños 2 a n

                                    n n − l +1 j −1    n n − l +1 i + l − 2
                     T ( n) = n + ∑       ∑ ∑ 1 = ∑ ∑ ∑ 1 = Θ( n )            3

                                   l =2   i =1 k =1   l =2   i =1   k =1




     * Si se están contabilizando las evaluaciones de un mismo problema con diferentes valores de k




Laura Cruz Reyes                             Programación Dinámica
Paso 5: Diseñar un algoritmo para
       extraer la solución óptima

   Matriz s[i,j]           Solución óptima: (A1 x (A2 x A3)) x A4
    1     1        1   3                  A1…A4: s14=3
                                        (A1x A2xA3)x (A4)
          2        2   2

                   3   3        A1…A3: s13=1                 A4…A4: s44=4
                                (A1)x(A2x A3)               (A4)
                       4

                           A1…A1: s11=1 A2…A3: s23=2
                           (A!)        (A2)x(A3)


                                      A2…A2: s22=2 A3…A3: s33=3
                                      (A2)        (A3)



Laura Cruz Reyes            Programación Dinámica
Algoritmo para calcular un producto
usando el mínimo número de operaciones


  Algoritmo multiplicaCadenaMatrices(A,S,i,j)
 Entradas: A es una cadena de matrices
           S es una matriz que contiene la solución óptima
           i,j delimitan una subcadena contenida en A
 Salidas: producto de la cadena de matrices

  1     if j > i
  2      then X ← multiplicaCadenaMatrices(A,S,i,sij)
  3           Y ← multiplicaCadenaMatrices(A,S,sij+1,j)
  4           return multiplicaMatrix(X,Y)
  5      else return Ai




Laura Cruz Reyes         Programación Dinámica
Algoritmo para calcular un producto
  usando el mínimo número de operaciones


Algoritmo multiplicaCadenaMatrices(A,S,1,6)
    if 6>1

       X = multiplicaCadenaMatrices(A,S,i=1,s1,6=3)     R1
       Y = multiplicaCadenaMatrices(A,S,s1,6+1=4,j=6)   R3

       return (multiplicar (X, Y))




  Laura Cruz Reyes      Programación Dinámica
Algoritmo para calcular un producto
usando el mínimo número de operaciones


R1
Algoritmo multiplicaCadenaMatrices(A,S,1,3)
    if 3>1

          X = multiplicaCadenaMatrices(A,S,1,1)   A1
          Y = multiplicaCadenaMatrices(A,S,2,3)   R2

          return (multiplicar (X,Y))




Laura Cruz Reyes        Programación Dinámica
Algoritmo para calcular un producto
usando el mínimo número de operaciones


 R2
 Algoritmo multiplicaCadenaMatrices(A,S,2,3)
    if 3>2
           X = multiplicaCadenaMatrices(A,S,2,2)         A2
           Y = multiplicaCadenaMatrices        (A,S,3,3) A3
          return (multiplicar (X,Y))                 (A2A3)




Laura Cruz Reyes       Programación Dinámica
Algoritmo para calcular un producto
usando el mínimo número de operaciones


R1
Algoritmo multiplicaCadenaMatrices(A,S,1,3)
    if 3>1

          X = multiplicaCadenaMatrices(A,S,1,1) A1
          Y = multiplicaCadenaMatrices(A,S,2,3) (A2A3)

          return (multiplicar (X,Y))          (A1(A2A3))




Laura Cruz Reyes        Programación Dinámica
Algoritmo para calcular un producto
  usando el mínimo número de operaciones


Algoritmo multiplicaCadenaMatrices(A,S,1,6)
   if 6>1
       X = multiplicaCadenaMatrices(A,S,1,3)(A1(A2A3))
      Y = multiplicaCadenaMatrices(A,S,4,6)R3
      return (multiplicar (X,Y))




  Laura Cruz Reyes    Programación Dinámica
Algoritmo para calcular un producto
usando el mínimo número de operaciones


 R3
 Algoritmo multiplicaCadenaMatrices(A,S,4,6)
     if 6>4

           X = multiplicaCadenaMatrices(A,S,4,5)   R4
           Y = multiplicaCadenaMatrices(A,S,6,6)   A6
          return (multiplicar (X,Y))




Laura Cruz Reyes        Programación Dinámica
Algoritmo para calcular un producto
usando el mínimo número de operaciones


 R4
 Algoritmo multiplicaCadenaMatrices(A,S,4,5)
    if 5>4
           X = multiplicaCadenaMatrices (A,S,4,4)   A4
           Y = multiplicaCadenaMatrices (A,S,5,5)   A5
          return (multiplicar (X,Y))           (A4A5)



Laura Cruz Reyes       Programación Dinámica
Algoritmo para calcular un producto
usando el mínimo número de operaciones


 R3
 Algoritmo multiplicaCadenaMatrices(A,S,4,6)
    if 6>4
           X = multiplicaCadenaMatrices (A,S,4,5)A4A5
           Y = multiplicaCadenaMatrices (A,S,6,6)      A6
          return (multiplicar (X,Y))           ((A4A5)A6)



Laura Cruz Reyes       Programación Dinámica
Algoritmo para calcular un producto
  usando el mínimo número de operaciones


Algoritmo multiplicaCadenaMatrices(A,S,1,6)
   if 6>1
       X = multiplicaCadenaMatrices(A,S,1,3)(A1(A2A3))
      Y = multiplicaCadenaMatrices(A,S,4,6) ((A4A5)A6)
      return (multiplicar(X Y))((A1(A2A3))((A4A5)A6)




  Laura Cruz Reyes     Programación Dinámica
Algoritmo para obtener una cadena
    de matrices con paréntesis


    Algoritmo parentizaCadenaMatrices(A,S,i,j)
  EntradaS: A es una cadena de matrices sin paréntesis
  Salidas: A es la cadena de matrices con paréntesis

  1
  2
  3
  4
  5




Laura Cruz Reyes     Programación Dinámica
Algoritmo recursivo para obtener el costo
     óptimo de una multiplicación de matrices

Algoritmo ordenCadenaMatricesRecursivo(R,i,j)
Entradas:R es el vector de dimensiones de una cadena de n matrices, la
         matriz i tiene dimensiones ri-1 x ri
Salidas: M es la matriz de costos mínimos

 1     if i = j then
 2        return 0
 3     mij= ∞                   /*inicializa costo cadena actual*/
 4     for k = i to j-1 do      /*punto-corte cadena*/
 5         q ← ordenCadenaMatricesRecursivo(R,i,k)+
               ordenCadenaMatricesRecursivo(R,k+1,j)+ri-1*rk*rj
 6         if q < mij
 7           then mij ← q
 8     return mij



  Laura Cruz Reyes          Programación Dinámica
Complejidad del algoritmo
              recursivo

    El número de subproblemas evaluados es al
    menos exponencial en n
                      ⎧0                               para n = 1
                      ⎪
              T (n) = ⎨ n −1
                      ⎪1 + ∑ (T (k ) + T (n − k ) + 1) para n > 1
                      ⎩ k =1
                      ⎧0                               para n = 1
                      ⎪
              T (n) = ⎨ n −1
                      ⎪2∑ T (i ) + n                   para n > 1
                      ⎩ i =1
              T (n) ≥ 2n −1
              T (n) = Ω(2n −1 )

Laura Cruz Reyes                  Programación Dinámica
Versión memorizada del
             programa recursivo

    Variación de la programación dinámica que
    combina el enfoque natural de los algoritmos
    recursivos con la eficiencia de la programación
    dinámica.
    Se mantiene una tabla con soluciones de
    subproblemas, pero el llenado de la tabla se
    realiza bajo el control de un algoritmo recursivo.
    Cada entrada de la tabla tiene una bandera que
    se prende cuando esta ha sido calculada.

Laura Cruz Reyes     Programación Dinámica
Versión memorizada del
               programa recursivo
                                     LOOKUP-CHAIN(p,i,j)
                                     1 if i = j
  MEMOIZED-MATRIX-CHAIN(p)
                                     2     then return 0
  1 n ← length[p] - 1
                                     3 m[i,j] ← ∞
  2 for i ← 1 to n
                                     4 for k ← 1 to j -1
  3 do for j ← 1 to n
                                     5     do q ← LOOKUP-CHAIN
  4    do m[i,j] ← ∞
                                           (p,i,k)
  5 return LOOKUP-CHAIN(p,1,n)
                                                + LOOKUP-CHAIN
                                           (p,k+1,j)
                                                        + pi-1pkpj
                                     6     if q < m[i,j]
                                     7     then m[i,j] ← q
                                     8 return m[i,j]
Laura Cruz Reyes       Programación Dinámica
Complejidad del algoritmo
        recursivo-memorizado

       Existen solamente n(n-1)/2 problemas diferentes
       (cadenas), y el algoritmo recursivo-memorizado
       resuelve cada problema exactamente una vez, por
       lo tanto:
                    T(n)= θ(n2)


       Sin embargo, la versión pura es más eficiente por
       un factor constante debido que no hay sobrecarga
       inherente a la recursión.

Laura Cruz Reyes        Programación Dinámica
Problema del cambio de
       moneda
Problema del cambio de
                  moneda

    Dada una divisa (unidad monetaria de un
    país) con monedas de u1, u2,…,un, y C
    unidades que deben ser devueltas a un
    cliente.

    Se busca el número mínimo de monedas
    que se necesitan para devolver las C
    unidades de cambio.

Laura Cruz Reyes   Programación Dinámica
m=6        C=10      m=1

                                                    m=2

                             u=1              u=5                u=10
                      m=5    C=9          m=1 C=5                C=0
                               …
                             u=1             u=5
                             C=8             C=0
                      m=4
                                …
                             u=1
                             C=7
                      m=3
                             u=1
                                …
                                                     Árbol de problemas
                      m=2    C=6
                               …

                             u=1
                      m=5    C=5     m=1

                       u=1          u=5
                   m=4 C=4          C=0
                                                           C=10
                       u=1                                 U={1,5, 10, 15, 21,25}
                   m=3 C=3


                       u=1
                   m=2 C=2                                      m=1
                       u=1
                                                                S={10}
                   m=1 C=1

Laura Cruz Reyes       u=1                Programación Dinámica
                       C=0
m=3 C = 7   m=3

                                 u=1                            u=5

                         m=2     C=6   m=2                      C=2   m=2
                   u=1                   u=5                    u=1
                m=5 C=5 m=                   C=1   m=1           C=1 m=1
                        1
          u=1              u=5           u=1                    u=1

                          C=0                C=0                C=0
          C=4    m=4

          u=1
          C=3    m=3
                                                         Árbol de problemas
          u=1
          C=2
                 m=2
          u=1

                 m=1
                                                               C=7
          C=1
                                                               U={1,5, 10, 15, 21,25}
           u=1
          C=0



                                                                m=3
                                                                S={1,1,5}

Laura Cruz Reyes                              Programación Dinámica
Valor de una solución óptima
      Sea m[C] un arreglo que almacena el menor número
      de monedas para devolver la cantidad C usando una
      moneda óptima u ∈ U. Por lo tanto, la tabla se llena
      con la siguiente regla:

           Si C = 0 entonces m[C] = 0, quiere decir que no se requiere
              ninguna moneda para devolver una cantidad igual a cero.

           Si C > 0 entonces m[C] = min(1+ m[C-u]), ∀ u ∈ U, quiere
              decir que se utilizará una moneda óptima de denominación
              u más las monedas requeridas para devolver una cantidad
              igual a C-u.




Laura Cruz Reyes            Programación Dinámica
Complejidad del algoritmo

       El tiempo de ejecución depende del número de
       monedad con distintos valores n y de la cantidad
       de cambio que queremos devolver C, por lo tanto:


                   T(n)= nC




Laura Cruz Reyes       Programación Dinámica
Algoritmo para cambio de
                monedas

    Consultar el libro de Mark Allen
    (pag. 201)




Laura Cruz Reyes   Programación Dinámica
Problema de la
 mochila 0-1
El Problema de la Mochila 0-1
 Se tienen n objetos, cada uno con un peso pi, y una
 mochila con una capacidad C. Si se mete un objeto i en la
 mochila, entonces se consigue un beneficio bi. El objetivo
 es llenar la mochila de manera que se maximice el
 beneficio total y no se exceda la capacidad de la mochila.

 Para la asignación de los objetos se utiliza un vector X de n
 elementos xi, caracterizado porque cada elemento xi sólo
 puede tomar los valores cero o uno para indicar si el objeto
 se mete o no a la mochila.



Laura Cruz Reyes       Programación Dinámica
El Problema de la Mochila 0-1
      Dada una mochila con capacidad C y un conjunto de
      n objetos; cada objeto i, 1≤ i≤n, tiene un peso pi > 0 y
      un beneficio b i > 0.

      Se busca una asignación en X (xi=1 si el objeto se
      lleva, xi=0 en caso contrario) de objetos a la mochila
      que obtenga el máximo beneficio:
                                            n
                          maximizar ∑ bixi,
                                           i=1
      y satisfaga la condición:
                   n

                   ∑ pi xi ≤ C
                   i=1
Laura Cruz Reyes                 Programación Dinámica
El Problema de la Mochila 0-1
 Un caso particular del problema de la mochila 0-1 es:
       n=3,
       C=15,
       (b1,b2,b3) = (38, 40, 24) y
       (p1,p2,p3) = (9,6,5).

 Una posible solución es:
       (x1,x2,x3) = (0,1,1), con beneficio 64.

 Para este caso, la solución óptima es:
       (x1,x2,x3) = (1,1,0) con beneficio 78.

Laura Cruz Reyes         Programación Dinámica
Valor de una solución óptima

      Sea m[i,j] un arreglo que almacena el valor máximo de
      los objetos que podemos transportar si el límite de peso
      es j, con 0≤j ≤ C, y si solamente incluimos los objetos
      numerados desde 1 hasta el i, con 1≤i ≤n. Por tanto, la
      solución se puede encontrar en m[n,C]. La tabla se llena
                                          n,C
      con la regla:
           Si j=0 entonces m[i,0] = 0, quiere decir que ningún objeto se
              puede acomodar en una mochila de capacidad cero.

           Si j>0 entonces m[i,j] = max (m[i-1, j], m[i-1, j-pi] + bi), quiere
              decir que se evalúa la opción de no añadir el objeto i a la
              carga contra la opción de incluirlo, lo cual tiene como efecto
              incrementar el valor de la carga en bi, y reducir la capacidad
              disponible en pi.

Laura Cruz Reyes              Programación Dinámica
Valor de una solución óptima


      capacidad de la mochila C=11
      Peso de los objetos P={1,2,5,6,7}
      Beneficio de los objetos B={1,6,18,22,28}
             0     1   2   3      4     5     6        7    8    9    10   11

      1      0     1   1   1      1     1     1        1    1    1    1    1

      2      0     1   6   7      7     7     7        7    7    7    7    7

      3      0     1   6   7      7     18    19       24   25   25   25   25

      4      0     1   6   7      7     18    22       24   28   29   29   40

      5      0     1   6   7      7     18    22       28   29   34   35   40


Laura Cruz Reyes               Programación Dinámica
Complejidad del algoritmo

       El tiempo de ejecución depende del número de
       objetos por acomodar n y de la capacidad de la
       mochila C, por lo tanto:


                   T(n)= nC




Laura Cruz Reyes       Programación Dinámica
Algoritmo para la mochila 0-1

    Consultar el libro de Brassard et.al
    (pag. 201)




Laura Cruz Reyes   Programación Dinámica
El Problema de la Mochila 0-1
           con repetición
Una variante del problema de la mochila 0-1 admite
objetos repetidos en la mochila. Para representar el
número de objetos repetidos se utiliza el vector r.

     n=5,
     C=17,
     (b1,b2,b3,b4,b5) = (4,5,10,11,13)
     (p1,p2,p3,p4,p5) = (3,4,7,8,9).

La solución óptima es:
   (x1,x2,x3,x4,x5) = (1,0,1,0,0) y
   (r1,r2,r3,r4,r5) = (1,0,2,0,0), con beneficio 24.
Laura Cruz Reyes           Programación Dinámica
Problema de la
subsecuencia común
     más larga
El problema de la subsecuencia
             común más larga

    Dada una secuencia X = ‹x1,x2,...xm›, otra
    secuencia Z=‹z1,z2,...zk› es una subsecuencia of X
    si existe una secuencia de índices ‹i1,i2,...ik› de X
    que incrementa estrictamente tal que para todo
    j=1,2,...,k, we have xij = zj.

    Por ejemplo, Z=<B,C,D,B> es una subsecuencia
    de X=<A,B,C,B,D,A,B> con la correspondiente
    secuencia de índices <2,3,5,7>.

Laura Cruz Reyes       Programación Dinámica
Algoritmo para subsecuencia
          común más larga

    Consultar el libro de Cormen et. al
    (pag. 353)




Laura Cruz Reyes   Programación Dinámica
Bibliografía
       Thomas H. Cormen, Charles E. Leiserson, Ronald L.
       Rivest. Introduction to Algorithms. MIT Press, 1990.

       Sara Basse, Allen Van Gelder. Algoritmos
       Computacionales: Introducción al análisis y diseño. 3ª.
       edición. Addison Wesley, 2002.

       Mark Allen Weiss. Estructura de Datos en Java.
       Addison Weasley, 2000.

       Gilles Brassard y Paul Bratley. Fundamentos de
       Algoritmia. Prentice Hall, 1997.

Laura Cruz Reyes         Programación Dinámica

More Related Content

What's hot

Closest pair problems (Divide and Conquer)
Closest pair problems (Divide and Conquer)Closest pair problems (Divide and Conquer)
Closest pair problems (Divide and Conquer)Gem WeBlog
 
283561985 manual-mobile-topographer
283561985 manual-mobile-topographer283561985 manual-mobile-topographer
283561985 manual-mobile-topographerkarlsam84
 
Arboles de Busqueda Balanceada (AVL)
Arboles de Busqueda Balanceada (AVL)Arboles de Busqueda Balanceada (AVL)
Arboles de Busqueda Balanceada (AVL)warrionet
 
Programación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoProgramación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoAlvaro Enrique Ruano
 
Estrategias prueba de software
Estrategias prueba de softwareEstrategias prueba de software
Estrategias prueba de softwareCentro Líbano
 
Control de Calidad del Software
Control de Calidad del SoftwareControl de Calidad del Software
Control de Calidad del SoftwareTonymx
 
Metricas Ingenieria De Software
Metricas Ingenieria De SoftwareMetricas Ingenieria De Software
Metricas Ingenieria De SoftwareRicardo
 
Programación 3: caminos más cortos con un solo origen
Programación 3: caminos más cortos con un solo origenProgramación 3: caminos más cortos con un solo origen
Programación 3: caminos más cortos con un solo origenAngel Vázquez Patiño
 

What's hot (8)

Closest pair problems (Divide and Conquer)
Closest pair problems (Divide and Conquer)Closest pair problems (Divide and Conquer)
Closest pair problems (Divide and Conquer)
 
283561985 manual-mobile-topographer
283561985 manual-mobile-topographer283561985 manual-mobile-topographer
283561985 manual-mobile-topographer
 
Arboles de Busqueda Balanceada (AVL)
Arboles de Busqueda Balanceada (AVL)Arboles de Busqueda Balanceada (AVL)
Arboles de Busqueda Balanceada (AVL)
 
Programación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismoProgramación Orientada a Objetos - herencia y polimorfismo
Programación Orientada a Objetos - herencia y polimorfismo
 
Estrategias prueba de software
Estrategias prueba de softwareEstrategias prueba de software
Estrategias prueba de software
 
Control de Calidad del Software
Control de Calidad del SoftwareControl de Calidad del Software
Control de Calidad del Software
 
Metricas Ingenieria De Software
Metricas Ingenieria De SoftwareMetricas Ingenieria De Software
Metricas Ingenieria De Software
 
Programación 3: caminos más cortos con un solo origen
Programación 3: caminos más cortos con un solo origenProgramación 3: caminos más cortos con un solo origen
Programación 3: caminos más cortos con un solo origen
 

Viewers also liked

Programación Dinámica
Programación DinámicaProgramación Dinámica
Programación Dinámicaliisab04
 
Programacion dinamica
Programacion dinamicaProgramacion dinamica
Programacion dinamicaNairolys Arsz
 
Introduction_modern_fortran_short
Introduction_modern_fortran_shortIntroduction_modern_fortran_short
Introduction_modern_fortran_shortNils van Velzen
 
Ejemplo de Programación Dinámica
Ejemplo de Programación Dinámica Ejemplo de Programación Dinámica
Ejemplo de Programación Dinámica Johanna Castilla
 
جميع الورش الفنية - التقرير النهائي لورش البناء و التشييد بجسر السويس style 2
جميع الورش الفنية - التقرير النهائي لورش البناء و التشييد بجسر السويس style 2جميع الورش الفنية - التقرير النهائي لورش البناء و التشييد بجسر السويس style 2
جميع الورش الفنية - التقرير النهائي لورش البناء و التشييد بجسر السويس style 2Ahmed Gamal
 
اعمال الحدادة المسلحة
اعمال الحدادة المسلحةاعمال الحدادة المسلحة
اعمال الحدادة المسلحةAhmed Gamal
 
Total workshop - جميع الورش الفنية الهندسية
Total workshop - جميع الورش الفنية الهندسيةTotal workshop - جميع الورش الفنية الهندسية
Total workshop - جميع الورش الفنية الهندسيةAhmed Gamal
 
Types of supports in structures
Types of supports in structuresTypes of supports in structures
Types of supports in structuresAhmed Gamal
 
El problema del agente viajero resuelto por fuerza, programación dinámica y v...
El problema del agente viajero resuelto por fuerza, programación dinámica y v...El problema del agente viajero resuelto por fuerza, programación dinámica y v...
El problema del agente viajero resuelto por fuerza, programación dinámica y v...Luis Alfredo Moctezuma Pascual
 
التقرير النهائي للورش الفنية : ورش البناء و التشييد
التقرير النهائي للورش الفنية : ورش البناء و التشييد التقرير النهائي للورش الفنية : ورش البناء و التشييد
التقرير النهائي للورش الفنية : ورش البناء و التشييد Ahmed Gamal
 
Desarrollo fisico de 0 3 años
Desarrollo fisico de 0 3 años Desarrollo fisico de 0 3 años
Desarrollo fisico de 0 3 años Nicole Manuel R
 
اعمال التنفيذ المقاولون العرب - حدادة و نجارة مسلحة
اعمال التنفيذ المقاولون العرب - حدادة و نجارة مسلحةاعمال التنفيذ المقاولون العرب - حدادة و نجارة مسلحة
اعمال التنفيذ المقاولون العرب - حدادة و نجارة مسلحةAhmed Gamal
 
Exposiciones De Lenguaje
Exposiciones De LenguajeExposiciones De Lenguaje
Exposiciones De Lenguajeguest87abd0
 
ENFERMEDADES MÁS COMUNES
ENFERMEDADES MÁS COMUNESENFERMEDADES MÁS COMUNES
ENFERMEDADES MÁS COMUNESStefany Cacho
 
Problema de asignación de programación dinámica
Problema de asignación de programación dinámicaProblema de asignación de programación dinámica
Problema de asignación de programación dinámicaLuis La Rosa Cavalcanti
 
Desa infa cap 4
Desa infa cap 4Desa infa cap 4
Desa infa cap 4ana pj
 
Evaluación del Educando con Dificultades de Aprendizaje
Evaluación del Educando con Dificultades de AprendizajeEvaluación del Educando con Dificultades de Aprendizaje
Evaluación del Educando con Dificultades de AprendizajeKatty2006
 

Viewers also liked (20)

Programación Dinámica
Programación DinámicaProgramación Dinámica
Programación Dinámica
 
Programacion dinamica
Programacion dinamicaProgramacion dinamica
Programacion dinamica
 
Introduction_modern_fortran_short
Introduction_modern_fortran_shortIntroduction_modern_fortran_short
Introduction_modern_fortran_short
 
Ejemplo de Programación Dinámica
Ejemplo de Programación Dinámica Ejemplo de Programación Dinámica
Ejemplo de Programación Dinámica
 
جميع الورش الفنية - التقرير النهائي لورش البناء و التشييد بجسر السويس style 2
جميع الورش الفنية - التقرير النهائي لورش البناء و التشييد بجسر السويس style 2جميع الورش الفنية - التقرير النهائي لورش البناء و التشييد بجسر السويس style 2
جميع الورش الفنية - التقرير النهائي لورش البناء و التشييد بجسر السويس style 2
 
اعمال الحدادة المسلحة
اعمال الحدادة المسلحةاعمال الحدادة المسلحة
اعمال الحدادة المسلحة
 
Total workshop - جميع الورش الفنية الهندسية
Total workshop - جميع الورش الفنية الهندسيةTotal workshop - جميع الورش الفنية الهندسية
Total workshop - جميع الورش الفنية الهندسية
 
Types of supports in structures
Types of supports in structuresTypes of supports in structures
Types of supports in structures
 
El problema del agente viajero resuelto por fuerza, programación dinámica y v...
El problema del agente viajero resuelto por fuerza, programación dinámica y v...El problema del agente viajero resuelto por fuerza, programación dinámica y v...
El problema del agente viajero resuelto por fuerza, programación dinámica y v...
 
التقرير النهائي للورش الفنية : ورش البناء و التشييد
التقرير النهائي للورش الفنية : ورش البناء و التشييد التقرير النهائي للورش الفنية : ورش البناء و التشييد
التقرير النهائي للورش الفنية : ورش البناء و التشييد
 
LEIMIFER
LEIMIFERLEIMIFER
LEIMIFER
 
Desarrollo fisico de 0 3 años
Desarrollo fisico de 0 3 años Desarrollo fisico de 0 3 años
Desarrollo fisico de 0 3 años
 
Planeación NTICS
Planeación NTICSPlaneación NTICS
Planeación NTICS
 
اعمال التنفيذ المقاولون العرب - حدادة و نجارة مسلحة
اعمال التنفيذ المقاولون العرب - حدادة و نجارة مسلحةاعمال التنفيذ المقاولون العرب - حدادة و نجارة مسلحة
اعمال التنفيذ المقاولون العرب - حدادة و نجارة مسلحة
 
Exposiciones De Lenguaje
Exposiciones De LenguajeExposiciones De Lenguaje
Exposiciones De Lenguaje
 
ENFERMEDADES MÁS COMUNES
ENFERMEDADES MÁS COMUNESENFERMEDADES MÁS COMUNES
ENFERMEDADES MÁS COMUNES
 
Problema de asignación de programación dinámica
Problema de asignación de programación dinámicaProblema de asignación de programación dinámica
Problema de asignación de programación dinámica
 
Primeros pasos-0-3-años
Primeros pasos-0-3-añosPrimeros pasos-0-3-años
Primeros pasos-0-3-años
 
Desa infa cap 4
Desa infa cap 4Desa infa cap 4
Desa infa cap 4
 
Evaluación del Educando con Dificultades de Aprendizaje
Evaluación del Educando con Dificultades de AprendizajeEvaluación del Educando con Dificultades de Aprendizaje
Evaluación del Educando con Dificultades de Aprendizaje
 

Similar to Algoritmos c5-diap

Repaso Ecuaciones lineales
Repaso Ecuaciones linealesRepaso Ecuaciones lineales
Repaso Ecuaciones linealesudearrobavirtual
 
Ecuaciones y desigualdades.
Ecuaciones y desigualdades. Ecuaciones y desigualdades.
Ecuaciones y desigualdades. Roberth Loaiza
 
UTPL-MATEMÁTICAS PARA CIENCIAS BIOLÓGICAS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2...
UTPL-MATEMÁTICAS PARA CIENCIAS BIOLÓGICAS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2...UTPL-MATEMÁTICAS PARA CIENCIAS BIOLÓGICAS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2...
UTPL-MATEMÁTICAS PARA CIENCIAS BIOLÓGICAS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2...Videoconferencias UTPL
 
Lec int inecuaciones lineales
Lec int inecuaciones linealesLec int inecuaciones lineales
Lec int inecuaciones lineales1022miguelangel
 
Guía Ecuaciones Lineales y Cuadráticas
Guía Ecuaciones Lineales y CuadráticasGuía Ecuaciones Lineales y Cuadráticas
Guía Ecuaciones Lineales y Cuadráticasmatbasuts1
 
Ecuaciones 3 x3 determinantes
Ecuaciones 3 x3   determinantesEcuaciones 3 x3   determinantes
Ecuaciones 3 x3 determinantesJorge Ortiz
 
Inecuaciones de primer grado
Inecuaciones de primer gradoInecuaciones de primer grado
Inecuaciones de primer gradoKarlos Rivero
 
Ecuaciones cuadraticas Victor Barrile
Ecuaciones cuadraticas Victor BarrileEcuaciones cuadraticas Victor Barrile
Ecuaciones cuadraticas Victor BarrileVíctor Barrile
 
Taller N°5 Metodos Iterativos Algebra L Feb Jun2009
Taller N°5 Metodos Iterativos Algebra L Feb Jun2009Taller N°5 Metodos Iterativos Algebra L Feb Jun2009
Taller N°5 Metodos Iterativos Algebra L Feb Jun2009EFRAIN VASQUEZ MILLAN
 
Álgebra Completando al Cuadrado - Fórmula Cuadrática
Álgebra Completando al Cuadrado -  Fórmula CuadráticaÁlgebra Completando al Cuadrado -  Fórmula Cuadrática
Álgebra Completando al Cuadrado - Fórmula CuadráticaComputer Learning Centers
 
primer parcial de algebra del cbc ciencias economicas
primer parcial de algebra del cbc ciencias economicasprimer parcial de algebra del cbc ciencias economicas
primer parcial de algebra del cbc ciencias economicasapuntescbc
 
10 ecuaciones-de-primer-grado-de-secundaria
10 ecuaciones-de-primer-grado-de-secundaria10 ecuaciones-de-primer-grado-de-secundaria
10 ecuaciones-de-primer-grado-de-secundariaalbertocusihuaman
 
Exponenciales Y Logartimos
Exponenciales Y LogartimosExponenciales Y Logartimos
Exponenciales Y LogartimosMauricio Loo
 
Exponenciales Y Logartimos 42
Exponenciales Y Logartimos 42Exponenciales Y Logartimos 42
Exponenciales Y Logartimos 42Mauricio Loo
 

Similar to Algoritmos c5-diap (20)

Repaso Ecuaciones lineales
Repaso Ecuaciones linealesRepaso Ecuaciones lineales
Repaso Ecuaciones lineales
 
Expresiones algebraicas
Expresiones algebraicasExpresiones algebraicas
Expresiones algebraicas
 
Ecuaciones y desigualdades.
Ecuaciones y desigualdades. Ecuaciones y desigualdades.
Ecuaciones y desigualdades.
 
UTPL-MATEMÁTICAS PARA CIENCIAS BIOLÓGICAS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2...
UTPL-MATEMÁTICAS PARA CIENCIAS BIOLÓGICAS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2...UTPL-MATEMÁTICAS PARA CIENCIAS BIOLÓGICAS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2...
UTPL-MATEMÁTICAS PARA CIENCIAS BIOLÓGICAS-II-BIMESTRE-(OCTUBRE 2011-FEBRERO 2...
 
Lec int inecuaciones lineales
Lec int inecuaciones linealesLec int inecuaciones lineales
Lec int inecuaciones lineales
 
Guía Ecuaciones Lineales y Cuadráticas
Guía Ecuaciones Lineales y CuadráticasGuía Ecuaciones Lineales y Cuadráticas
Guía Ecuaciones Lineales y Cuadráticas
 
Ecuaciones 3 x3 determinantes
Ecuaciones 3 x3   determinantesEcuaciones 3 x3   determinantes
Ecuaciones 3 x3 determinantes
 
Inecuaciones de primer grado
Inecuaciones de primer gradoInecuaciones de primer grado
Inecuaciones de primer grado
 
áLgebra
áLgebraáLgebra
áLgebra
 
Guía de Álgebra I- USACH
Guía de Álgebra I- USACHGuía de Álgebra I- USACH
Guía de Álgebra I- USACH
 
Ecuaciones cuadraticas Victor Barrile
Ecuaciones cuadraticas Victor BarrileEcuaciones cuadraticas Victor Barrile
Ecuaciones cuadraticas Victor Barrile
 
Optimización. Métodos numéricos
Optimización. Métodos numéricosOptimización. Métodos numéricos
Optimización. Métodos numéricos
 
Hector franco presentación
Hector franco presentaciónHector franco presentación
Hector franco presentación
 
Taller N°5 Metodos Iterativos Algebra L Feb Jun2009
Taller N°5 Metodos Iterativos Algebra L Feb Jun2009Taller N°5 Metodos Iterativos Algebra L Feb Jun2009
Taller N°5 Metodos Iterativos Algebra L Feb Jun2009
 
Álgebra Completando al Cuadrado - Fórmula Cuadrática
Álgebra Completando al Cuadrado -  Fórmula CuadráticaÁlgebra Completando al Cuadrado -  Fórmula Cuadrática
Álgebra Completando al Cuadrado - Fórmula Cuadrática
 
primer parcial de algebra del cbc ciencias economicas
primer parcial de algebra del cbc ciencias economicasprimer parcial de algebra del cbc ciencias economicas
primer parcial de algebra del cbc ciencias economicas
 
10 ecuaciones-de-primer-grado-de-secundaria
10 ecuaciones-de-primer-grado-de-secundaria10 ecuaciones-de-primer-grado-de-secundaria
10 ecuaciones-de-primer-grado-de-secundaria
 
No lineal
No linealNo lineal
No lineal
 
Exponenciales Y Logartimos
Exponenciales Y LogartimosExponenciales Y Logartimos
Exponenciales Y Logartimos
 
Exponenciales Y Logartimos 42
Exponenciales Y Logartimos 42Exponenciales Y Logartimos 42
Exponenciales Y Logartimos 42
 

Recently uploaded

Trabajo de Electricidad y Electrónica grado 10-3
Trabajo de Electricidad y Electrónica grado 10-3Trabajo de Electricidad y Electrónica grado 10-3
Trabajo de Electricidad y Electrónica grado 10-3wwwcuentanuevacom
 
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfPresentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfymiranda2
 
TRABAJO EN GRUPO.pdf tecnología décimo :)
TRABAJO EN GRUPO.pdf tecnología décimo :)TRABAJO EN GRUPO.pdf tecnología décimo :)
TRABAJO EN GRUPO.pdf tecnología décimo :)edepjuanorozco
 
DESARROLLO BLOG Y ANÁLISIS DE ARTEFACTOS
DESARROLLO BLOG Y ANÁLISIS DE ARTEFACTOSDESARROLLO BLOG Y ANÁLISIS DE ARTEFACTOS
DESARROLLO BLOG Y ANÁLISIS DE ARTEFACTOSreinamanuela20
 
Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.marianarodriguezc797
 
Inteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidadInteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidaddanik1023m
 
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfTENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfJoseAlejandroPerezBa
 
Trabajo de La Electricidad y La Electrónica
Trabajo de La Electricidad y La ElectrónicaTrabajo de La Electricidad y La Electrónica
Trabajo de La Electricidad y La ElectrónicaCamilaCordoba30
 
Matriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxMatriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxPaolaCarolinaCarvaja
 
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOSPRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOSLincangoKevin
 
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...OLGAMILENAMONTAEZNIO
 
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...RaymondCode
 
Análisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdfAnálisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdfcastrodanna185
 
DESARROLLO DE BLOG DE ANÁLISIS Y ARTEFACTOS TECNOLOGICOS
DESARROLLO DE BLOG DE ANÁLISIS Y ARTEFACTOS TECNOLOGICOSDESARROLLO DE BLOG DE ANÁLISIS Y ARTEFACTOS TECNOLOGICOS
DESARROLLO DE BLOG DE ANÁLISIS Y ARTEFACTOS TECNOLOGICOSreinamanuela20
 
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfActividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfalejandrogomezescoto
 
Los mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfLos mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfodalistar77
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETGermán Küber
 
¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu software
¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu software¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu software
¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu softwareFrancisco Javier Barrena
 

Recently uploaded (20)

Trabajo de Electricidad y Electrónica grado 10-3
Trabajo de Electricidad y Electrónica grado 10-3Trabajo de Electricidad y Electrónica grado 10-3
Trabajo de Electricidad y Electrónica grado 10-3
 
BEDEC Sostenibilidad, novedades 2024 - Laura Silva
BEDEC Sostenibilidad, novedades 2024 - Laura SilvaBEDEC Sostenibilidad, novedades 2024 - Laura Silva
BEDEC Sostenibilidad, novedades 2024 - Laura Silva
 
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdfPresentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
Presentación - Diseño de Algoritmos Paralelos - Grupo 2.pdf
 
TRABAJO EN GRUPO.pdf tecnología décimo :)
TRABAJO EN GRUPO.pdf tecnología décimo :)TRABAJO EN GRUPO.pdf tecnología décimo :)
TRABAJO EN GRUPO.pdf tecnología décimo :)
 
DESARROLLO BLOG Y ANÁLISIS DE ARTEFACTOS
DESARROLLO BLOG Y ANÁLISIS DE ARTEFACTOSDESARROLLO BLOG Y ANÁLISIS DE ARTEFACTOS
DESARROLLO BLOG Y ANÁLISIS DE ARTEFACTOS
 
Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.Tecnológia 2024.docx.
Tecnológia 2024.docx.Tecnológia 2024.docx.
 
Inteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidadInteligencia artificial dentro de la contabilidad
Inteligencia artificial dentro de la contabilidad
 
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdfTENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
TENDENCIAS DE IA Explorando el futuro de la tecnologia.pdf
 
Trabajo de La Electricidad y La Electrónica
Trabajo de La Electricidad y La ElectrónicaTrabajo de La Electricidad y La Electrónica
Trabajo de La Electricidad y La Electrónica
 
Matriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docxMatriz de integración de tecnologías- Paola Carvajal.docx
Matriz de integración de tecnologías- Paola Carvajal.docx
 
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOSPRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
PRESENTACION DEL TEMA LOS MEJORES SIMULADORES DE CIRCUITOS ELCTRONICOS
 
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
Actividad 1-PRESENTACIÓN ANIMADA.pptxPreservación y conservación de los docum...
 
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
Actividad 14: Diseño de Algoritmos Paralelos Actividad 14: Diseño de Algoritm...
 
Análisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdfAnálisis de artefactos tecnologicos .pdf
Análisis de artefactos tecnologicos .pdf
 
DESARROLLO DE BLOG DE ANÁLISIS Y ARTEFACTOS TECNOLOGICOS
DESARROLLO DE BLOG DE ANÁLISIS Y ARTEFACTOS TECNOLOGICOSDESARROLLO DE BLOG DE ANÁLISIS Y ARTEFACTOS TECNOLOGICOS
DESARROLLO DE BLOG DE ANÁLISIS Y ARTEFACTOS TECNOLOGICOS
 
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdfActividad 14_ Diseño de Algoritmos Paralelos.pdf
Actividad 14_ Diseño de Algoritmos Paralelos.pdf
 
BEDEC Proyecto y obra , novedades 2024 - Xavier Folch
BEDEC Proyecto y obra , novedades 2024 - Xavier FolchBEDEC Proyecto y obra , novedades 2024 - Xavier Folch
BEDEC Proyecto y obra , novedades 2024 - Xavier Folch
 
Los mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdfLos mejores simuladores de circuitos electrónicos.pdf
Los mejores simuladores de circuitos electrónicos.pdf
 
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NETDe Código a Ejecución: El Papel Fundamental del MSIL en .NET
De Código a Ejecución: El Papel Fundamental del MSIL en .NET
 
¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu software
¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu software¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu software
¡Cookiegeddon! Bye a las cookies de terceros y cómo afectará a tu software
 

Algoritmos c5-diap

  • 1. Programación Dinámica Dra. Laura Cruz Reyes Instituto Tecnológico de Ciudad Madero México
  • 2. Programación dinámica vs. divide y vencerás Divide y vencerás: Divide el problema en suproblemas. Integra las soluciones parciales para lograr una solución final. Repite procesamiento en subproblemas idénticos Programación dinámica: Divide el problema en suproblemas. Integra las soluciones parciales para lograr una solución final. Durante el proceso de división-integración guarda la solución de los subproblemas encontrados para evitar resolverlos cuando los vuelva a encontrar. Laura Cruz Reyes Programación Dinámica
  • 3. Divide y vencerás • Si un problema es demasiado grande para resolverlo de una vez, se descompone en varias partes más fáciles de resolver. • Más formalmente, dado un problema a resolver planteado en términos de una entrada de tamaño n, la técnica de divide y vencerás parte la entrada en k subproblemas, 1< k< n. • Estos subproblemas se resuelven independientemente y después se combinan sus soluciones parciales para obtener la solución del problema original. Laura Cruz Reyes Programación Dinámica
  • 4. Aplicaciones de divide y vencerás Ordenamiento • Mezcla • Quicksort • Heap Búsqueda • Búsqueda binaria Laura Cruz Reyes Programación Dinámica
  • 5. Programación dinámica Bajo el principio de divide y vencerás se divide un problema en varios problemas más pequeños que se pueden resolver independientemente. En la programación dinámica, aplica cuando los subproblemas no son independienes. Se resuelven todos una sóla vez y se almacenan las respuestas para dar solución a problemas mayores. Laura Cruz Reyes Programación Dinámica
  • 6. Programación dinámica Un problema puede ser resuelto por programación dinámica si cumple el principio de Optimalidad: Cualquier decisión que suponga encontrar la mejor forma de resolver un pequeño subproblema es también válida cuando el subproblema pasa a ser una parte de un problema mayor Laura Cruz Reyes Programación Dinámica
  • 7. Programación dinámica Dos dificultades que pueden surgir en la programación dinámica son las siguientes: Puede que no siempre sea posible combinar las soluciones de dos problemas pequeños para obtener la de uno mayor. El número de subproblemas a resolver puede ser inaceptablemente grande. Laura Cruz Reyes Programación Dinámica
  • 8. Pasos de la programación dinámica El desarrollo de un algoritmo de programación dinámica puede realizarse en 4 pasos. 1. Caracterizar la estructura de una solución óptima. 2. Definir una estructura para guardar los elementos de la solución óptima. 3. Definir recursivamente el valor de una solución óptima y su estructura de almacenamiento. 4. Diseñar un algoritmo para obtener la solución óptima y su valor usando abajo-arriba (button-up). 5. Diseñar un algoritmo para extraer la solución óptima a partir de información previamente calculada. Laura Cruz Reyes Programación Dinámica
  • 9. Aplicaciones de la programación dinámica En los siguientes problemas la programación dinámica es más eficaz que la técnica de fuerza bruta. Con esta última, el número de posibles soluciones a evaluar es exponencial. Problema del orden de multiplicación de matrices Problema del cambio de moneda Problema de la mochila 0-1 Problema de la subsecuencia común más larga Laura Cruz Reyes Programación Dinámica
  • 10. Problema del orden de multiplicación de matrices
  • 11. Multiplicación de matrices Algoritmo multiplicaciónMatrices Entradas: Matrices A y B, y enteros m, n, y p, que indican que A es una matriz de m × n y B es una matriz de n × p Salidas: Matriz C, una matriz de m × p. C se pasa al algoritmo, el cual la llena. multMat(A,B,C,m,n,p) 1. for (i =0; i<m; i++) 2. for (j =0; j<p; j++) 3. cij = 0 4. for (k =0; k<n; k++) 5. cij += aik bkj Laura Cruz Reyes Programación Dinámica
  • 12. Número de multiplicaciones Si se desea obtener la evaluación del producto de n matrices A = A1 x A2 x.....x An Donde Ai es una matriz con ri-1 renglones y ri columnas. El orden de multiplicación de las matrices afecta al número total de las operaciones requeridas para evaluar A. Laura Cruz Reyes Programación Dinámica
  • 13. Número de multiplicaciones En el algoritmo clásico de multiplicación de una matriz m x n por una matriz n x p, el número de multiplicaciones es mnp. Sea el siguiente producto: A= A1 x A2 x A3 x A4 [10 x 20] [20 x 50] [50 x 1] [1 x 100] El orden de evaluación A1 x (A2 x (A3 x A4)) requiere 125,000 operaciones. El orden de evaluación (A1 x (A2 x A3)) x A4 requiere 2200 operaciones. Laura Cruz Reyes Programación Dinámica
  • 14. Número de multiplicaciones A= A1 x A2 x A3 x A4 [10 x 20] [20 x 50] [50 x 1] [1 x 100] El orden de evaluación (A1 x (A2 x A3)) x A4 requiere 2200 operaciones (A2 x A3) con dimensiones [20 x 50] [50 x 1] respectivamente Requiere 20*50*1=1000 multiplicaciones Genera la matriz A2A3 con dimensiones [20 x 1] (A1 x A2A3) con dimensiones [10 x 20] [20 x 1] respectivamente Requiere 10*20*1=200 multiplicaciones Genera la matriz A1A2A3 con dimensiones [10 x 1] (A1A2A3 x A4) con dimensiones [10 x 1] [1 x 100] respectivamente Requiere 10*1*100=1000 multiplicaciones Genera la matriz A1A2A3A4 con dimensiones [10 x 100] Total de multiplicaciones = 1000+200+1000=2200 Laura Cruz Reyes Programación Dinámica
  • 15. Problema del orden de multiplicación de matrices Dada una cadena ‹A1, A2,...An› de n matrices, donde i=1,2,...,n, Ai tiene dimensiones ri-1 x ri . Se busca poner paréntesis completamente al producto A1, A2,...An de manera que minimice el número de operaciones escalares. Laura Cruz Reyes Programación Dinámica
  • 16. Solución óptima y su valor Sea el siguiente producto: A= A1 x A2 x A3 x A4 [10 x 20] [20 x 50] [50 x 1] [1 x 100] Solución óptima: colocación de paréntesis con menor costo ( ((A1(A2A3)) ((A4A5) A6)) Valor de la solución óptima: mínimo número de multiplicaciones 2200 multiplicaciones Producto obtenido con el menor número de multiplicaciones A=( ((A1(A2A3)) ((A4A5) A6)) Laura Cruz Reyes Programación Dinámica
  • 17. Paso 1: Caracterizar la estructura de una solución óptima División del problema en subproblemas: Para colocar paréntesis, dada una cadena de matrices Ai Ai+1 … Aj se divide el producto en términos de k, con i ≤ k< j, quedando dos subcadenas: (A1 … Ak) y (Ak+1… An ) 1..4 k=1 k=2 k=3 1..1 2..4 1..2 3..4 1..3 4..4 k=2 k=3 k=1 k=3 k=1 k=2 2..2 3..4 2..3 4..4 1..1 2..2 3..3 4..4 1..1 2..3 1..2 3..3 3..3 4..4 2..2 3..3 2..2 3..3 1..1 2..2 k=3 k=2 k=2 k=1 La estructura debe permitir generar soluciones alternas, entre ellas la óptima Laura Cruz Reyes Programación Dinámica
  • 18. Paso 1: Caracterizar la estructura de una solución óptima 1..4 k=1 k=2 k=3 1..1 2..4 1..2 3..4 1..3 4..4 k=2 k=3 k=1 k=3 k=1 k=2 2..2 3..4 2..3 4..4 1..1 2..2 3..3 4..4 1..1 2..3 1..2 3..3 3..3 4..4 2..2 3..3 2..2 3..3 1..1 2..2 k=3 k=2 k=2 k=1 A1 x A2 x A3 x A4 k=3 (A1 x A2 x A3) x (A4 ) k=1 ((A1 ) x (A2 x A3)) x (A4 ) k=2 ((A1 ) x ((A2 ) x (A3 ))) x (A4 ) Laura Cruz Reyes Programación Dinámica
  • 19. Paso 2: Definir una estructura para guardar los elementos de la solución óptima Pare construir la solución óptima, se define una matriz s[i,j], la cual contendrá el valor de k que logra una colocación óptima de paréntesis. 1..4 k=1 k=2 k=3 1..1 2..4 1..2 3..4 1..3 4..4 k=1 k=2 4..4 1..1 2..3 1..2 3..3 s[1,4]=k_óptima=3 ⇒ (A1 x A2 x A3) x (A4 ); s[1,3]=k_óptima=1 ⇒ ((A1 ) x (A2 x A3)) x (A4 ); 2..2 3..3 s[2,3]=k_óptima=2 ⇒ ((A1 ) x ((A2 ) x (A3 ))) x (A4 ); k=2 Laura Cruz Reyes Programación Dinámica
  • 20. Paso 3: Definir recursivamente el valor de una solución óptima Para calcular el número de multiplicaciones de una solución, se define un arreglo m[i,j] el cual contendra el costo mínimo de la subcadena Ai … Aj usando el punto de corte óptimo k: 1..4 Ejemplo: Si k=2, m[1,4] = m[1,2]+m[3,4]+r0r2r4 k=2 1..2 3..4 Ejemplo: Si k=3, m[1,4] = m[1,3]+m[4,4]+r0r3r4 1..4 k=3 1..3 4..4 Laura Cruz Reyes Programación Dinámica
  • 21. Paso 3: Definir recursivamente el valor de una solución óptima Sea m[i,j] un arreglo que almacena el costo mínimo de la subcadena Ai … Aj usando el punto de corte óptimo k. Por lo tanto, la tabla se llena con la siguiente regla: Si i == j entonces m[i,j] = 0, quiere decir que la cadena es de una sola matriz así que no requiere de multiplicaciones escalares. Si i < j entonces m[i,j] = min(m[i,k]+ m[k+1,j] +ri-1rkrj), i≤k<j • El término m[i,k] es el costo mínimo de evaluar A′ = Ai x Ai+1 x...x Ak • El término m[k+1,j] es el costo mínimo de evaluar A′′ = Ak + 1 x Ak+2 x...x Aj • El tercer término es el costo de multiplicar A′ x A′′ . Laura Cruz Reyes Programación Dinámica
  • 22. Paso 4: Diseñar un algoritmo para obtener la solución óptima y su valor Tamaño subcadena/ nivel de procesamiento 1 m11= 0 m22= 0 m33= 0 m44= 0 2 m12= 10,000 m23= 1000 m34= 5000 3 m13= 1200 m24= 3000 4 m14= 2200 1..4 Arriba (up) K=1 K=2 K=3 1..1 2..4 1..2 3..4 1..3 4..4 K=2 K=3 K=1 K=3 K=1 K=2 2..2 3..4 2..3 4..4 1..1 2..2 3..3 4..4 1..1 2..3 1..2 3..3 3..3 4..4 2..2 3..3 2..2 3..3 1..1 2..2 K=3 K=2 K=2 K=1 Abajo (button) Laura Cruz Reyes Programación Dinámica
  • 23. Paso 4: Diseñar un algoritmo para obtener la solución óptima y su valor Valor de solución óptima: Solución óptima: Matriz de costos mínimos Matriz de cortes óptimos k m[i,j] s[i,j] 0 1 0 2 0 3 0 Ta ma ño 4 1 Laura Cruz Reyes Programación Dinámica
  • 24. Paso 4: Diseñar un algoritmo para obtener la solución óptima y su valor Valor de solución óptima: Solución óptima: Matriz de costos mínimos Matriz de cortes óptimos k m[i,j] s[i,j] 0 10000 1 1 0 1000 2 2 0 5000 Ta 3 3 0 ma ño Ta 2 ma ño 4 1 Laura Cruz Reyes Programación Dinámica
  • 25. Paso 4: Diseñar un algoritmo para obtener la solución óptima y su valor Valor de solución óptima: Solución óptima: Matriz de costos mínimos Matriz de cortes óptimos k m[i,j] s[i,j] 0 10000 1200 1 1 1 0 1000 3000 2 2 2 Ta 0 5000 ma ño Ta 3 3 3 0 ma ño Ta 2 ma ño 4 1 Laura Cruz Reyes Programación Dinámica
  • 26. Paso 4: Diseñar un algoritmo para obtener la solución óptima y su valor Valor de solución óptima: Solución óptima: Matriz de costos mínimos Matriz de cortes óptimos k m[i,j] s[i,j] 0 10000 1200 2200 1 1 1 3 Ta ma 0 1000 3000 ño 4 2 2 2 Ta 0 5000 ma ño Ta 3 3 3 0 ma ño Ta 2 ma ño 4 1 Laura Cruz Reyes Programación Dinámica
  • 27. Algoritmo para obtener la solución óptima y su valor Algoritmo ordenCadenaMatrices(R) Entradas:R es el vector de dimensiones de una cadena de n matrices, la matriz i tiene dimensiones ri-1 x ri Salidas: M es la matriz de costos mínimos, expresado en número de multiplicaciones S es la matriz de puntos-de-corte óptimos 1 n ← lenght(R)-1 2 for i = 1 to n do mii= 0 /*costo de cadenas de tamaño 1*/ 3 for l = 2 to n do /*tamaño de la cadena*/ 4 for i=1 to n–l+1 do /*inicio de la cadena*/ 5 j ← i+l–1 /*fin de la cadena*/ 6 mij ← ∞ 7 for k = i to j-1 do /*punto-corte de cadena*/ 8 q ← mik + mk+1,j + ri - 1* rk * rj 9 if q < mij 10 then mij ← q /* valor: mejor costo de cadena*/ 11 sij ← k /*solución: mejor punto-corte de cadena*/ Laura Cruz Reyes Programación Dinámica
  • 28. Complejidad del algoritmo Existen solamente n(n-1)/2 problemas diferentes (cadenas), y la programación dinámica resuelve cada problema exactamente una vez*, por lo tanto T(n)= n2 /2= θ(n2) * No se están contabilizando las evaluaciones de un mismo problema con diferentes valores de k Laura Cruz Reyes Programación Dinámica
  • 29. Complejidad del algoritmo Operación básica: número de subproblemas evaluados* T(n)=subproblemas de tamaño 1+ suproblemas de tamaños 2 a n n n − l +1 j −1 n n − l +1 i + l − 2 T ( n) = n + ∑ ∑ ∑ 1 = ∑ ∑ ∑ 1 = Θ( n ) 3 l =2 i =1 k =1 l =2 i =1 k =1 * Si se están contabilizando las evaluaciones de un mismo problema con diferentes valores de k Laura Cruz Reyes Programación Dinámica
  • 30. Paso 5: Diseñar un algoritmo para extraer la solución óptima Matriz s[i,j] Solución óptima: (A1 x (A2 x A3)) x A4 1 1 1 3 A1…A4: s14=3 (A1x A2xA3)x (A4) 2 2 2 3 3 A1…A3: s13=1 A4…A4: s44=4 (A1)x(A2x A3) (A4) 4 A1…A1: s11=1 A2…A3: s23=2 (A!) (A2)x(A3) A2…A2: s22=2 A3…A3: s33=3 (A2) (A3) Laura Cruz Reyes Programación Dinámica
  • 31. Algoritmo para calcular un producto usando el mínimo número de operaciones Algoritmo multiplicaCadenaMatrices(A,S,i,j) Entradas: A es una cadena de matrices S es una matriz que contiene la solución óptima i,j delimitan una subcadena contenida en A Salidas: producto de la cadena de matrices 1 if j > i 2 then X ← multiplicaCadenaMatrices(A,S,i,sij) 3 Y ← multiplicaCadenaMatrices(A,S,sij+1,j) 4 return multiplicaMatrix(X,Y) 5 else return Ai Laura Cruz Reyes Programación Dinámica
  • 32. Algoritmo para calcular un producto usando el mínimo número de operaciones Algoritmo multiplicaCadenaMatrices(A,S,1,6) if 6>1 X = multiplicaCadenaMatrices(A,S,i=1,s1,6=3) R1 Y = multiplicaCadenaMatrices(A,S,s1,6+1=4,j=6) R3 return (multiplicar (X, Y)) Laura Cruz Reyes Programación Dinámica
  • 33. Algoritmo para calcular un producto usando el mínimo número de operaciones R1 Algoritmo multiplicaCadenaMatrices(A,S,1,3) if 3>1 X = multiplicaCadenaMatrices(A,S,1,1) A1 Y = multiplicaCadenaMatrices(A,S,2,3) R2 return (multiplicar (X,Y)) Laura Cruz Reyes Programación Dinámica
  • 34. Algoritmo para calcular un producto usando el mínimo número de operaciones R2 Algoritmo multiplicaCadenaMatrices(A,S,2,3) if 3>2 X = multiplicaCadenaMatrices(A,S,2,2) A2 Y = multiplicaCadenaMatrices (A,S,3,3) A3 return (multiplicar (X,Y)) (A2A3) Laura Cruz Reyes Programación Dinámica
  • 35. Algoritmo para calcular un producto usando el mínimo número de operaciones R1 Algoritmo multiplicaCadenaMatrices(A,S,1,3) if 3>1 X = multiplicaCadenaMatrices(A,S,1,1) A1 Y = multiplicaCadenaMatrices(A,S,2,3) (A2A3) return (multiplicar (X,Y)) (A1(A2A3)) Laura Cruz Reyes Programación Dinámica
  • 36. Algoritmo para calcular un producto usando el mínimo número de operaciones Algoritmo multiplicaCadenaMatrices(A,S,1,6) if 6>1 X = multiplicaCadenaMatrices(A,S,1,3)(A1(A2A3)) Y = multiplicaCadenaMatrices(A,S,4,6)R3 return (multiplicar (X,Y)) Laura Cruz Reyes Programación Dinámica
  • 37. Algoritmo para calcular un producto usando el mínimo número de operaciones R3 Algoritmo multiplicaCadenaMatrices(A,S,4,6) if 6>4 X = multiplicaCadenaMatrices(A,S,4,5) R4 Y = multiplicaCadenaMatrices(A,S,6,6) A6 return (multiplicar (X,Y)) Laura Cruz Reyes Programación Dinámica
  • 38. Algoritmo para calcular un producto usando el mínimo número de operaciones R4 Algoritmo multiplicaCadenaMatrices(A,S,4,5) if 5>4 X = multiplicaCadenaMatrices (A,S,4,4) A4 Y = multiplicaCadenaMatrices (A,S,5,5) A5 return (multiplicar (X,Y)) (A4A5) Laura Cruz Reyes Programación Dinámica
  • 39. Algoritmo para calcular un producto usando el mínimo número de operaciones R3 Algoritmo multiplicaCadenaMatrices(A,S,4,6) if 6>4 X = multiplicaCadenaMatrices (A,S,4,5)A4A5 Y = multiplicaCadenaMatrices (A,S,6,6) A6 return (multiplicar (X,Y)) ((A4A5)A6) Laura Cruz Reyes Programación Dinámica
  • 40. Algoritmo para calcular un producto usando el mínimo número de operaciones Algoritmo multiplicaCadenaMatrices(A,S,1,6) if 6>1 X = multiplicaCadenaMatrices(A,S,1,3)(A1(A2A3)) Y = multiplicaCadenaMatrices(A,S,4,6) ((A4A5)A6) return (multiplicar(X Y))((A1(A2A3))((A4A5)A6) Laura Cruz Reyes Programación Dinámica
  • 41. Algoritmo para obtener una cadena de matrices con paréntesis Algoritmo parentizaCadenaMatrices(A,S,i,j) EntradaS: A es una cadena de matrices sin paréntesis Salidas: A es la cadena de matrices con paréntesis 1 2 3 4 5 Laura Cruz Reyes Programación Dinámica
  • 42. Algoritmo recursivo para obtener el costo óptimo de una multiplicación de matrices Algoritmo ordenCadenaMatricesRecursivo(R,i,j) Entradas:R es el vector de dimensiones de una cadena de n matrices, la matriz i tiene dimensiones ri-1 x ri Salidas: M es la matriz de costos mínimos 1 if i = j then 2 return 0 3 mij= ∞ /*inicializa costo cadena actual*/ 4 for k = i to j-1 do /*punto-corte cadena*/ 5 q ← ordenCadenaMatricesRecursivo(R,i,k)+ ordenCadenaMatricesRecursivo(R,k+1,j)+ri-1*rk*rj 6 if q < mij 7 then mij ← q 8 return mij Laura Cruz Reyes Programación Dinámica
  • 43. Complejidad del algoritmo recursivo El número de subproblemas evaluados es al menos exponencial en n ⎧0 para n = 1 ⎪ T (n) = ⎨ n −1 ⎪1 + ∑ (T (k ) + T (n − k ) + 1) para n > 1 ⎩ k =1 ⎧0 para n = 1 ⎪ T (n) = ⎨ n −1 ⎪2∑ T (i ) + n para n > 1 ⎩ i =1 T (n) ≥ 2n −1 T (n) = Ω(2n −1 ) Laura Cruz Reyes Programación Dinámica
  • 44. Versión memorizada del programa recursivo Variación de la programación dinámica que combina el enfoque natural de los algoritmos recursivos con la eficiencia de la programación dinámica. Se mantiene una tabla con soluciones de subproblemas, pero el llenado de la tabla se realiza bajo el control de un algoritmo recursivo. Cada entrada de la tabla tiene una bandera que se prende cuando esta ha sido calculada. Laura Cruz Reyes Programación Dinámica
  • 45. Versión memorizada del programa recursivo LOOKUP-CHAIN(p,i,j) 1 if i = j MEMOIZED-MATRIX-CHAIN(p) 2 then return 0 1 n ← length[p] - 1 3 m[i,j] ← ∞ 2 for i ← 1 to n 4 for k ← 1 to j -1 3 do for j ← 1 to n 5 do q ← LOOKUP-CHAIN 4 do m[i,j] ← ∞ (p,i,k) 5 return LOOKUP-CHAIN(p,1,n) + LOOKUP-CHAIN (p,k+1,j) + pi-1pkpj 6 if q < m[i,j] 7 then m[i,j] ← q 8 return m[i,j] Laura Cruz Reyes Programación Dinámica
  • 46. Complejidad del algoritmo recursivo-memorizado Existen solamente n(n-1)/2 problemas diferentes (cadenas), y el algoritmo recursivo-memorizado resuelve cada problema exactamente una vez, por lo tanto: T(n)= θ(n2) Sin embargo, la versión pura es más eficiente por un factor constante debido que no hay sobrecarga inherente a la recursión. Laura Cruz Reyes Programación Dinámica
  • 47. Problema del cambio de moneda
  • 48. Problema del cambio de moneda Dada una divisa (unidad monetaria de un país) con monedas de u1, u2,…,un, y C unidades que deben ser devueltas a un cliente. Se busca el número mínimo de monedas que se necesitan para devolver las C unidades de cambio. Laura Cruz Reyes Programación Dinámica
  • 49. m=6 C=10 m=1 m=2 u=1 u=5 u=10 m=5 C=9 m=1 C=5 C=0 … u=1 u=5 C=8 C=0 m=4 … u=1 C=7 m=3 u=1 … Árbol de problemas m=2 C=6 … u=1 m=5 C=5 m=1 u=1 u=5 m=4 C=4 C=0 C=10 u=1 U={1,5, 10, 15, 21,25} m=3 C=3 u=1 m=2 C=2 m=1 u=1 S={10} m=1 C=1 Laura Cruz Reyes u=1 Programación Dinámica C=0
  • 50. m=3 C = 7 m=3 u=1 u=5 m=2 C=6 m=2 C=2 m=2 u=1 u=5 u=1 m=5 C=5 m= C=1 m=1 C=1 m=1 1 u=1 u=5 u=1 u=1 C=0 C=0 C=0 C=4 m=4 u=1 C=3 m=3 Árbol de problemas u=1 C=2 m=2 u=1 m=1 C=7 C=1 U={1,5, 10, 15, 21,25} u=1 C=0 m=3 S={1,1,5} Laura Cruz Reyes Programación Dinámica
  • 51. Valor de una solución óptima Sea m[C] un arreglo que almacena el menor número de monedas para devolver la cantidad C usando una moneda óptima u ∈ U. Por lo tanto, la tabla se llena con la siguiente regla: Si C = 0 entonces m[C] = 0, quiere decir que no se requiere ninguna moneda para devolver una cantidad igual a cero. Si C > 0 entonces m[C] = min(1+ m[C-u]), ∀ u ∈ U, quiere decir que se utilizará una moneda óptima de denominación u más las monedas requeridas para devolver una cantidad igual a C-u. Laura Cruz Reyes Programación Dinámica
  • 52. Complejidad del algoritmo El tiempo de ejecución depende del número de monedad con distintos valores n y de la cantidad de cambio que queremos devolver C, por lo tanto: T(n)= nC Laura Cruz Reyes Programación Dinámica
  • 53. Algoritmo para cambio de monedas Consultar el libro de Mark Allen (pag. 201) Laura Cruz Reyes Programación Dinámica
  • 54. Problema de la mochila 0-1
  • 55. El Problema de la Mochila 0-1 Se tienen n objetos, cada uno con un peso pi, y una mochila con una capacidad C. Si se mete un objeto i en la mochila, entonces se consigue un beneficio bi. El objetivo es llenar la mochila de manera que se maximice el beneficio total y no se exceda la capacidad de la mochila. Para la asignación de los objetos se utiliza un vector X de n elementos xi, caracterizado porque cada elemento xi sólo puede tomar los valores cero o uno para indicar si el objeto se mete o no a la mochila. Laura Cruz Reyes Programación Dinámica
  • 56. El Problema de la Mochila 0-1 Dada una mochila con capacidad C y un conjunto de n objetos; cada objeto i, 1≤ i≤n, tiene un peso pi > 0 y un beneficio b i > 0. Se busca una asignación en X (xi=1 si el objeto se lleva, xi=0 en caso contrario) de objetos a la mochila que obtenga el máximo beneficio: n maximizar ∑ bixi, i=1 y satisfaga la condición: n ∑ pi xi ≤ C i=1 Laura Cruz Reyes Programación Dinámica
  • 57. El Problema de la Mochila 0-1 Un caso particular del problema de la mochila 0-1 es: n=3, C=15, (b1,b2,b3) = (38, 40, 24) y (p1,p2,p3) = (9,6,5). Una posible solución es: (x1,x2,x3) = (0,1,1), con beneficio 64. Para este caso, la solución óptima es: (x1,x2,x3) = (1,1,0) con beneficio 78. Laura Cruz Reyes Programación Dinámica
  • 58. Valor de una solución óptima Sea m[i,j] un arreglo que almacena el valor máximo de los objetos que podemos transportar si el límite de peso es j, con 0≤j ≤ C, y si solamente incluimos los objetos numerados desde 1 hasta el i, con 1≤i ≤n. Por tanto, la solución se puede encontrar en m[n,C]. La tabla se llena n,C con la regla: Si j=0 entonces m[i,0] = 0, quiere decir que ningún objeto se puede acomodar en una mochila de capacidad cero. Si j>0 entonces m[i,j] = max (m[i-1, j], m[i-1, j-pi] + bi), quiere decir que se evalúa la opción de no añadir el objeto i a la carga contra la opción de incluirlo, lo cual tiene como efecto incrementar el valor de la carga en bi, y reducir la capacidad disponible en pi. Laura Cruz Reyes Programación Dinámica
  • 59. Valor de una solución óptima capacidad de la mochila C=11 Peso de los objetos P={1,2,5,6,7} Beneficio de los objetos B={1,6,18,22,28} 0 1 2 3 4 5 6 7 8 9 10 11 1 0 1 1 1 1 1 1 1 1 1 1 1 2 0 1 6 7 7 7 7 7 7 7 7 7 3 0 1 6 7 7 18 19 24 25 25 25 25 4 0 1 6 7 7 18 22 24 28 29 29 40 5 0 1 6 7 7 18 22 28 29 34 35 40 Laura Cruz Reyes Programación Dinámica
  • 60. Complejidad del algoritmo El tiempo de ejecución depende del número de objetos por acomodar n y de la capacidad de la mochila C, por lo tanto: T(n)= nC Laura Cruz Reyes Programación Dinámica
  • 61. Algoritmo para la mochila 0-1 Consultar el libro de Brassard et.al (pag. 201) Laura Cruz Reyes Programación Dinámica
  • 62. El Problema de la Mochila 0-1 con repetición Una variante del problema de la mochila 0-1 admite objetos repetidos en la mochila. Para representar el número de objetos repetidos se utiliza el vector r. n=5, C=17, (b1,b2,b3,b4,b5) = (4,5,10,11,13) (p1,p2,p3,p4,p5) = (3,4,7,8,9). La solución óptima es: (x1,x2,x3,x4,x5) = (1,0,1,0,0) y (r1,r2,r3,r4,r5) = (1,0,2,0,0), con beneficio 24. Laura Cruz Reyes Programación Dinámica
  • 63. Problema de la subsecuencia común más larga
  • 64. El problema de la subsecuencia común más larga Dada una secuencia X = ‹x1,x2,...xm›, otra secuencia Z=‹z1,z2,...zk› es una subsecuencia of X si existe una secuencia de índices ‹i1,i2,...ik› de X que incrementa estrictamente tal que para todo j=1,2,...,k, we have xij = zj. Por ejemplo, Z=<B,C,D,B> es una subsecuencia de X=<A,B,C,B,D,A,B> con la correspondiente secuencia de índices <2,3,5,7>. Laura Cruz Reyes Programación Dinámica
  • 65. Algoritmo para subsecuencia común más larga Consultar el libro de Cormen et. al (pag. 353) Laura Cruz Reyes Programación Dinámica
  • 66. Bibliografía Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest. Introduction to Algorithms. MIT Press, 1990. Sara Basse, Allen Van Gelder. Algoritmos Computacionales: Introducción al análisis y diseño. 3ª. edición. Addison Wesley, 2002. Mark Allen Weiss. Estructura de Datos en Java. Addison Weasley, 2000. Gilles Brassard y Paul Bratley. Fundamentos de Algoritmia. Prentice Hall, 1997. Laura Cruz Reyes Programación Dinámica