Algoritmos Voracescic.puj.edu.co/.../fetch.php?media=materias:lenguajes3:16_algvorace… ·...

Post on 13-Aug-2020

3 views 0 download

Transcript of Algoritmos Voracescic.puj.edu.co/.../fetch.php?media=materias:lenguajes3:16_algvorace… ·...

Algoritmos VoracesIntroducción

Andrés Becerra Sandoval

Ponti�cia Universidad Javeriana

2007

Lenguajes III

Contenido

Importancia

Importancia

I Un algoritmo voraz es fácil de:

I ComprenderI AnalizarI Implementar

I Además, casi siempre son muy e�cientes

I Cool!

Importancia

I Un algoritmo voraz es fácil de:

I Comprender

I AnalizarI Implementar

I Además, casi siempre son muy e�cientes

I Cool!

Importancia

I Un algoritmo voraz es fácil de:

I ComprenderI Analizar

I Implementar

I Además, casi siempre son muy e�cientes

I Cool!

Importancia

I Un algoritmo voraz es fácil de:

I ComprenderI AnalizarI Implementar

I Además, casi siempre son muy e�cientes

I Cool!

Importancia

I Un algoritmo voraz es fácil de:

I ComprenderI AnalizarI Implementar

I Además, casi siempre son muy e�cientes

I Cool!

Importancia

I Un algoritmo voraz es fácil de:

I ComprenderI AnalizarI Implementar

I Además, casi siempre son muy e�cientes

I Cool!

Selección de actividades

I

i 1 2 3 4 5 6 7 8 9

si 1 2 4 1 5 8 9 11 13fi 3 5 7 8 9 10 11 14 16

I Conjuntos compatibles, de tamaño máximo:

I {a1, a3, a6, a8}I {a2, a5, a7, a9}

Selección de actividades

I

i 1 2 3 4 5 6 7 8 9

si 1 2 4 1 5 8 9 11 13fi 3 5 7 8 9 10 11 14 16

I Conjuntos compatibles, de tamaño máximo:

I {a1, a3, a6, a8}I {a2, a5, a7, a9}

Selección de actividades

I

i 1 2 3 4 5 6 7 8 9

si 1 2 4 1 5 8 9 11 13fi 3 5 7 8 9 10 11 14 16

I Conjuntos compatibles, de tamaño máximo:

I {a1, a3, a6, a8}

I {a2, a5, a7, a9}

Selección de actividades

I

i 1 2 3 4 5 6 7 8 9

si 1 2 4 1 5 8 9 11 13fi 3 5 7 8 9 10 11 14 16

I Conjuntos compatibles, de tamaño máximo:

I {a1, a3, a6, a8}I {a2, a5, a7, a9}

Selección de actividades

I Entrada:

I S = {a1, ..., an}I ai necesita el recurso durante el periodo [si , fi )

I Salida

I Salida: A′ = {a′1, a′

2, ...a′

k}, un conjunto de tamaño

máximo k de actividades compatibles;I (a′

i , a′j) son compatibles si si ≥ fj ó si sj ≥ fi

Planteamiento dinámico

Entrada:A = {a1, a2, ..., an}, además están ordenadas portiempo de �nalización: f1 ≤ f2... ≤ fnPara codi�car las soluciones utilizaremos las siguientesde�niciones:

I Subproblema: Sij = {ak ∈ A tal que fi ≤ sk ≤ sj} Esto es,Si ,j es la entrada al subproblema que considera lasactividades que inician después de �nalizar la i y �nalizanantes de iniciar la j

I Para cubrir todas las actividades añadiremos a0 conf0 = 0, y an+1 con sn+1 =∞, asi que la entrada paratodo el problema estaría codi�cado por S0,n+1

Costo óptimo

I El costo óptimo c[i , j ] asociado al subproblema Si ,j estadado por:

c[i , j ] =

0 si Si ,j = ∅maxi<k<jak∈Si,j

c[i , k] + c[k , j ] + 1 si Si ,j 6= ∅

I Note que Sij = ∅, si i ≥j

Demostración

I Entrada:A = {a0, a1, a2, ..., an, an+1}, además están

ordenadas por tiempo de �nalización:

f0 ≤ f1 ≤ f2... ≤ fn+1

I Si i ≥ j entonces Sij = ∅I Si no fuera así ak ∈ Sij

