Está en la página 1de 21

Algoritmos Greedy

Anlisis y Diseo de Algoritmos

Algoritmos Greedy





Caractersticas generales
Elementos de un algoritmo greedy
Esquema de un algoritmo greedy
Ejemplos
 Seleccin de actividades
 Almacenamiento ptimo en cintas
 Problema de la mochila fraccional
Heursticas greedy
 Ejemplo: El problema de la mochila
Aplicaciones
1

Caractersticas generales


Se utilizan generalmente para resolver problemas de


optimizacin (obtener el mximo o el mnimo).

Toman decisiones en funcin de la informacin que


est disponible en cada momento.

Una vez tomada la decisin, sta no vuelve a


replantearse en el futuro.

Suelen ser rpidos y fciles de implementar.

No siempre garantizan alcanzar la solucin ptima.

Caractersticas generales
greedy (adj):
avaricioso, voraz, vido, codicioso, glotn

Cmete siempre todo


lo que tengas a mano!

Caractersticas generales
NOTA IMPORTANTE
El enfoque greedy
greedy no nos garantiza obtener
soluciones ptimas.
Por lo tanto, siempre habr que estudiar la
correccin del algoritmo para demostrar si las
soluciones obtenidas son ptimas o no.

Elementos
Para poder resolver un problema usando el enfoque
greedy,, tendremos que considerar 6 elementos:
greedy
1.
2.
3.

4.

5.

6.

Conjunto de candidatos (elementos seleccionables).


Solucin parcial (candidatos seleccionados).
Funcin de seleccin (determina el mejor candidato
del conjunto de candidatos seleccionables).
Funcin de factibilidad (determina si es posible
completar la solucin parcial para alcanzar una solucin
del problema).
Criterio que define lo que es una solucin (indica
si la solucin parcial obtenida resuelve el problema).
Funcin objetivo (valor de la solucin alcanzada). 5

Esquema general


Se parte de un conjunto vaco: S = .

De la lista de candidatos, se elige el mejor (de


seleccin).
acuerdo con la funcin de seleccin).

Comprobamos si se puede llegar a una solucin con el


candidato seleccionado (funcin
(funcin de factibilidad).
factibilidad).
Si no es as, lo eliminamos de la lista de candidatos
posibles y nunca ms lo consideraremos.

Si an no hemos llegado a una solucin,


seleccionamos otro candidato y repetimos el proceso
hasta llegar a una solucin [o quedarnos sin posibles
candidatos].

