Sunteți pe pagina 1din 28

Algoritmos Greedy

Dante Zanarini

25 de junio de 2009

Dante Zanarini

Algoritmos Greedy

La estrategia a seguir

Un algoritmo greedy elige, en cada paso, una solucin local o o ptima

En general, son bastante sencillos de programar

desafortunadamente?, no siempre conducen al ptimo o

Dante Zanarini

Algoritmos Greedy

Algunos ejemplos

Si tenemos que dar un vuelto, elegir la moneda (o billete) de mayor denominacin que no supere el monto a devolver o En el problema del rbol recubridor minimal, elegir la arista de a menor peso que no cierre ciclos En el problema del viajante, elegir la ciudad ms cercana a la a actual Al armar el cdigo de Human, elegir los dos subrboles de o a menor frecuencia y unirlos

Dante Zanarini

Algoritmos Greedy

Puedo siempre aplicar una estrategia greedy?

Para un problema de optimizacin, es bastante fcil encontrar o a una estrategia greedy Las estrategias greedy encuentran una solucin maximal al o problema. La solucin que tenemos no se puede mejorar, a menos, claro o est, que volvamos atrs y revisemos las elecciones que a a hicimos. La cuestin est en ver si esa solucin maximal es realmente o a o mxima a

Dante Zanarini

Algoritmos Greedy

Ejemplo, el problema de la mochila fraccionario y 0-1

1 kilo, $60

3kilos, $120 capacidad: 5 kilos 2 kilos, $100

Dante Zanarini

Algoritmos Greedy

Problemas que encuentran el optimo siguiendo alguna estrategia greedy

Arbol recubridor minimal Algoritmo del camino ms corto a Problema de la mochila fraccionaria Construccin del cdigo de Human o o Problemas de asignacin de tareas (algunos) o Problema del cambio (con algunas denominaciones)

Dante Zanarini

Algoritmos Greedy

Problemas que no encuentran el optimo siguiendo una estrategia greedy

Matching Problema del viajante SAT Coloreo Paginacin o Problema del cambio (con algunas denominaciones)

Dante Zanarini

Algoritmos Greedy

La pregunta del d a

Cmo me puedo dar cuenta si una estrategia o greedy encuentra el ptimo? o


Veremos dos enfoques sobre este asunto

Dante Zanarini

Algoritmos Greedy

Diseando un algoritmo greedy optimo n

Pensemos el problema P como uno en el cual, en cada paso, hay que tomar una decisin (greedy) y luego resolver un o subproblema P de P. Demostramos que siempre hay una solucin optima del o problema que toma la eleccin greedy. Por lo tanto, esta o eleccin es segura o Demostramos que, una vez que realizamos la eleccin greedy, o lo que queda es un subproblema tal que, si combinamos su solucin con la eleccin greedy, entonces obtenemos una o o solucin del problema original (subestructura ptima!) o o

Dante Zanarini

Algoritmos Greedy

Un ejemplo

Tenemos n tareas S = {a1 , . . . , an } que requieren acceso exclusivo a un recurso. Cada tarea tiene un tiempo de comienzo si y un tiempo de nalizacin fi . o Dos tareas ai , aj son compatibles si si fj o sj fi Hay que elegir el mximo nmero de tareas compatibles dos a a u dos

Dante Zanarini

Algoritmos Greedy

Una instancia del problema:

i si fi

1 1 4

2 3 5

3 0 6

4 5 7

5 3 8

6 5 9

7 6 10

8 8 11

9 8 12

10 2 13

11 12 14

Algunas soluciones maximales: {a3 , a9 , a11 } {a1 , a4 , a8 , a11 } {a2 , a4 , a9 , a11 }

Dante Zanarini

Algoritmos Greedy

Tratemos de pensar una estrategia greedy...


Inicialmente, el problema es sobre el conjunto S0 = S Para resolver Sj , elijo la tarea que termine lo antes posible (la idea es dejar la mayor cantidad de tiempo para las que quedan). Es decir, elijo i tal que fi = min {fk | ak Sj } Supongamos que es la tarea i, entonces, el subproblema que me queda es elegir el nmero mximo de tareas entre u a Si = {ak S | fi sk }

1 2

