Documente Academic
Documente Profesional
Documente Cultură
Esquema
Dado un conjunto finito de entradas, un algoritmo voraz devuelve un conjunto
(seleccionados) tal que y que adems cumple con las restricciones del problema
inicial. A cada conjunto que satisfaga las restricciones se le suele denominar
prometedor, y si este adems logra que la funcin objetivo se minimice o maximice
(segn corresponda) diremos que es una solucin ptima.
Algoritmo de Kruskal
Algoritmo de Prim
Algoritmo de Dijkstra
Algoritmo de Kruskal
El algoritmo de Kruskal es un algoritmo de la teora de grafos para encontrar
un rbol recubridor mnimo en un grafo conexo y ponderado. Es decir, busca un
subconjunto de aristas que, formando un rbol, incluyen todos los vrtices y donde
el valor total de todas las aristas del rbol es el mnimo. Si el grafo no es conexo,
entonces busca un bosque expandido mnimo (un rbol expandido mnimo para
cada componente conexa). El algoritmo de Kruskal es un ejemplo de algoritmo
voraz.
Un ejemplo de rbol expandido mnimo. Cada punto representa un vrtice, el cual
puede ser un rbol por s mismo. Se usa el Algoritmo para buscar las distancias
ms cortas (rbol expandido) que conectan todos los puntos o vrtices.
Funciona de la siguiente manera:
se crea un bosque B (un conjunto de rboles), donde cada vrtice del grafo
es un rbol separado
mientras C es no vaco
Algoritmo de Prim
El algoritmo de Prim es un algoritmo perteneciente a la teora de los grafos para
encontrar un rbol recubridor mnimo en un grafo conexo, no dirigido y
cuyas aristas estn etiquetadas.
En otras palabras, el algoritmo encuentra un subconjunto de aristas que forman
un rbol con todos los vrtices, donde el peso total de todas las aristas en el rbol
es el mnimo posible. Si el grafo no es conexo, entonces el algoritmo encontrar
el rbol recubridor mnimo para uno de los componentes conexos que forman
dicho grafo no conexo.
El algoritmo fue diseado en 1930 por el matemtico Vojtech Jarnik y luego de
manera independiente por el cientfico computacional Robert C. Prim en 1957 y
redescubierto por Dijkstra en 1959. Por esta razn, el algoritmo es tambin
conocido como algoritmo DJP o algoritmo de Jarnik.
Descripcin conceptual
El algoritmo incrementa continuamente el tamao de un rbol, comenzando por un
vrtice inicial al que se le van agregando sucesivamente vrtices cuya distancia a
los anteriores es mnima. Esto significa que, en cada paso, las aristas a considerar
son aquellas que inciden en vrtices que ya pertenecen al rbol.
El rbol recubridor mnimo est completamente construido cuando no quedan ms
vrtices por agregar.
Algoritmo de Dijkstra
El algoritmo de Dijkstra, tambin llamado algoritmo de caminos mnimos, es
un algoritmo para la determinacin del camino ms cortodado un vrtice origen al
resto de los 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).
Algoritmo. -
Complejidad
Orden de complejidad del algoritmo: O(|V|2+|A|) = O(|V|2) sin utilizar cola de
prioridad, O((|A|+|V|) log |V|) = O(|A| log |V|) utilizando cola de prioridad (por
ejemplo un montculo). Por otro lado, si se utiliza un Montculo de Fibonacci,
sera O(|V| log |V|+|A|).
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 las 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.