You are on page 1of 4

ALGORITMOS VORACES

Los algoritmos voraces tpicamente se utilizan en la solucin de problemas de


optimizacin y se caracterizan por ser:
Sencillos de disear y codificar.
Miopes: toman decisiones con la informacin que tienen disponible de forma
inmediata, sin tener en cuenta sus efectos futuros.
Eficientes (cuando funcionan).
No siempre garantizan alcanzar la solucin ptima.
El nombre voraz proviene de que, en cada paso, el algoritmo escoge el mejor "pedazo"
que es capaz de "comer" sin preocuparse del futuro. Nunca deshace una decisin ya
tomada: una vez incorporado un candidato a la solucin permanece ah hasta el final; y
cada vez que un candidato es rechazado, lo es para siempre.

CARACTERSTICAS DE LOS ALGORITMOS VORACES
Los algoritmos voraces suelen ser bastante simples. Se emplean sobre todo para resolver
problemas de optimizacin, como por ejemplo, encontrar la secuencia ptima para
procesar un conjunto de tareas por un computador, hallar el camino mnimo de un grafo,
etc. Habitualmente, los elementos que intervienen son:
un conjunto o lista de candidatos (tareas a procesar, vrtices del grafo, etc);
un conjunto de decisiones ya tomadas (candidatos ya escogidos).
una funcin que determina si un conjunto de candidatos es una solucin al
problema (aunque no tiene por qu ser la ptima).
una funcin que determina si un conjunto es completable, es decir, si aadiendo a
este conjunto nuevos candidatos es posible alcanzar una solucin al problema,
suponiendo que esta exista.
una funcin de seleccin que escoge el candidato an no seleccionado que es ms
prometedor.
una funcin objetivo que da el valor/coste de una solucin (tiempo total del
proceso, la longitud del camino, etc) y que es la que se pretende maximizar o
minimizar.
http://www.ma.uva.es/~antonio/Industriales/Clase_09-0/LabM/Algoritmo_Dijkstra.pdf




ALGORITMO DE DIJKSTRA
El algoritmo de Dijkstra, tambin llamado algoritmo de caminos mnimos, es un algoritmo
para la determinacin del camino ms corto dado un vrtice origen al resto de vrtices en
un grafo con pesos en cada arista. Su nombre se refiere a Edsger Dijkstra, quien lo
describi por primera vez en 1959.
La idea subyacente en este algoritmo consiste en ir explorando todos los caminos ms
cortos que parten del vrtice origen y que llevan a todos los dems vrtices; cuando se
obtiene el camino ms corto desde el vrtice origen, al resto de vrtices que componen el
grafo, el algoritmo se detiene. El algoritmo es una especializacin de la bsqueda de costo
uniforme, y como tal, no funciona en grafos con aristas de coste negativo (al elegir
siempre el nodo con distancia menor, pueden quedar excluidos de la bsqueda nodos que
en prximas iteraciones bajaran el costo general del camino al pasar por una arista con
costo negativo).
Pero en el mbito de los algoritmos voraces. Este halla el camino menor entre 2 nodos,
pero no siempre este camino es el ms corto porque el algoritmo consume la arista
menor que encuentra y no mira en un futuro; es decir, no mira en un futuro y no siempre
escoge el camino de menor valor.
El algoritmo de Dijkstra en nuestro caso est diseando en java, en el IDE NetBeans.
Para ello captura N nodos; que se le asigna un nombre respectivo y en donde no se
pueden repetir nodos, es decir, no existen ms de un nodo con el mismo nombre.
Seguidamente se le asigna el valor de las aristas entre los nodos existentes y el usuario
decide escoger la distancia menor a hallar. El algoritmo halla el camino y la suma de sus
aristas.










Aplicaciones de Dijkstra

Encaminamiento de paquetes por los routers: En un momento dado, un
mensaje puede tardar cierta cantidad de tiempo en atravesar cada lnea
(por ejemplo, por efectos de congestin). En este caso, tenemos una red
con dos nodos especiales, el de inicio y el de llegada. Los pesos de las
aristas seran los costes. El objetivo del algoritmo es encontrar un camino
entre estos dos nodos cuyo coste total sea el mnimo.(para ms
informacin, (Wikipedia )

Aplicaciones para Sistemas de informacin geogrficos: extraccin de
caractersticas curvilneas de imgenes usando tcnicas de minimizacin del
camino: La imagen se representa como una matriz de puntos, cada uno con
una intensidad. Cada nodo es un punto (pxel) de la imagen. El peso de las
aristas es la diferencia de color.

Reconocimiento de lenguaje hablado: Se puede construir un grafo cuyos
vrtices correspondan a palabras posibles y las aristas unan palabras que
pueden ir colocadas al lado de las otras. Si el peso de las aristas
corresponde a la probabilidad de que estn as colocadas, el camino ms
corto en el grafo ser la mejor interpretacin de la frase.

Enrutamiento de aviones y trfico areo: Consiste en un agente de
solicitudes de viaje software para hacer un programa de vuelos para los
clientes. El agente tiene acceso a una base de datos con todos los
aeropuertos y los vuelos como el nmero de vuelo, el aeropuerto de origen
y destino y los horarios de salida y de llegada. La aplicacin se usa para
determinar la hora de llegada ms temprana para el destino dado un
aeropuerto de origen y hora de inicio.









Problemas reales en los que la solucin es Dijkstra:

Llegar a desde un punto de una ciudad hasta otro por el camino ms
rpido

Cmo rodear una montaa por el camino ms corto

Conocer el camino ms rpido que sigue la informacin a travs de las
neuronas.


COMPLEJIDAD
Orden de complejidad del algoritmo: O(|V|2+|E|) = O(|V|2) sin utilizar cola de prioridad,
O((|E|+|V|) log |V|) utilizando cola de prioridad (por ejemplo un montculo).
Podemos estimar la complejidad computacional del algoritmo de Dijkstra (en trminos de
sumas y comparaciones). El algoritmo realiza a lo ms n-1 iteraciones, ya que en cada
iteracin se aade un vrtice al conjunto distinguido. Para estimar el nmero total de
operaciones basta estimar el nmero de operaciones que se llevan a cabo en cada
iteracin. Podemos identificar el vrtice con la menor etiqueta entre los que no estn en
Sk realizando n-1 comparaciones o menos. Despus hacemos una suma y una
comparacin para actualizar la etiqueta de cada uno de los vrtices que no estn en Sk.
Por tanto, en cada iteracin se realizan a lo sumo 2(n-1) operaciones, ya que no puede
haber ms de n-1 etiquetas por actualizar en cada iteracin. Como no se realizan ms de
n-1 iteraciones, cada una de las cuales supone a lo ms 2(n-1) operaciones, llegamos al
siguiente teorema.
TEOREMA: El Algoritmo de Dijkstra realiza O(n2) operaciones (sumas y comparaciones)
para determinar la longitud del camino ms corto entre dos vrtices de un grafo
ponderado simple, conexo y no dirigido con n vrtices.
http://es.wikipedia.org/wiki/Algoritmo_de_Dijkstra

You might also like