Eleccin greedy o Subestructura


Dante Zanarini Algoritmos Greedy

Veamos cmo trabaja el algoritmo en el ejemplo o

i si fi

1 1 4

2 3 5

3 0 6

4 5 7

5 3 8

6 5 9

7 6 10

8 8 11

9 8 12

10 2 13

11 12 14

Elijo a1 Puedo descartar a2 , a3 , a5 , a10 Elijo a4 Puedo descartar a6 , a7

Elijo a8 Puedo descartar a9 Elijo a11 Listo!

Dante Zanarini

Algoritmos Greedy

Vericando que la estrategia es optima (I)


Teorema 1 (Seguridad de la eleccin greedy) o Sean Sj un subproblema, am = min {fk | ak Sj }. Entonces am pertenece a una solucin ptima de Sj o o Demostracin o Sea Aj un conjunto de tareas mximo para Sj . a Ordenemos Aj segn el tiempo de nalizacin (creciente) u o Sea ak la primer tarea de Aj Si am = ak , listo! Si no, sea Aj = Aj \ {ak } {am }. Aj tiene el mismo nmero de tareas que Aj , y como fm fk , u las tareas en Aj son disjuntas Por lo tanto, Aj es ptima para Sj , y am Aj o
Dante Zanarini Algoritmos Greedy

Vericando que la estrategia es optima (II)


Teorema 2 (Subestructura ptima) o Sea Sj un subproblema, am = min {fk | ak Sj }, Sm = {ak Sj | sk fm } el subproblema resultante al elegir am , y Am una solucin ptima para Sm . o o Entonces Aj = {am } Am es una solucin ptima para Sj o o Demostracin o Por el absurdo. Si no lo es, exite Bj que es solucin de Sj y |Aj | < |Bj | o Tomamos Bj = Bj \ {ak }, donde ak es la primer tarea en terminar de Bj Se puede ver que Bj es solucin de Sm (porque ak termina o despus que am ) e Como |Am | < |Bj |, Am no es ptima para Sm . Absurdo! o
Dante Zanarini Algoritmos Greedy

El algoritmo greedy

TASKSELECTOR( s , f , j , n ) m i + 1 w h i l e m n sm < fj do Buscamos e l p r i m e r m m + 1 e l e m e n t o en Sj i f m n then r e t u r n {am } TASKSELECTOR( s , f ,m, n ) else return

Dante Zanarini

Algoritmos Greedy

Otro enfoque...

Veamos otra forma de encarar el problema de optimalidad de un algoritmo greedy Utilizaremos una estructura algebraica llamada matroide, que caracteriza (algunos de los) problemas para los cuales los algoritmos greedy encuentran el ptimo o Escribiremos un algoritmo greedy para matroides, y demostraremos que es ptimo o Por lo tanto, dado un problema, si logramos representarlo como un matroide
1 2

sabemos que se puede seguir una estrategia greedy ya tenemos escrito el algoritmo que encuentra el ptimo o

Dante Zanarini

Algoritmos Greedy

Qu es un matroide? e

Denicin 1 (Matroide) o Un matroide M es un par (S, I ) tal que


1 2

S es un conjunto nito I P(S) es una familia de subconjuntos de S, llamados conjuntos independientes, tales que, si B I y A B, entonces A I . A esta propiedad la llamamos propiedad hereditaria. Si A I , B I , y |A| < |B|, entonces existe algn elemento u x B \ A tal que A x I . A esta propiedad la llamamos propiedad de intercambio

Dante Zanarini

Algoritmos Greedy

Ejemplos de matroides

Ejemplo 1 (Grafos) S: conjunto de arcos de un grafo I : conjuntos de arcos ac clicos Ejemplo 2 (Matrices) S: conjunto de las de una matriz de tamao m n n I : conjunto de las linealmente independientes Ejemplo 3 (Subconjuntos) S: cualquier conjunto nito I : conjuntos con a lo sumo k elementos, para algn k |S| u

Dante Zanarini

Algoritmos Greedy

Ejemplos de cosas que no son matroides

