Greedy: Mochila Fraccionaria, Cambio Mínimo & Seam Carving Flashcards

1
Q

Explique el problema de la Mochila Fraccionaria

A

Se tiene:

  • Un contenedor (mochila) de capacidad W
  • Un conjunto de n elementos fraccionables (se pueden subdividir) de valor vi y de peso wi.

Queremos seleccionar un subconjunto de elementos o fracciones de ellos de modo de maximizar el valor almacenado y sin superar la cantidad de la mochila.

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

Mochila Fraccionaria: Explique la solución Greedy

A

Se priorizan los elementos más valiosos por unidad de peso.
Se repite el proceso mientras quede espacio en el contenedor y elementos disponibles.

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

Mochila Fraccionaria: Explique el pseudocódigo

A
  • Se tiene un contenedor con capacidad W
  • Se tiene n elementos fraccionables, es decir, que pueden usarse sólo partes de ellos. Los elementos tienen, cada uno, un valor y un peso.
  • Queremos seleccionar un conjunto de elementos o fracciones de ellos de modo de maximizar el valor almacenado y sin superar la capacidad de la mochila.

De cada elemento se tiene una cantidad.

Mientras haya elementos disponibles:
          Elijo al elemento con valor valor por unidad, y uso todos los que pueda (o en su caso, una fracción del elemento).
          Sumo al valor total el valor agregado por el elemento elegido, y resto al peso disponible el paso aportado por el mismo elemento en total.

          Elimino al elemento de los posibles.
          Vuelvo a elegir un nuevo elemento.

Cuando no hay más elementos disponibles, devuelvo el valor total.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Mochila Fraccionaria: ¿El algoritmo Greedy, es siempre óptimo?

A

Sí, el algoritmo Greedy para la Mochila Fraccionaria es siempre óptimo.

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

Explique el problema de Cambio Mínimo

A

Se cuenta con:
- Un conjunto de monedas de diferente denominación, sin restricción de cantidad $ = {c1, c2, ..., cn}
- Un importe X de cambio a dar

Se quiere entregar la menor cantidad posible de monedas como cambio.

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

Cambio Mínimo: Explique la solución Greedy

A

La solución Greedy para Cambio Mínimo implica tomar siempre la moneda de mayor denominación posible que sea menor o igual al cambio a dar.

Se dan luego tantas monedas de esa denominación como sea posible. Con el resto, se repite el proceso hasta dar todo el cambio.

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

Cambio Mínimo: Explique el pseudocódigo

A
Mientras siga habiendo cambio para devolver:
               Elegir la moneda de mayor denominación en el conjunto, tal que sea menor o igual al cambio a devolver

               Devolver de esa moneda la mayor cantidad posible
               Restar del cambio el valor de la moneda * la cantidad devuelta
               Continuar la iteración

Una vez que ya no quedan monedas disponibles: Retornar la cantidad de monedas utilizadas en total
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
8
Q

Cambio Mínimo: ¿Qué complejidad tiene la solución?

A

La complejidad es O(n), ya que se recorren en el peor de los casos todas las monedas posibles.

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

Cambio Mínimo: ¿Es Greedy siempre óptimo? Explique.

A

No.

Greedy sólo funciona en los casos donde la base $ es canónica (o estándar, ordenado o greedy).

Se puede demostrar si una base es canónica o no con un contraejemplo. Basta con buscar un valor x entre:

c3 + 1 < x < cn + c(n-1)

tal que no se cumpla que óptimo = greedy

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

Seam Carving: Explique el problema

A

Seam Carving es un algoritmo para la manipulación de imágenes.

Analiza la imagen recortando los píxeles de menor importancia.

  • Seam significa “veta” y carving “tallado”.
  • La veta puede ser horizontal o vertical.
  • Al retirarla, tiene el menor impacto sobre la visualización.
  • Retira tantas vetas como sea necesario para llegar al tamaño requerido.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
11
Q

Seam Carving: ¿Cómo determina qué píxeles son poco importantes?

A

Existen diferentes métodos. Por ejemplo:
- Entropía
- Diferencia cromática
- Movimiento de la mirada

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

Seam Carving: Explique la diferencia cromática

A

La diferencia cromática la da relevancia a los píxeles que rodean al pixel actual.

  • Si es un pixel rodeado de píxeles similares, tiene poca importancia
  • Si es un pixel rodeado de pixels diferentes, tiene mucha importancia.

