Programación Dinámica: Problema de la Soga, Weighted Interval Scheduling, Cambio Mínimo, Seam Carving Flashcards

1
Q

¿Qué es la programación dinámica?

A
  • Es una metodología de resolución para problemas de optimización (minimización o maximización).
  • Divide el problema en subproblemas con una jerarquía entre ellos de menor a mayor tamaño.
  • Cada subproblema puede ser utilizado y reutilizado en diferentes subproblemas mayores.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

¿Qué propiedades debe tener un problema para poder resolverse de forma óptima con programación dinámica?

A

Para poder resolverse de forma óptima con programación dinámica, el problema debe contener las siguientes propiedades:

  • Subestructura óptima: la solución óptima global contiene en su interior las soluciones óptimas de sus subproblemas.
  • Subproblemas superpuestos: en la resolución de sus subproblemas, vuelven a aparecer subproblemas previamente calculados.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

¿Por qué se usa una relación de recurrencia con programación dinámica?

A

Se usa una relación de recurrencia porque cada problema se ramifica en un conjunto de subproblemas.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

¿Qué es la memorización? ¿Qué se reduce con ella?

A

La memorización es la técnica fundamental para la resolución en forma eficiente de los problemas, mediante programación dinámica: consiste en almacenar los resultados de los subproblemas previamente calculados; para evitar repetir su resolución.

Se reduce la cantidad de problemas a calcular, por lo que se reduce la complejidad temporal de la solución.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Problema del Corte de la Soga: Explique

A

Se tiene una soga de longitud L y una tabla de precios por longitud de la soga.
Queremos saber qué cortes realizar para maximizar la ganancia.

Cada corte realizado de longitud li nos deja con una ganancia pi y un largo de soga L-li.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Problema del corte de la soga: explique la solución por programación dinámica.

A

Lo que vamos a hacer es armar un árbol de decisión representando todas las posibilidades. El óptimo será el máximo elegido entre todas las posibles ramas de subproblemas y opciones:

  • OPT(X) = MAX { pi + OPT(X-i) } si X >0.
  • OPT(X) = 0 si X <= 0.

Como en el árbol de decision ciertos problemas se repiten, podemos calcular una sola vez el resultado, y luego reutilizarlo almacenando en una tabla los subproblemas resueltos.

Ahora sólo se deben calcular L subproblemas, y la ganancia óptima va a estar en la última fila de nuestra tabla de memorización.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Problema de la Soga: Explique el pseudocódigo de la solución iterativa. ¿Cuál es la complejidad?

A
1. OPT es el vector de óptimos, OPT[0] = 0

2. Recorro con i desde 0 a L:
         a. OPT[i] = 0 (lo inicializo en cero)

         b. Con j desde 0 a i:
                  valor = precio[j] + OPT(i-j)
                  si valor > OPT[i]:
                           OPT[i] = valor

3. Retornar OPT[L]
  1. Inicializamos un vector donde se guardan las ganancias con (0,0).
  2. Recorremos todos los posibles cortes i del 0 a L. Para cada uno, inicializamos el óptimo en 0. Luego, recorremos todos los posibles subcortes de 0 a i, guardando el precio del corte + el óptimo del restante (i-j). Si el valor es mayor al óptimo, mejoramos el caso previo y cambiamos el valor.
  3. Retornamos el valor óptimo de L.

La complejidad espacial es O(L), y la temporal es O(L^2).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Problema de la Soga: ¿Cómo podemos actualizar el pseudocódigo anterior para permitir la reconstrucción de decisiones?

A

Para permitir la reconstrucción de decisiones, además de actualizar el óptimo cuando el valor es mayor, guardamos la elección de j que dió ese óptimo.
Lo hacemos en otro vector: eleccion[i] = j.

Al finalizar, además de retornar el OPT de L, recorremos de L a 0 el vector eleccion, restando cada uno de los valores que encontramos de eleccion[L] hasta eleccion[0] (no van a ser números secuenciales).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
9
Q

Problema de la Soga: Resolver

L = 4

long, precio:
0 , 0
1 , 2
2 , 5
3 , 7
4 , 8

A

[2,2] con ganancia 10

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
10
Q

Weighted Interval Scheduling: explique el problema

A

Es un Interval Scheduling donde ahora cada pedido tiene un valor vi.

