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