You are on page 1of 7

Algoritmos Avaros (Greedy

Algorithms)
Agustín J. González
ELO-320: Estructura de Datos y
Algoritmos

1

el algoritmo de Dijkstra para el camino más corto en un grafo desde una única fuente. Éstos producen una solución óptima cuando se puede llegar a ésta a través de elecciones localmente óptimas. Sacar mayor provecho inmediato. o avaros (Greedy Algorithms).Introducción      Hay muchos algoritmos que pueden ser clasificados bajo la categoría de Algoritmos Oportunistas. Éstos no conducen siempre a una solución óptima. Éstos se caracterizan por hacer la elección que parece mejor en el momento. La idea es optar por la mejor opción de corto plazo. 2 . pero para muchos casos sí. por ejemplo: Minimum-spanning-tree (árbol de mínima extensión). Este método es muy poderoso y trabaja bien en muchos algoritmos que veremos en las próximas semanas.

e. 3 ... Suponemos que las actividades están ordenadas por orden creciente de tiempo de término: fo  f1  f2  f3  f4 . 2. Problema: Tenemos un conjunto de S={0. 3. i. sabemos que podemos ordenarlas en tiempo O(n lg n).Problema de la selección de actividades    Se requiere itinerar el uso de un recurso entre varias actividades que compiten.. Cada actividad tiene un tiempo de partida si y un tiempo de término fi .  fn-1 Si no fuera así. n-1} actividades que desean usar un recurso (como una sala de clases por ejemplo) del cual sólo uno puede usarse a la vez. 1. . La tarea consiste en seleccionar el conjunto de cardinalidad máxima de actividades mutuamente compatibles. donde si  fi. que no se traslapen. .

} return (m). } 4 . float f [. i++) if (s [i >= f [j) { A [m++ = i. j = 0. A[m++ = 0. j = i. m = 0. int A[) { /* s y f son arreglos de tiempos de partida y término */ /* n: número de actividades compitiendo */ /* A: Arreglo de salida indicando la asignación óptima para máximo número de actividades*/ /* se retorna el número de actividad itineradas en A*/ int i.Problema de la selección de actividades  Int Selector_de_Actividades(float s[. int n. /* La primera es la de menor tiempo final*/ for (i=1. i < n.

La estrategia fue asignar la actividad que dejara el recurso libre la mayor cantidad de tiempo en el futuro y que fuera compatible con las anteriores. Ejemplo: sea 0 1 2 3 4 5 6 7 8 9 10 S 1 3 0 5 3 5 6 8 8 2 12 F 4 5 6 7 8 9 10 11 12 13 14 0 1 0 2 0 3 0 3 4 0 3 0 3 0 3 5 6 7 0 3 7 0 3 7 8 9 0 1 2 0 3 7 0 3 7 3 4 5 6 7 8 9 10 10 10 11 12 13 14 5 .Ejemplo    Se puede demostrar que la solución aquí propuesta es óptima.

6 . luego el segundo y así sucesivamente hasta completar la carga límite. Luego los ordena de mayor a menor precio por unidad de peso y va tomando el primer producto hasta agotarlo. Conocemos el peso total de cada mercadería y su precio total. Las mercaderías que tiene a su disposición se venden a granel. El problema del ladrón es cuanto tomar de cada producto para lograr llevar un botín de mayor valor. Como nuestro límite es en peso. Un ladrón que ingresa a robar a una tienda dispone de un saco que puede cargar hasta un peso W límite.Otro problema “Greedy”    Considere el problema del saco de mercaderías. la estrategia greedy primero calcula el valor por gramo (o kilo) de cada producto.

7 . y C de 30 kilos vale 12 mil. Los valores por unidad de peso son: A=> 0.4 $/k. Tenemos los siguientes productos: A de 10 kilos vale 6 mil. Toma B y consigue productos por 16 mil. B de 20 kilos vale 10 mil.6 $/k. Si el ladrón carga A luego sólo puede cargar B o C.Variante del problema anterior      Una variante de este problema es el problema del saco de mercadería discreto. B=> 0. Ejemplo: Supongamos que el saco puede cargar 50 kilos. La mejor solución es tomar B y C por un total de 22 mil.5 $/k. C => 0. En este caso las mercaderías no se pueden llegar en fracciones ni tampoco se repiten. En este caso la estrategia greedy descrita previamente no conduce a la solución óptima.