Queremos seleccionar el conjunto P con tareas compatibles entre sí y que la suma de sus valores sea la mayor posible (ya no buscamos la mayor cantidad de pedidos compatibles, sino la mayor ganancia).

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Weighted Interval Scheduling: explique la implementación

A
  • El orden se mantiene: ordenamos las tareas en orden creciente de tiempo de finalización.
  • Para cada tarea i, queremos saber cuál es la primer tarea anterior con la que es compatible el evento P(i).
    Sabemos que por cómo están ordenadas, todos los compatibles de un evento i van a tener un valor menor a i ( x < i, x tiene tiempo de finalización previo a i).
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
12
Q

Weighted Interval Scheduling: ¿Cómo se define la pertenencia de una tarea al óptimo? ¿Qué pasa si un pedido no pertenece al óptimo?

A
  • Si un pedido i pertenece al óptimo, ningún pedido incompatible con i pertenece. El primero en aparecer después de i es P(i), el primer anterior compatible.
  • Si el pedido no pertenece al óptimo, la tarea i-1 podría hacerlo.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
13
Q

Weighted Interval Scheduling: Explique el uso del árbol de decisión

A

El arbol, para cada elemento, tiene dos ramas: una si el elemento pertenece al óptimo, la otra sino pertenece.

Si un pedido está en el óptimo, se abre la pregunta de si su anterior compatible está. Si no lo está, seguimos con el siguiente anterior compatible.

Vemos que hay problemas que se repiten.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
14
Q

Weighted Interval Scheduling: Explique la solución iterativa

A
  1. Si x =0, el óptimo es 0.
  2. Si x > 0, el óptimo se calcula como:
    a. Obtenemos el valor de x
    b. Obtenemos el valor del óptimo para el inmediatamente compatible de x
    c. Los sumamos
    d. Obtenemos el óptimo del anterior en orden de finalización: OPT(x-1).
    e. Nos quedamos con el máximo de esos dos valores (la suma, o el óptimo del anterior en finalización) y lo guardamos como óptimo del evento actual.
  3. El resultado va a estar en OPT(n).
OPT[0] = 0

Desde i=1 ... n:

	enOptimo = V[i] + OPT[P(i)]
	noEnOptimo = OPT[i-1]

	Si enOptimo >= noEnOptimo:
		OPT[i] = enOptimo
	Sino:
		OPT[i] = noEnOptimo

Retornar OPT[n]
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Weighted Interval Scheduling: Explique para el pseudocódigo sus complejidades temporales y espaciales.

A

Complejidad Temporal: O(n)
Complejidad Espacial: O(n)

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Weighted Interval Scheduling: ¿Qué agregaríamos al pseudocódigo si quisiéramos reconstruir las elecciones?

A

Podemos guardar True o False en un arreglo, dependiendo de si está o no en el óptimo.

Luego recorremos el arreglo y nos quedamos sólo con aquellas posiciones que tienen valor True y son compatibles con nuestro anterior:

i = n
Mientras i >0
        Si elegido[i]:
                Imprimir i
                i = P(i)
        sino
                i--
17
Q

Weighted Interval Scheduling: Resolver

evento          inicio          final          valor
A                    9:00           10:30          3
B                    10:15         11:45          1
C                    11:00          12:30         2
D                    12:00          13:30        3
E                    13:15          14:45         1
A

Solución: A, C, E; ganancia 6

18
Q

Cambio Mínimo: Explique el problema

A

Esta versión de cambio mínimo sirve incluso para bases no canónicas. Vamos a usar árboles de decisión para hacer uso de la memorización.

19
Q

Cambio Mínimo: Explique cómo obtener el subproblema

A

El subproblema va a ser calcular el óptimo del cambio X, usando el mínimo de los subproblemas X-Cj, para j = 1, 2, ..., n.

20
Q

Cambio Mínimo: Explique la solución con recurrencia. ¿Cuál sería la complejidad si lo resolviéramos con fuerza bruta?

A

Siendo x el cambio a dar, el OPT es 1 + min(OPT(x-C)) o 0, si x=0.
Con fuerza bruta, comparar todas los subproblemas sería O(x^n), con programación dinámica, mejora.

21
Q

Cambio Mínimo: Explique el pseudocódigo iterativo. Explique la complejidad.

