Escolar Documentos
Profissional Documentos
Cultura Documentos
RESUMEN
-1-
ABSTRACT
The Objective of the voracious scheme is getting a solution the best global having
the best in the context solutions.
This algorithms try to find the best solutions of all, starting with an empty set, with the
advance of the algorithm we accumulate two sets of candidates( selected and refused),
and fuvitons that: find a set that could be the possible Solution, find if the set is
practicable. Even we have a function of selecting, that indicates the best candidate of
all, and finally we have and objective function that returns the value of the solution that
we find.
Inside the resolution of problems that adapt to this scheme we have : the salesman agent
problems( we have to find the smallest road for the salesman that have to visit several
cities and return to the starting point), Huffman Codes( uses a frequency table that each
character appears, and develop an optimum way of representing the binaries code), the
changes problem( we have to return money with the least possible number of coins),
minimum extension tree( with a not-directing grapho with weight, we have to find an
arch set that connect all the vertex, but including that the addition of the weight be the
least), waiting time minimizing problem( a server has to assist a number of people that
arrive all together to the system).
As Application we have the backpack problem, with the objective of filling all the
backpack with maximizing the benefit. For its resolution we consider three results ,
getting by voracious algorithm. Whit the first solution we choose the object with the
most total benefit, whit the second one we choose the object with least weight, and
finally we choose the object with the higher quotient (benefit/weight). Finally we chose
the solution where the total benefit is maximum, that in this case is the last choose,
which is the most best.
-2-
INTRODUCCIN
De igual forma y en aras de lograr un mejor y fcil entendimiento del tema voraz
podremos ver diferentes problemas resueltos aplicndose en ellos el esquema voraz y
logrando la resolucin de los diferentes problemas planteados. Contribuyendo as a
asimilar mejor el tema del trabajo presentado ya que si bien es cierto en la prctica se
aprende ms que en la teora, claro esta que sin la teora no podramos recurrir a la
prctica a lo que se suma el carcter netamente prctico de los algoritmos.
Finalmente veremos la aplicacin del esquema voraz con cada uno de los pasos que se
han de seguir hasta lograr la solucin ptima para nuestra aplicacin, para el cul
haremos un anlisis previo de posibles candidatos a solucionar nuestro problema para
que a partir de los resultados obtenidos se proceda a la eleccin del candidato ms
optimo y que se ajuste a los requerimientos del problema.
-3-
MARCO TERICO
ALGORITMOS VORACES
1. CONCEPTO
Un algoritmo Voraz segn su nombre lo indica, destruye o consume rpidamente el
problema que se nos presente al momento de construir un algoritmo. Los algoritmos
voraces se emplean sobre todo para resolver problemas de optimizacin, es decir,
hay que encontrar un conjunto de candidatos que optimiza la funcin objetivo o
encontrar la secuencia ptima para procesar un conjunto de tareas por un
computador.
2. FUNCIONAMIENTO
Un algoritmo voraz funciona seleccionando la tarea, que parezca ms prometedora
en un determinado instante; nunca reconsidera su decisin, sea cual fuere la
situacin que pudiera surgir ms adelante. No hay necesidad de evaluar alternativas,
ni de emplear sofisticados procedimientos de seguimiento que permitan deshacer las
decisiones anteriores, es decir, el algoritmo escoge el mejor "pedazo" que es capaz
de "comer" sin preocuparse del futuro. El enfoque que aplica un algoritmo voraz es
muy corto, y toman decisiones basndose en la informacin que tienen disponible de
modo inmediato, sin tener en cuenta los efectos que estas decisiones puedan tener en
el futuro. Por tal razn resultan fciles de inventar, fciles de implementar y, cuando
funcionan, suelen ser eficaces, pero no eficientes.
-4-
menos se pueda obtener una solucin a partir de los candidatos disponibles
inicialmente.
Existe una funcin de seleccin que indica cul es el ms prometedor de los
candidatos restantes no considerados an.
Implcitamente est presente una funcin objetivo que da el valor a la solucin
que hemos hallado (valor que estamos tratando de optimizar).
5. EL ESQUEMA VORAZ
Un algoritmo voraz es correcto si la solucin as encontrada es siempre ptima. El
esquema genrico del algoritmo voraz es:
funcin voraz(C:conjunto)
devuelve conjunto
{C es el conjunto de todos los candidatos}
inicio
S:=; {S es el conjunto en el que se construye la solucin}
mientras que solucin(S) C hacer
x:=elemento de C que
maximiza o minimiza seleccionar(x);
C:=C-{x};
si factible(S {x})
entonces S:=S {x}
fin si
fin mientras que
si solucin(S)
entonces devuelve S
sino devuelve no hay solucin
fin si
fin
6. HEURSTICAS VORACES
6.1. DEFINICIN
Es una tcnica algortmica en la cual un problema de la optimizacin es
solucionado encontrando soluciones ptimas.
6.2. OBJETIVO
Obtener buenas soluciones en un tiempo de ejecucin corto.
-5-
Normalmente, se basa en un conocimiento intuitivo del programador sobre
un determinado problema.
Existen muchos problemas para los cuales no se conocen algoritmos que
puedan encontrar la solucin de forma eficiente o en donde la solucin
exacta puede requerir un orden factorial o exponencial: el problema de la
explosin combinatoria.
-6-
b) Seleccionar la pareja de puntos cuya distancia sea mnima:
(d,e), distancia de 3 (Seleccin)
-7-
d) Fundimos los dos primeros nodos (rboles) en un nuevo rbol, sumamos
sus frecuencias y lo colocamos en el lugar correspondiente:
Y sucesivamente:
a '' C L t s e j
0 10 1100 1101 1110 11110 111110 111111
f) Y traducimos el texto:
-8-
Se precisa un cdigo libre de prefijos:
Ninguna codificacin puede ser prefijo de otra.
De esta forma, la decodificacin es inmediata pues no hay
ambigedades.
El cdigo se representa mediante un trie (rbol lexicogrfico):
rbol binario cuyas hojas son los caracteres codificados; el cdigo de
cada carcter es el camino desde la raz hasta la hoja, donde ir al hijo
izquierdo significa 0 e ir hacia el derecho significa 1
Cada hoja est etiquetada con un carcter y su frecuencia.
Cada nodo interno est etiquetado con la suma de los pesos de las
hojas de su subrbol.
Un cdigo ptimo siempre est representado por un rbol lleno: cada
nodo interno tiene dos hijos.
Si el alfabeto que se quiere codificar es C, entonces el rbol del
cdigo ptimo tiene |C| hojas y |C|-1 nodos internos.
El algoritmo voraz de Huffman construye el rbol A de un cdigo ptimo
de abajo hacia arriba.
Utiliza una cola Q de rboles con prioridades (las frecuencias hacen de
prioridades).
Empieza con un conjunto de |C| hojas en Q y realiza una secuencia de |
C|-1 mezclas hasta crear el rbol final.
En cada paso, se mezclan los dos objetos (rboles) de Q que tienen
menos frecuencia y el resultado es un nuevo objeto (rbol) cuya
frecuencia es la suma de las frecuencias de los dos objetos mezclados.
Coste temporal:
-9-
inicializacin de Q: (C)
el interior del bucle: (log C)
Coste total: (C log C)
Ejemplo:
3 clientes con t1=5, t2=10, t3=3.
orden T
1 2 3: 5 + (5+10) + (5+10+3) = 38
1 3 2: 5 + (5+3) + (5+3+10) = 31
2 1 3: 10 + (10+5) + (10+5+3) = 43
2 3 1: 10 + (10+3) + (10+3+5) = 41
3 1 2: 3 + (3+5) + (3+5+10) = 29 (OPTIMO)
3 2 1: 3 + (3+10) + (3+10+5) = 34
-10-
APLICACIN DE UN ALGORITMO VORAZ
EL PROBLEMA DE LA MOCHILA
Tenemos una mochila de capacidad M y N objetos para incluir en ella. Cada objeto tiene
un peso pi y un beneficio bi , 1 i N . Los objetos se pueden fraccionar.
El objetivo es llenar la mochila de manera que se maximice el beneficio total. Pero
como la mochila tiene capacidad M, el peso total de todos los objetos metidos en ella no
puede superar esa cantidad.
donde 0 xi 1 , 1 i N , bi 0 , pi 0 (III)
Se tiene que una solucin factible es cualquier n-tupla <x1,...,xN> que satisfaga (II) y
(III) y una solucin ptima es cualquier solucin factible para la que (I) sea mximo.
Ntese adems que todas las soluciones ptimas llenarn la mochila por completo.
Pasos M C Solucin
50 1,2,3,4 0 0 0 0
1 20 2,3,4 1 0 0 0
2 2 3,4 1 1 0 0
3 0 4 1 1 2/15 0
Pasos M C Solucin
50 1,2,3,4 0 0 0 0
1 40 1,2,3 0 0 0 1
2 25 1,2 0 0 1 1
3 7 1 0 1 1 1
-11-
4 0 7/30 1 1 1
Beneficio = 7/30 x 25 + 13 + 12 + 10 = 40,83
Step M C Solucin
50 1,2,3,4 0 0 0 0
1 40 1,2,3 0 0 0 1
2 10 2,3 1 0 0 1
3 0 2 1 0 10/15 1
2. ANLISIS DE CANDIDATOS
Analizando cual es el mejor candidato (es decir, la mejor funcin de seleccin)
Volviendo al ejemplo tenemos:
En la primera estrategia se elige el objeto con mayor beneficio total. Sin
embargo, la mochila se llena muy rpidamente con poco beneficio total.
En la segunda estrategia se elige el objeto que llene menos la mochila, para
acumular beneficios de un nmero mayor de objetos. Sin embargo, es posible
que se elija un objeto con poco beneficio simplemente porque pesa poco.
En la tercera estrategia, que es la ptima, es tomar siempre el objeto que
proporcione mayor beneficio por unidad de peso.
-12-
if (i>1) i = 1;
capacidad += i*obj.peso;
btotal += i*obj.beneficio;
cout << "Almaceno " << i << <<obj.nombre << endl;
}
cout << "Capacidad = " << capacidad << endl;
cout << "Beneficio total = " << btotal << endl;
getch();
}
Objeto.h
#ifndef OBJETO_H
#define OBJETO_H
#include<string.h>
class objeto{
private:
char *nombre;
float peso;
float beneficio;
public:
objeto(){nombre= new char[20];peso=0;beneficio=0;};
objeto& operator=(objeto &);
friend ostream& operator <<(ostream &, objeto &);
friend istream& operator >>(istream &, objeto &);
friend void main();
};
objeto& objeto::operator = (objeto &obj)
{
strcpy(nombre,obj.nombre);
peso=obj.peso;
beneficio=obj.beneficio;
return *this;
}
ostream& operator <<(ostream &sal, objeto &obj)
{
sal<<"\t\tNombre: "<<obj.nombre<<endl;
return sal;
}
istream& operator >>(istream &ent, objeto &obj)
{
cout<<"\t\tNombre: ";
ent>>obj.nombre;
cout<<"\t\tPeso: ";
do{
ent>>obj.peso;
}while(obj.peso==-1);
cout<<"\t\tBeneficio: ";
do{
ent>>obj.beneficio;
}while(obj.beneficio==-1);
return ent;
-13-
}
#endif
CONCLUSIONES
PRIMERA
Los algoritmos voraces son tpicamente usados en problemas de optimizacin.
SEGUNDA
Son algoritmos fciles de disear e implementar y cuando funcionan suelen ser eficaces
pero no necesariamente eficientes.
TERCERA
El esquema voraz trabaja directamente con funciones y lista de candidatos
CUARTA
La heurstica es una tcnica de optimizacin que utiliza informacin local.
QUINTA
En si el cdigo de Huffman es una tcnica muy til para la compresin de ficheros, en el
cual trabaja esencialmente con bits, segn el camino que tomen.
SEXTA
La vulnerabilidad del cdigo Huffman es la condicin primordial es que ninguna
codificacin puede ser prefijo de otras.
SEPTIMA
El Cdigo de Huffman principalmente mezcla los subrboles, y los almacena en una
cola de prioridad.
-14-
RECOMENDACIONES
-15-
BIBLIOGRAFA
Pginas anexas:
10. www.monografias.com/trabajos11/alcom/alcom.shtml
11. http://www.ica.luz.ve/juancol/eda/algoritmos-voraces
12. http://www.ica.luz.ve/juancol/eda/grafos
13. platon.escet.urjc.es/grupo/ docencia/edi/Gestion/descripcion.html
14. servinf.dif.um.es/~domingo/ apuntes/Algoritmica/0203/intro.ppt
15. www.itchihuahuaii.edu.mx/carreras/isc/T1S8.asp
16. mail.udlap.mx/~is111638/tesis/formal.html
17. www.udc.es/dppeu/ects/html/es/infoinf.html
18. www-ma2.upc.es/~vera/mi.ps
-16-