You are on page 1of 24

Algoritmos voraces

Robert Espinoza Domnguez


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.

You might also like