A
OPT[0] = 0

Para todos los valores i de 0 a x:
       El mínimo se setea en el infinito.
       minimo = inf

       Con j desde 1 a n:
              resto = i - C[j]

              si resto < 0:
                     break

              si resto >= 0 y OPT[resto] < minimo:
                     minimo = OPT[resto]

       OPT[i] = 1 + minimo

Retornar OPT[X]
  1. Inicializamos el óptimo con 0, 0
  2. Recorremos todos los i de 1 a x, y para cada uno ponemos al mínimo en infinito.
    a. Recorremos todas las monedas distintas posibles, y las restamos al valor de i. Si son mayores, cambiamos de i.
    b. Si son menores o iguales, y el optimo del resto es menor al mínimo actual, actualizamos el mínimo.
    c. Cada vez que terminamos de recorrer todos los valores de j, le sumamos 1 al mínimo y lo guardamos en el óptimo de i.
  3. Al final, retornamos OPT de X.

Complejidad:
Temporal O(n * x)
Espacial: O(x)

22
Q

Cambio Mínimo: Explique cómo reconstruir elecciones

A

Se puede agregar una reconstrucción, guardando la elegida[i] = j cada vez que se encuentra un óptimo menor al mínimo. Luego, hacemos lo mismo que con la soga: vamos restando al cambio los valores de C[elegida[cambio]] (va a ser el valor de una denominación del cambio) y obtenemos las elecciones óptimas.

23
Q

Cambio mínimo, resolver:

X = 6
$ = {1, 5, 10, 25, 50, 100}

A

OPT[6] = 2

Optimos: 5, 1

24
Q

Seam Carving: ¿Qué es la energía de un pixel? ¿Qué es la energía acumulada?

A
  • Vamos a definir la energía de un pixel como la medida que refleja la importancia o relevancia de ese pixel en la imagen.
  • Vamos a decir que la energía acumulada de un pixel está dada por la cantidad de pixeles que pueden acceder al mismo.
  • En la primer columna, la energía acumulada depende de los mismos píxeles. En la segunda, la energía acumulada depende del mismo pixel + cómo se llegó a él.
  • En la columna n entonces, la energía acumulada de cada pixel será la propia + toda la energía de cómo se llegó a él.
25
Q

Seam Carving: ¿Cómo se define el subproblema?

A

Calculamos para cada pixel j de la columna i la energía mínima para llegar a este.
Esto depende únicamente de la columna i-1.

El problema base es la columna 1, donde la energía es la del propio pixel j.

26
Q

Seam Carving: Explique la solución por recurrencia.

A

El óptimo es igual a la energía únicamente para el caso de la columna i=1.

Para los otros, el óptimo es la energía del pixel + el mínimo de los óptimos de todos los posibles píxeles previos (que suelen ser 2 o 3, depende).

27
Q

Seam Carving: Solución Iterativa. Explicar el pseudocódigo y la complejidad.

A

Siendo w,h el ancho y la altura de la imagen:

Para j de 1 a h:
        Inicializo el óptimo de la primer columna como la energía del pixel: OPT[1,j] = e(i,j)

Para i de 2 a w:
        Para j de 1 a h:
                OPT[i,j] = e(i,j) + min (posibles predecesores)

menor = infinito

Para j de 1 a h:
        si el OPT[w,j] < menor:
                menor = OPT[w,j]

Retornar menor
  1. Inicializo a toda la primer columna con las energías.
  2. Calculo para cada columna (>1) y fila, el óptimo del pixel como el valor de la energia + el minimo de los predecesores.
  3. Una vez que terminé de recorrer todo, recorro únicamente la última columna. inicializo el menor en infinito, y lo voy actualizando a medida que encuentro uno más chico.

Complejidad Temporal: O(wh)
Complejidad Espacial: O(w
h)

28
Q

Seam Carving: Explicar la Reconstrucción de la veta.

A

Almacenar por cada pixel desde cuál se llega con mínima energía. Luego, reconstruir para atrás el camino de energía.

eleccion[i,j] = predecesor (u,v)
u,v pueden ser: (i-1, j), (i-1, j-1), (i-1, j+1).

Empezamos a recorrer desde pixel de la última columna con el menor optimo, y vamos para atrás.