Algoritmos Voracescic.puj.edu.co/.../fetch.php?media=materias:lenguajes3:16_algvorace… ·...
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