Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
1 3
Ejemplo Ejemplo
Selección de actividades Selección de actividades
Problema de selección de actividades Estrategias greedy alternativas
Orden en el que se pueden considerar las actividades:
Dado un conjunto C de n actividades, con
Orden creciente de hora de comienzo.
si = tiempo de comienzo de la actividad i Orden creciente de hora de finalización.
fi = tiempo de finalización de la actividad i
Orden creciente de duración: fi - si
encontrar el subconjunto S de actividades compatibles Orden creciente de conflictos con otras actividades
de tamaño máximo (esto es, actividades que no se (con cuántas actividades se solapa).
solapen en el tiempo).
9 11
Ejemplo Ejemplo
Selección de actividades Selección de actividades
Estrategias greedy alternativas Algoritmo Greedy
Contraejemplos (para descartar alternativas) SelecciónActividades (C: actividades): S
{
Orden creciente de hora de comienzo. sort(C);
sort(C); // ordenar según tiempo de finalización
S[0
S[0] = C[0]; // seleccionar la primera actividad
C[0
i = 1; prev = 0;
Orden creciente de duración: fi - si while (i<
(i<C.length
C.length)
) { // ¿solución(S)?
x = C[i
C[i];
]; // seleccionar x
if (x.inicio >= S[prev].fin) // ¿factible(x)?
S[prev].fin)
Orden creciente de conflictos con otras actividades S[++
[++prev
prev]
] = x; // añadir x a S
i++;
}
12 14
}
Ejemplo Ejemplo
Selección de actividades Selección de actividades
B
Algoritmo Greedy
C
SelecciónActividades (C: actividades): S
A
E
Ordenar C en orden creciente de tiempo de finalización.
D
Seleccionar la primera actividad de C
F
(esto es, extraerla del conjunto C y añadirla a S).
G
Repetir
H
Extraer la siguiente actividad del conjunto ordenado: Tiempo
C C
A A
E E
D D
F F
G G
H Tiempo H Tiempo
B B A
16 18
Ejemplo Ejemplo
Selección de actividades Selección de actividades
B B
C C
A A
E E
D D
F F
G G
H Tiempo H Tiempo
B C B E
17 19
Ejemplo Ejemplo
Selección de actividades Selección de actividades
B B
C C
A A
E E
D D
F F
G G
H Tiempo H Tiempo
B D
E B E G
20 22
Ejemplo Ejemplo
Selección de actividades Selección de actividades
B B
C C
A A
E E
D D
F F
G G
H Tiempo H Tiempo
B E F B E H
21 23
Ejemplo Ejemplo
Selección de actividades Selección de actividades
Demostración de optimalidad Demostración de optimalidad
Por reducción al absurdo:
Suponemos que el algoritmo
no calcula la solución óptima…
Jon Kleinberg & Eva Tardos: Algorithm Design.
Design.
La actividad ir+1 termina antes que la jr+1
Sección 4.1 “Interval
“Interval Scheduling
Scheduling:: The greedy algorithm
stays ahead
ahead”.”.
greedy i1 i1 ir ir+1
Thomas H. Cormen,
Cormen, Charles E. Leiserson,
Leiserson, Ronald L.
Rivest & Clifford Stein:
Stein: Introduction to Algorithms.
Algorithms.
óptimo j1 j2 jr jr+1 ... [2ª edición] Sección 16.1 “An
“An activity-
activity-selection problem
problem”.
”.
Ejemplo Ejemplo
Selección de actividades Almacenamiento en cintas
Almacenamiento óptimo en cintas
Demostración de optimalidad Tenemos n ficheros que hay que almacenar en una
Por reducción al absurdo: cinta de longitud L.
Suponemos que el algoritmo Cada fichero i tiene una longitud li , 1 ≤ i ≤ n
no calcula la solución óptima… Todos los ficheros se recuperan del mismo modo,
siendo el tiempo medio de recuperación (TMR),
La actividad ir+1 termina antes que la jr+1
1
greedy
TMR = ∑
n 1≤ j ≤ nt j
t j = ∑ li
i1 i1 ir ir+1
k
1≤ k ≤ j
Ejemplo Ejemplo
Almacenamiento en cintas Almacenamiento en cintas
Almacenamiento óptimo en cintas Almacenamiento óptimo en cintas
Ejemplo Teorema
n=3
(l1,l2,l3) = (5
(5,10
10,,3) Si l1 ≤ l2 ≤ … ≤ ln,
entonces el orden de colocación ij = j, 1 ≤ j ≤ n
Orden I Valor D(I) minimiza n k
1,2,3 5 + 5 + 10 + 5 + 10 + 3 = 38 ∑∑ li
k =1 j =1
j
1,3,2 5 + 5 + 3 + 5 + 3 + 10 = 31
2,1,3 10 + 10 + 5 + 10 + 5 + 3 = 43 para todas las posibles permutaciones ij
2,3,1 10 + 10 + 3 + 10 + 3 + 5 = 41
3,1,2 3 + 3 + 5 + 3 + 5 + 10 = 29 Demostración: Ellis Horowitz & Sartaj Sahni
Sahni::
3,2,1 3 + 3 + 10 + 3 + 10 + 5 = 34 28 Algorithms, 1978
Fundamentals of Computer Algorithms, 30
Ejemplo Ejemplo
Almacenamiento en cintas Problema de la mochila 0/1
Almacenamiento óptimo en cintas
Algoritmo greedy
Objeto 3 30
Partiendo de la cinta vacía…
Objeto 2 50 30
20
Mientras queden ficheros por guardar
Elegir el fichero más pequeño Objeto 1 30
20 20
Añadirlo a continuación en la cinta 10
10 10
El algoritmo escoge la opción más inmediata sin tener 60€ 100€ 120€ Mochila 160 € 180 € 220 €
en cuenta si esa decisión será la mejor a largo plazo...
¿Cómo seleccionamos los objetos de la mochila? NP
29 31
Ejemplo Ejemplo
Problema de la mochila fraccional Problema de la mochila fraccional
El problema consiste en llenar una mochila: Definimos la densidad del objeto Oi como bi/pi.
La mochila puede soportar como máximo un peso P.
Tenemos n objetos fraccionables
fraccionables.. greedy: Seleccionamos los objetos en
Algoritmo greedy:
Cada objeto i tiene un peso pi orden decreciente de densidad
densidad..
y proporciona un beneficio bi
bi/pi ≥ bi+
i+11/pi+
i+11 para 1 ≤ i < n
Objetivo:
Maximizar el beneficio de los objetos transportados. Se añade a la mochila todo lo que se pueda
pueda::
Si un objeto Oi no cabe entero
entero,, se rellena el espacio
max ∑xb
1≤i ≤ n
i i sujeto a ∑x p
1≤i ≤ n
i i ≤P disponible con la fracción del objeto que quepa
hasta completar la capacidad de la mochila.
mochila.
32 34
Ejemplo
Heurísticas greedy
Problema de la mochila fraccional
Ejemplo Beneficio (€) 20 30 65 40 60 Hay situaciones en las cuales no podemos encontrar
Mochila de 100kg
100kg Peso (kg) 10 20 30 40 50 un algoritmo greedy que proporcione una solución
óptima…
¿Cómo seleccionamos los objetos?
Primero el más ligero
En muchas ocasiones, se podrían obtener mejores
Peso = 10
10+
+20
20+
+30
30++40 = 100 kg soluciones reconsiderando alternativas desechadas por
Beneficio = 20
20+
+30
30+
+65
65+
+40 = 155 € un algoritmo greedy (cuando, a partir de una solución
óptima local no se puede alcanzar una solución óptima
Primero el más valioso
global).
Peso = 30 + 50 + 20 = 100 kg
Beneficio = 65 + 50 + 20 = 135 €
Primero el que tenga más valor por unidad de peso Pese a ello, resultan útiles los algoritmos greedy
Peso = 30 + 10 + 20 + 40 = 100 kg que proporcionan una solución rápida a problemas
Beneficio = 65 + 20 + 30 + 48 = 163 € 33 complejos, aunque ésta no sea óptima. 35
Ejemplo
Heurísticas greedy
Problema de la mochila 0/1
Heurística: Procedimiento que proporciona una
solución aceptable a un problema mediante métodos
que carecen de justificación formal (p.ej. por tanteo,
usando reglas empíricas…). Objeto 3 30
Objeto 2 50 30
Heurísticas para problemas concretos (p.ej. NP) 20
Objeto 1 30
Metaheurísticas (heurísticas de propósito general): 20 20
10 10 10
Enfriamiento simulado
Búsqueda tabú
60€ 100€ 120€ Mochila 160 € 180 € 220 €
GRASP [Greedy Randomized Adaptive Search Procedures
Procedures]]
Algoritmos bioinspirados:
bioinspirados: algoritmos genéticos, ¿Cómo seleccionamos los objetos de la mochila?
algoritmos meméticos,
meméticos, colonias de hormigas… 36 38
Ejemplo
Heurísticas greedy
Problema de la mochila 0/1
Satisfacer vs. optimizar Un algoritmo greedy proporciona la solución óptima del
problema de la mochila cuando se pueden fraccionar los
Cuando el tiempo que se tarda en resolver un objetos. Sin embargo, el problema es más difícil de
problema es un factor clave, un algoritmo greedy resolver cuando no se pueden fraccionar los objetos…
puede utilizarse como criterio heurístico.
37 39
Ejemplo
Problema de la mochila 0/1
Heurística greedy
Ordenar los objetos por densidad no creciente:
creciente:
bi/pi ≥ bi+
i+11/pi+
i+11 para 1 ≤ i < n
Aplicaciones
Planificación de tareas.
Minimización del tiempo de espera = Almacenamiento en cintas.
Planificación de tareas a plazo fijo = Selección de actividades.
Cajero (devolver un número mínimo de monedas/billetes [pero no sellos]).
Caminos mínimos en grafos (algoritmo de Dijkstra)
Dijkstra).
Árbol generador minimal (algoritmos de Prim & Kruskal)
Kruskal).
Códigos Huffman y compresión de datos.
Construcción de árboles de decisión.
Heurísticas greedy
greedy… …
41