Esquema general
Greedy (conjunto de candidatos C): solucin S
S =
while (S no sea una solucin y C ) {
x = seleccin(C)
C = C {x}
if (S
(S{x} es factible)
S = S
S{x}
}
if (S es una solucin)
return S;
else
return No se encontr una solucin;
7

Ejemplo
Seleccin de actividades
Tenemos que elegir de entre un conjunto de actividades:
 Para cada actividad, conocemos su hora de comienzo
y su hora de finalizacin.
 Podemos asistir a todas las actividades que queramos.
 Sin embargo, hay actividades que se solapan en el
tiempo y no podemos estar en dos sitios a la vez.
Posibles objetivos
1. Asistir al mayor nmero de actividades posible.
2. Minimizar el tiempo que estamos ociosos.
8

Ejemplo
Seleccin de actividades
Problema de seleccin de actividades
Dado un conjunto C de n actividades, con
si = tiempo de comienzo de la actividad i
fi = tiempo de finalizacin de la actividad i
encontrar el subconjunto S de actividades compatibles
de tamao mximo (esto es, actividades que no se
solapen en el tiempo).
9

Ejemplo
Seleccin de actividades
Elementos del problema







Conjunto de candidatos: C = {actividades ofertadas}.


Solucin parcial: S (inicialmente, S=).
Funcin de seleccin: menor duracin, menor
solapamiento, terminacin ms temprana
Funcin de factibilidad: x es factible si es compatible
(esto es, no se solapa) con las actividades de S.
Criterio que define lo que es una solucin: C=.
Funcin objetivo (lo que tratamos de optimizar):
El tamao de S.

10

Ejemplo
Seleccin de actividades
Estrategias greedy alternativas
Orden en el que se pueden considerar las actividades:


Orden creciente de hora de comienzo.

Orden creciente de hora de finalizacin.

Orden creciente de duracin: fi - si

Orden creciente de conflictos con otras actividades


(con cuntas actividades se solapa).
11

Ejemplo
Seleccin de actividades
Estrategias greedy alternativas
Contraejemplos (para descartar alternativas)


Orden creciente de hora de comienzo.

Orden creciente de duracin: fi - si

Orden creciente de conflictos con otras actividades


12

Ejemplo
Seleccin de actividades
Algoritmo Greedy
SeleccinActividades (C: actividades): S
Ordenar C en orden creciente de tiempo de finalizacin.
Seleccionar la primera actividad de C
(esto es, extraerla del conjunto C y aadirla a S).
Repetir
Extraer la siguiente actividad del conjunto ordenado:
Si comienza despus de que la actividad previa en S
haya terminado, seleccionarla (aadirla a S).
hasta que C est vaco.

13

Ejemplo
Seleccin de actividades
Algoritmo Greedy
SeleccinActividades (C: actividades): S
{
sort(C);
sort(C);
// ordenar segn tiempo de finalizacin
S[0
S[0] = C[
C[0
0]; // seleccionar la primera actividad
i = 1; prev = 0;
while (i<
(i<C.length
C.length)
) {
// solucin(S)?
x = C[i
C[i];
];
// seleccionar x
if (x.inicio >= S[prev
S[prev].fin)
].fin) // factible(x)?
S[++
[++prev
prev]
] = x;
// aadir x a S
i++;
}
14

Ejemplo
Seleccin de actividades
B
C
A
E
D
F
G
H

Tiempo

15

Ejemplo
Seleccin de actividades
B
C
A
E
D
F
G
H

Tiempo

16

Ejemplo
Seleccin de actividades
B
C
A
E
D
F
G
H
B

Tiempo

17

Ejemplo
Seleccin de actividades
B
C
A
E
D
F
G
H

Tiempo

B A

18

Ejemplo
Seleccin de actividades
B
C
A
E
D
F
G
H
B

Tiempo

19

Ejemplo
Seleccin de actividades
B
C
A
E
D
F
G
H
B

Tiempo

D
E

20

Ejemplo
Seleccin de actividades
B
C
A
E
D
F
G
H
B

Tiempo

21

Ejemplo
Seleccin de actividades
B
C
A
E
D
F
G
H
B

Tiempo

22

Ejemplo
Seleccin de actividades
B
C
A
E
D
F
G
H
B

Tiempo

23

Ejemplo
Seleccin de actividades
Demostracin de optimalidad
Por reduccin al absurdo:
Suponemos que el algoritmo
no calcula la solucin ptima
La actividad ir+1 termina antes que la jr+1
greedy

i1

i1

ir

ptimo

j1

j2

jr

ir+1

jr+1

...

Por qu no reemplazar la
actividad jr+1 con ir+1?

24

Ejemplo
Seleccin de actividades
Demostracin de optimalidad
Por reduccin al absurdo:
Suponemos que el algoritmo
no calcula la solucin ptima
La actividad ir+1 termina antes que la jr+1
greedy

i1

i1

ir

ir+1

ptimo

j1

j2

jr

ir+1

...

Pero entonces, la solucin parcial del algoritmo


greedy sigue siendo factible y, adems, es ptima

25

Ejemplo
Seleccin de actividades
Demostracin de optimalidad

Jon Kleinberg & Eva Tardos: Algorithm Design.


Design.
Seccin 4.1 Interval
Interval Scheduling
Scheduling:: The greedy algorithm
stays ahead
ahead.
.
Thomas H. Cormen,
Cormen, Charles E. Leiserson,
Leiserson, Ronald L.
Rivest & Clifford Stein:
Stein: Introduction to Algorithms.
Algorithms.
[2 edicin] Seccin 16.1 An
An activityactivity-selection problem
problem.
.
26

Ejemplo
Almacenamiento en cintas
Almacenamiento ptimo en cintas
 Tenemos n ficheros que hay que almacenar en una
cinta de longitud L.
 Cada fichero i tiene una longitud li , 1 i n
 Todos los ficheros se recuperan del mismo modo,
siendo el tiempo medio de recuperacin (TMR),
TMR =


n 1 j nt j

t j = li
1 k j

Nos piden que encontremos una permutacin de los n


ficheros tal que, cuando estn almacenados en la cinta
el TMR sea mnimo, lo que equivalente a minimizar
D( I ) =

li

1 j n 1 k j

27
k

Ejemplo
Almacenamiento en cintas
Almacenamiento ptimo en cintas
Ejemplo
n=3
(5,10
10,,3)
(l1,l2,l3) = (5
Orden I
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1

Valor D(I)
5 + 5 + 10 + 5 + 10 + 3
5 + 5 + 3 + 5 + 3 + 10
10 + 10 + 5 + 10 + 5 + 3
10 + 10 + 3 + 10 + 3 + 5
3 + 3 + 5 + 3 + 5 + 10
3 + 3 + 10 + 3 + 10 + 5

=
=
=
=
=
=

38
31
43
41
29
34

28

Ejemplo
Almacenamiento en cintas
Almacenamiento ptimo en cintas
Algoritmo greedy
Partiendo de la cinta vaca
Mientras queden ficheros por guardar
Elegir el fichero ms pequeo
Aadirlo a continuacin en la cinta

El algoritmo escoge la opcin ms inmediata sin tener


en cuenta si esa decisin ser la mejor a largo plazo...
29

Ejemplo
Almacenamiento en cintas
Almacenamiento ptimo en cintas
Teorema
Si l1 l2 ln,
entonces el orden de colocacin ij = j, 1 j n
n
k
minimiza

li
k =1 j =1

para todas las posibles permutaciones ij


Demostracin: Ellis Horowitz & Sartaj Sahni
Sahni::
Fundamentals of Computer Algorithms,
Algorithms, 1978

30

Ejemplo
Problema de la mochila 0/1
Objeto 3

30
50

Objeto 2

20

30

30

Objeto 1

20
10
60

100

120

Mochila

20

10

10

160

180

220

Cmo seleccionamos los objetos de la mochila? NP


31

Ejemplo
Problema de la mochila fraccional
El problema consiste en llenar una mochila:
 La mochila puede soportar como mximo un peso P.
 Tenemos n objetos fraccionables
fraccionables..
 Cada objeto i tiene un peso pi
y proporciona un beneficio bi
Objetivo:
Maximizar el beneficio de los objetos transportados.

max

xb

i i

sujeto a

1i n

x p
i

1i n

32

Ejemplo
Problema de la mochila fraccional
Ejemplo
Mochila de 100kg
100kg

Beneficio ()
Peso (kg)

20 30 65 40 60
10 20 30 40 50

Cmo seleccionamos los objetos?


 Primero el ms ligero
Peso = 10
10+
+20
20+
+30
30+
+40 = 100 kg
Beneficio = 20
20+
+30
30+
+65
65+
+40 = 155


Primero el ms valioso
Peso = 30 + 50 + 20 = 100 kg
Beneficio = 65 + 50 + 20 = 135

Primero el que tenga ms valor por unidad de peso


Peso = 30 + 10 + 20 + 40 = 100 kg
Beneficio = 65 + 20 + 30 + 48 = 163

33

Ejemplo
Problema de la mochila fraccional


Definimos la densidad del objeto Oi como bi/pi.

Algoritmo greedy:
greedy: Seleccionamos los objetos en
orden decreciente de densidad
densidad..
bi/pi bi+
i+1
1/pi+
i+1
1 para 1 i < n

Se aade a la mochila todo lo que se pueda


pueda::
entero,, se rellena el espacio
Si un objeto Oi no cabe entero
disponible con la fraccin del objeto que quepa
hasta completar la capacidad de la mochila.
mochila.

34

Heursticas greedy
Hay situaciones en las cuales no podemos encontrar
un algoritmo greedy que proporcione una solucin
ptima
En muchas ocasiones, se podran obtener mejores
soluciones reconsiderando alternativas desechadas por
un algoritmo greedy (cuando, a partir de una solucin
ptima local no se puede alcanzar una solucin ptima
global).
Pese a ello, resultan tiles los algoritmos greedy
que proporcionan una solucin rpida a problemas
complejos, aunque sta no sea ptima.

35

Heursticas greedy
Heurstica: Procedimiento que proporciona una
solucin aceptable a un problema mediante mtodos
que carecen de justificacin formal (p.ej. por tanteo,
usando reglas empricas).


Heursticas para problemas concretos (p.ej. NP)

Metaheursticas (heursticas de propsito general):


 Enfriamiento simulado
 Bsqueda tab
 GRASP [Greedy Randomized Adaptive Search Procedures
Procedures]]
 Algoritmos bioinspirados:
bioinspirados: algoritmos genticos,
algoritmos memticos,
memticos, colonias de hormigas

36

Heursticas greedy
Satisfacer vs. optimizar


Cuando el tiempo que se tarda en resolver un


problema es un factor clave, un algoritmo greedy
puede utilizarse como criterio heurstico.

Tambin puede utilizarse un algoritmo greedy para


encontrar una primera solucin (como punto de
partida para otra heurstica).

37

Ejemplo
Problema de la mochila 0/1
Objeto 3

30
50

Objeto 2

20

30

30

Objeto 1

20
10
60

100

120

Mochila

20

10

10

160

180

220

Cmo seleccionamos los objetos de la mochila?


38

Ejemplo
Problema de la mochila 0/1
Un algoritmo greedy proporciona la solucin ptima del
problema de la mochila cuando se pueden fraccionar los
objetos. Sin embargo, el problema es ms difcil de
resolver cuando no se pueden fraccionar los objetos

max

xb

i i

1i n

sujeto a

x p
i

P con xi {0,1}

1i n

39

Ejemplo
Problema de la mochila 0/1
Heurstica greedy
Ordenar los objetos por densidad no creciente:
creciente:
bi/pi bi+
i+1
1/pi+
i+1
1 para 1 i < n
Con un nmero ilimitado de objetos de cada tipo
tipo,,
si M es el valor mximo de los objetos que se pueden
llevar en la mochila,
mochila, la heurstica garantiza obtener,
obtener, al
menos,, un valor de M/
menos
M/2
2 (George Dantzig
Dantzig,, 1957).
1957).
Sin embargo, la heurstica puede proporcionar
resultados mucho peores (muy alejados del ptimo)
ptimo)
para instancias particulares del problema.
problema.

40

Aplicaciones


Planificacin de tareas.










Minimizacin del tiempo de espera = Almacenamiento en cintas.


Planificacin de tareas a plazo fijo = Seleccin de actividades.

Cajero (devolver un nmero mnimo de monedas/billetes [pero no sellos]).


Caminos mnimos en grafos (algoritmo de Dijkstra)
Dijkstra).
rbol generador minimal (algoritmos de Prim & Kruskal)
Kruskal).
Cdigos Huffman y compresin de datos.
Construccin de rboles de decisin.
Heursticas greedy
greedy

41

También podría gustarte