Ejemplo 4 (Matching) S: conjunto de arcos de un grafo I : conjuntos de arcos que no comparten vrtices e Ejemplo 5 (Mochila 0-1 de capacidad W) S = {w1 , w2 , . . . , wn } I : conjuntos {wi1 , . . . , wim } tales que wi1 + + wim W

Dante Zanarini

Algoritmos Greedy

Elementos maximales en matroides

Denicin 2 o Sean M = (S, I ) un matroide, A I . Un elemento x A es una extensin de A si x puede / o agregarse a A preservando independencia; es decir, si A {x} I A I es maximal si no tiene extensiones. Es decir, si no existe B I tal que A B

Dante Zanarini

Algoritmos Greedy

Elementos maximales en matroides (II)

Teorema 3 Todos los elementos maximales de un matroide tienen el mismo cardinal Demostracin o Supongamos que no. Entonces existen A, B I maximales y tales que |A| < |B| Por la propiedad de intercambio, existe x B \ A tal que A {x} I A es extensible. Absurdo, pues es maximal!

Dante Zanarini

Algoritmos Greedy

Optimizacin en matroides o

Denicin 3 (Funcin peso en matroides) o o Sea M = (S, I ). Una funcin w : S R+ es una funcin de pesos o o para M. Para A I , el peso de A es w (A) =
xA

w (x)

Un problema de optimizacin en un matriode se reduce a o buscar un conjunto independiente A I tal que w (A) es mximo. a Tal A siempre ser maximal, dado que los pesos son positivos a

Dante Zanarini

Algoritmos Greedy

Un algortimo greedy para matroides


GREEDY( ( S , I ) , w) A Ordenamos S en forma d e c r e c i e n t e p o r p e s o s p a r a cada x S , tomados en o r d e n d e c r e c i e n t e de p e s o s i f A {x} I then A A {x} return A

Dado que es independiente, y que cada x se agrega slo si o preserva independencia, el conjunto A devuelto es independiente Si n = |S|, ordenar nos lleva O(nlgn). La complejidad de GREEDY es entonces O(nlgn + nf (n)) donde f (n) es el tiempo requerido para vericar la condicin o de extensin o
Dante Zanarini Algoritmos Greedy

Resultados sobre matroides


Lema 4 (greedy-choice property) Sea M = (S, I ) un matroide con funcin de pesos w , tal que S o est ordenado de forma decreciente. a Si existe un elemento x tal que {x} I y w (x) es mximo, a entonces existe un conjunto ptimo A de S que contiene a x. o Lema 5 (Subestructura ptima) o Sea x el primer elemento elegido por GREEDY. El problema de encontrar un subconjunto independiente de peso mximo que a contiene a x (que existe, por el teorema anterior), se reduce a buscar un subconjunto independiente mximo en el matroide a S = {y S | {x, y } I } I = {B S \ {x} | B {x} I }

Dante Zanarini

Algoritmos Greedy

Correctitud de GREEDY

Teorema 6 El algoritmo GREEDY para matroides devuelve un subconjunto o ptimo de S. Demostracin o Usando los lemas anteriores

Dante Zanarini

Algoritmos Greedy

Un ejemplo conocido
Ejemplo 6 (Algoritmo de Kruskal) Sea G = (V , E ) un grafo con costos c : E R+ . Denimos M = (S, I ) y w donde S =E I son todos los conjunto de aristas ac clicos w (e) = w0 c(e), donde w0 > max {c(e) | e E } Ordenar las aristas ya sabemos, lo hacemos en tiempo O(|E |lg|E |) Para ver si A {x} es independiente (no forma un ciclo), puedo ir guardando las componentes conexas de A, resultando f O(|V |) (set-union-nd les suena?) Por lo tanto, GREEDY encuentra un rbol recubridor minimal a en tiempo O(|E |lg|E |)
Dante Zanarini Algoritmos Greedy

Conclusiones

Hemos encontrado una estructura algebraica que subyace a una tcnica de diseo de algoritmos e n Pudimos probar propiedades generales sobre esta tcnica e Escribimos un algoritmo general y calculamos su complejidad Dado un problema, si lo representamos como un problema de optimizacin en un matroide, tenemos todo resuelto o Hay mucho ms sobre lgebras y algoritmos... a a

Dante Zanarini

Algoritmos Greedy

S-ar putea să vă placă și