Inicialmente, se debe calcular la importancia de cada pixel.

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

Seam Carving: Explique la solución por Camino Mínimo (¿cómo se interpreta la imagen?)

A

Trataremos la imagen como una grilla de píxeles intercomunicados. Lo representaremos como un grafo, donde todos los píxeles son nodos y los ejes son posibles cambios de la veta.

Lo que vamos a hacer es calcular el camino mínimo entre s y t.

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

Seam Carving: Camino Mínimo: Explique el algoritmo Dijsktra

A

Dijsktra es un algoritmo Greedy, y funciona para un grafo G dirigido y ponderado (con costos positivos) de N nodos aislados y M ejes.

Dados dos nodos s y t, busca el camino mínimo que los une.

Es un algoritmo iterativo que divide los nodos en tres conjuntos:

  1. Alcanzados: inicialmente, sólo el s
  2. Externos: inicialmente, todos menos s
  3. Frontera: pertenecientes a externos, pero conectados a alguno de los nodos alcanzados.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
15
Q

Seam Carving: Camino Mínimo: Explique el pseudocódigo de Dijsktra

A
Sean los alcanzados un conjunto donde inicialmente sólo se encuentra `s` con costo `0` y predecesor `nulo`.
Sea la frontera un conjunto vacío.

Por cada nodo vecino a `s`, agregar a la frontera, con costo `c_s` y predecesor `s`.

Mientras la frontera no esté vacía:
         Obtener al nodo `x`, que tiene el menor costo.
         Quitar a `x` de la frontera
         Agregar a `x` a los alcanzados

         Por cada `y` vecino de `x`:
                  El costo de `y` será el costo de `y` más el acumulado de `x`
                  Si `y` está en la frontera y el costo accediendo desde `x` es menor a su costo actual, actualizar `y` tal que su costo y predecesor sea `c_x` y `x`.

                  Si `y` no está en la frontera, agregar a `x` como predecesor. Agregar a `y` en la frontera con costo `c_y + c_x`.

Una vez que se llegó a `t`, puedo recorrer los alcanzados de forma inversa (con los predecesores) y obtener el camino mínimo.
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
16
Q

Seam Carving: Camino Mínimo: Dijsktra. Explique una posible implementación.

Indique la complejidad por partes y en general.

A

Se puede implementar la frentera con un heap de mínimos.
Los alcanzados son un vector de tamaño n.
Los vecinos de cada nodo son listas de adyacencias por nodo.

  • El loop se ejecuta n-1 veces, y cada vez obtengo el nodo menor en O(logn) (por el heap).
  • En la frontera, se insertan nodos n-1 veces, con costo O(logn) - de nuevo, por el heap.
  • La frontera actualiza el costo de un nodo, en el peor de los casos, m veces con costo de O(logn).

=> La complejidad total es de O([n+m] logn)

17
Q

Mochila Fraccionaria: resolver

W = 15

Elemento Peso Valor
A 8 12
B 4 10
C 6 15
D 3 7
E 5 9

(Se tiene 1 unidad x elemento)

A

B x1, C x1, D x1, E x0.4

Valor total 35.6

18
Q

Cambio Mínimo: Resolver

$ = (1, 5, 10, 25, 50, 100)

Cambios:
1. 80
2. 24
3. 101

A
  1. (0,1,0,1,1,0)
  2. (4,0,2,0,0,0)
  3. (1,0,0,0,0,1)
19
Q

Cambio Mínimo: Resolver

$ = (1,2,4,5,10)

Cambios:
a.10
b8
c.15
d.25

¿Es canónica la base?

A

a. X = 10

(0,0,0,0,1)

b. X = 8

5, 2, 1 ⇒ (1,1,0,1,0)

[!] Podrían haberse dado dos de 4. ⇒ La base no es canónica

c. X = 15

10, 5 ⇒ (0,0,0,1,1)

d. X = 25

10, 10, 5 ⇒ (0,0,0,1,2)

20
Q

Seam Carving: Resolver

Nodo_i nodo_f costo
S A 0
S B 0
A C 4
A D 1
B C 3
B D 1
C T 0
D T 0

A

Camino mínimo: T, D, A, S

Veta: A -> D