Es un mtodo que puede ser aplicado a numerosos problemas, especialmente los de optimizacin. Suelen ser los ms sencillos y fciles de implementar. Cuando funcionan, son eficientes. Estas tcnicas estn diseadas para aplicarse en fases, donde se toma una decisin basndose en la informacin que tiene disponible. Para ello se considera la alternativa ms prometedora (el valor ms pequeo el valor ms grande) en un determinado instante. Su enfoque es miope porque no se tiene en cuenta los efectos que estas decisiones puedan producir en el futuro. Nunca se reconsidera la decisin tomada, ni se retrocede por ninguna circunstancia. Algoritmos voraces Uno de sus principales inconvenientes es que en algunos casos no encuentre ninguna solucin an cuando sta exista. El nombre de voraces o vidos (del ingls greedy) se debe a su comportamiento: en cada etapa toman lo que pueden sin analizar la consecuencias, es decir son glotones por naturaleza.
Algoritmos voraces Problema del cambio. Pagar una cierta cantidad a un cliente utilizando el menor nmero de monedas posible. Se tienen las monedas de 5, 2, 1, 0.50, 0.20, 0.10, 0.05 y 0.01 cntimos. Algoritmos voraces - Ejemplos El monto que debe de pagar es de 1.11 soles Se paga con una moneda de 5 soles El vuelto que se debe dar es de 3.89 soles. 1 moneda de 2 1 moneda de 1 1 moneda de 50 cntimos 1 moneda de 20 cntimos 1 moneda de 10 cntimos 1 moneda de 5 cntimos 4 monedas de 1 cntimo. Total: 10 monedas. Algoritmos voraces - Ejemplos Para solucionar algn problema de forma ptima, disponemos de un conjunto de candidatos. Las monedas disponibles. Las aristas de un grafo que se pueden usar para construir un grafo. El conjunto de tareas que hay que planificar. Una funcin objetivo que determine el valor de la solucin hallada. Es la funcin que queremos maximizar o minimizar y no aparece explcitamente en el algoritmo. El nmero de monedas utilizadas para dar el cambio. La longitud de ruta que hemos construido. El tiempo necesario para procesar todas las tareas de la planificacin.
Caractersticas Generales Una funcin de seleccin que indica en cualquier momento el candidato idneo para formar la solucin entre los que an no han sido seleccionados o rechazados. Pueden existir varias funciones de seleccin, que estn relacionadas con la funcin objetivo. Una funcin que compruebe si un cierto subconjunto de candidatos constituye una solucin de nuestro problema, ignorando si es o no ptima por el momento. Suman las monedas seleccionadas la cantidad a pagar? Las aristas seleccionadas forman una ruta hasta el nodo que deseamos alcanzar? Estn planificadas todas las tareas?
Caractersticas Generales Una funcin que compruebe si un cierto subconjunto de candidatos es factible, es decir que sea posible seguir aadiendo candidatos y encontrar una solucin. A medida que avanza el algoritmo se forman dos conjuntos Uno contiene candidatos que ya han sido considerados y seleccionados (solucin). El otro contiene candidatos que ya han sido considerados y rechazados.
Caractersticas Generales 2 Kg. Comprar papas en el mercado. Seleccionar las mejores papas. S o no? Algoritmos voraces - Ejemplo 10 Inicialmente empezamos con una solucin vaca, sin papas. Seleccionamos la mejor papa del montn o la que parezca que es la mejor (Funcin de seleccin). Examinamos la papa detenidamente y decidimos si se coge o no (considerarlo). Si no se coge, se aparta del montn (rechazo). Si se coge, se mete a la bolsa y ya no se saca (seleccionado). Una vez que tenemos 2 kilos paramos. Algoritmos voraces - Ejemplos Buscamos un subconjunto de candidatos que constituya la solucin ptima, es decir, maximice o minimice la funcin objetivo. El problema se interpreta como: tomar algunos elementos de entre un conjunto de candidatos. El orden el que se cogen puede ser importante o no. Los algoritmos trabajarn por etapas, tomando en cada un de ellas la decisin que le parece mejor, sin considerar las consecuencias futuras. Inicialmente el conjunto de elementos seleccionados estar vaco. En cada paso se considera aadir a ste conjunto el mejor candidato sin considerar los restantes, guindonos por la funcin de seleccin. Mtodo General Antes de aadir un candidato a la solucin que estamos construyendo, se evaluar si sta es factible. Si el conjunto ampliado sigue siendo factible entonces aadimos el candidato actual al conjunto de candidatos seleccionados. En caso contrario, se rechaza el candidato. Cada vez que se incluye un candidato al conjunto de candidatos seleccionados se comprobar si el conjunto obtenido es la solucin. Mtodo General Se puede generalizar el proceso intuitivo a un esquema algortmico general.
El esquema trabaja con los siguientes conjuntos de elementos:
C: Conjunto de elementos candidatos, pendientes de seleccionar (inicialmente todos).
S: Candidatos considerados y seleccionados para la solucin.
R: Candidatos considerados pero rechazados.
Qu o cules son los candidatos? Depende de cada problema. Mtodo General Mtodo General Mtodo CClase.Voraz (C: Candidatos, S: Solucin, R: Rechazados ) Mientras ((No Solucin(S)) y (C <> vaco)) hacer x Seleccionar( C ) C C - {x} Si (Factible(S, {x})) entonces Insertar(S,{x}) Sino R R U {x} fSi fMientras Si (Solucin(S)) entonces Retornar S Sino Retornar No hay solucin fSi fMtodo Funciones Genricas Solucin (S). Comprueba si un conjunto de candidatos es una solucin (independientemente de que sea ptima o no). Seleccionar (C). Devuelve el elemento ms prometedor del conjunto de candidatos pendientes (no seleccionados ni rechazados). Factible (S, x). Indica si a partir del conjunto S y aadiendo x, es posible construir una solucin (posiblemente aadiendo otros elementos). Insertar (S, x). Aade el elemento x al conjunto solucin. Adems, puede ser necesario hacer otras cosas. Objetivo (S). Dada una solucin devuelve el coste asociado a la misma (resultado del problema de optimizacin). Anlisis de tiempos de ejecucin La complejidad depende del nmero de candidatos, de las funciones bsicas a utilizar, del nmero de elementos de la solucin. n: nmero de elementos de Candidatos. m: nmero de elementos de una solucin. Repetir, como mximo n veces y como mnimo m: Seleccin de un elemento entre los candidatos: f( n ). Entre O(1) y O( n ). Comprobar si el valor actual es solucin: h( m ). Normalmente O( m ). La funcin factible es parecida a solucin, pero con una solucin parcial g( m ). La unin de un nuevo elemento a la solucin puede requerir otras operaciones de clculo, k( n, m ). Cambio de monedas Construir un algoritmo que dada una cantidad P devuelva esa cantidad usando el menor nmero posible de monedas. Disponemos de monedas con valores de 5, 2, 1, 0.50, 0.20, 0.10, 0.05 y 0.01 cntimos de soles. El monto que debe de pagar es de 1.11 soles. Se paga con una moneda de 5 soles. El vuelto es de 3.89 soles. Cambio de monedas Devolver 3,89 Soles. 1 moneda de 2 1 moneda de 1 1 moneda de 50 cntimos 1 moneda de 20 cntimos 1 moneda de 10 cntimos 1 moneda de 5 cntimos 4 monedas de 1 cntimo. Total: 10 monedas. El mtodo intuitivo se puede entender como un algoritmo voraz: en cada paso aadir una moneda nueva a la solucin actual, hasta llegar a P. Cambio de monedas Conjunto de candidatos: todos los tipos de monedas disponibles. Suponemos una cantidad ilimitada de cada tipo. Solucin: conjunto de monedas que sumen P. Funcin objetivo: minimizar el nmero de monedas.
Representacin de la solucin: El conjunto S est constituido (s 1 , s 2 , s 3 , s 4 , s 5 , s 6 , s 7 , s 8 ), donde s i es el nmero de monedas usadas de tipo i. Suponemos que la moneda i vale v i . Formulacin: Minimizar s i , sujeto a s i v i = P, s i 0 i=1..8 i=1..8 Cambio de monedas Funciones del esquema:
inicializacin. Inicialmente s i = 0, para todo i= 1..8
solucin. El valor actual es solucin si s i v i = P
seleccionar. Qu moneda se elige en cada paso de entre los candidatos?
Respuesta: Elegir en cada paso la moneda de valor ms alto posible, pero sin sobrepasar la cantidad que queda por devolver.
factible. Valdr siempre verdad.
En lugar de seleccionar monedas de una en una, usamos la divisin entera y cogemos todas las monedas posibles de mayor valor. Cambio de monedas Garantiza siempre la solucin ptima? Para este sistema monetario s. Pero no siempre... Supongamos que tenemos monedas de 100, 90 y 1. Queremos devolver 180. Algoritmo voraz. 1 moneda de 100 y 80 monedas de 1, en total 81 monedas. Solucin ptima. 2 monedas de 90, en total 2 monedas. Cambio de monedas Anlisis de tiempos de ejecucin El orden de complejidad depende de: El nmero de candidatos existentes. Los tiempos de las funciones bsicas utilizadas. El nmero de elementos de la solucin.
Ejemplo. n: nmero de elementos de C. m: nmero de elementos de una solucin.
Repetir, como mximo n veces y como mnimo m: Funcin de seleccin: f(n). Entre O(1) y O(n). Funcin solucin: g(m). Normalmente O(1) O(m). Funcin factible (parecida a solucin, pero con una solucin parcial): h(m). Insercin de un elemento: k(n, m). Cambio de monedas Anlisis de tiempos de ejecucin
Tiempo de ejecucin genrico:
t(n,m) O(n*(f(m)+g(n)+h(m)) + m*k(n, m))
Ejemplos: Algoritmos de Prim y Dijkstra: n candidatos, la funcin de seleccin e insercin son O(n): O(n 2 ).
Devolucin de monedas: podemos encontrar el siguiente elemento en un tiempo constante (ordenando las monedas): O(n).
El anlisis depende de cada algoritmo concreto.
En la prctica los algoritmos voraces suelen ser bastante rpidos, encontrndose dentro de rdenes de complejidad polinomiales. Importancia de Algoritmos Voraces No hay necesidad de evaluar alternativas, ni emplear sofisticados procedimientos de decisiones.
Es una familia de algoritmos que se utiliza para resolver problemas de optimizacin.
Son fciles de inventar, implementar y son eficientes en cierta medida.
No todos los problemas se pueden resolver con este enfoque.