I fi ≤ sk ≤ fk ≤ sj < fj entonces fi < fjI Pero si i ≥ j entonces fi ≥ fjI Contradicción

I Según esto, solo necesitamos pensar en Sij con0 ≤ i < j ≤ n + 1

Algoritmo Recursivo

seleccionActRec(A,F , S , i , j)

1 � PRE: ∀i , j c[i , j ] = Nil2 if c[i , j ] = Nil3 then for k ← i + 1 to j − 14 do

5 if F [i ] ≤ S [k] ≤ S [j ]6 then cand ← seleccionActRec(A,F,S,i,k)+

seleccionActRec(A,F,S,k,j)+17 if cand > c[i,j]8 then c[i , j ]← cand

9 r [i , j ]← k

� r guarda las actividades

Algoritmo Iterativo

seleccionActIter(A,F , S)

1 n← length[A]2 for i ← 1 to n

3 do c[i , i ]← 04 for l ← 2 to n � l es la longitud de la sec5 do for i ← 1 to n − l + 16 do j ← i + l − 17 c[i , j ]←∞8 for k ← i + 1 to j − 19 do

10 if F [i ] ≤ S [k] ≤ S [j ]11 then q ← c[i , k] + c[k + 1, j ] + 112 if q < c[i , j ]13 then c[i , j ]← q

14 r [i , j ]← k

Complejidad

I Analizando los tres ciclos podemos a�rmar que elalgoritmo es O(n3)

I El consumo de memoria está dado por la matriz de costosc, y la matriz r que permite almacenar los k. Esto esΘ(n2)

I Tarea: Escribir el algoritmo para imprimir las actividades!

Otra forma de atacarlo

I Suponga que escojo am tal quefm = min{fk tal que ak ∈ Sij}

I Es decir pongo la actividad que �nalize primero y resuelvoun subproblema restante (las actividades que faltan)

I Escribir el algoritmo es fácil

I Lo difícil es probar que es correcto

Algoritmo voraz

Greedy-Activity-Selector(F , S)

n← length[A]A← {a1}i ← 1for m← 2 to n

do if sm ≥ fithen A← A ∪ {am}

i ← m

¾Demostración?

I ¾Como demostramos que semejante simpli�cación escorrecta?

I Probando que un conjunto solución contiene la actividad

que �naliza primeroI Una solución voraz contiene soluciones voraces

Teorema

Para cualquier Sij , con am siendo la actividad que �nalizaprimero

fm = minfk : ak ∈ Sij

Tenemos que:

1. am pertenece a algún conjunto de tamaño máximo

2. El subproblema Si ,m es vacío. Asi que la solución a Si ,j

contiene una solución de la misma forma al subproblemaSm,j

Metodología

Para diseñar algoritmos voraces:

1. Determinar la subestructura óptima del problema

2. Desarrollar una solución recursiva

3. Probar que una de las decisiones óptimas es la voraz

4. Probar que después de tomar la decisión voraz, soloqueda un subproblema por resolver

5. Desarrolla una solución iterativa

Knapsack

Un ladrón que va a robar un conjunto de objetos tiene unmorral que puede tiene una capacidad máxima de carga de Wkilos (W ∈N), sabe que cada objeto tiene un peso wi y unprecio vi determinados, su problema consiste en decidir queobjetos robarse de manera que maximice el precio total y nosobrepase la capacidad de carga de su morral.

1. knapsack 0-1 (binario)

2. knapsack fraccional

Knapsack binario

c[i,w] es la solución para los objetos del 1 al i, y para el pesomáximo w.

c[i ,w ] =

0 si i = 0 o w = 0

c[i − 1,w ] si wi > W − w

max{vi + c[i − 1,w − wi ], c[i − 1,w ]} si i > 0 y w ≥ W − wi

Voraz recursivo

ACTIVITY-SELECTOR(s, f , i , j)

1 m← i + 12 while m < j and sm < fi3 do m← m + 14 if m < j

5 then return am∪ACTIVITY-SELECTOR(s, f ,m, j)6 else

7 return ∅

Voraz Iterativo

ACTIVITY-SELECTOR(s, f )

1 n← length[s]2 A← {a1}3 i ← 14 for m← 2 to n

5 do if sm ≥ fi6 then

7 A← A ∪ {am}8 i ← m