Vous êtes sur la page 1sur 10

Universidad Don Bosco

Facultad de Ingeniera
Escuela de Ingeniera en Computacin
Ciclo 02 2015 / Grupo: 03T
Asignatura: Programacin IV

ALGORITMOS PARA GRAFOS


Objetivos
Al final de la clase los estudiantes sern capaces de:
Conocer y aplicar diferentes algoritmos para el manejo de grafos.
Calcular el camino mnimo desde un vrtice al resto de los vrtices.
Determinar si hay camino entre cualquier par de vrtices de un grafo.
Realizar en C# la implementacin de los algoritmos estudiados.

Introduccin
Existen numerosos problemas que se pueden formular en trminos de grafos. Ejemplo de ello es la
planificacin de las tareas que completan un proyecto, encontrar las rutas de menor longitud entre
puntos geogrficos, calcular el camino ms rpido en un transporte, determinar el flujo mximo que
puede llegar desde una fuente a, por ejemplo, una urbanizacin, entre otros.
La resolucin de estos problemas requiere examinar todos los nodos o todas las aristas del grafo
que representa al problema, sin embargo, existen ocasiones en que la estructura del problema es tal
que solo se necesitan visitar algunos nodos o bien algunas aristas.
Los algoritmos imponen implcitamente un orden en estos recorridos: visitar el nodo ms prximo
o las aristas ms cortas, y as sucesivamente, otros algoritmos no requieren ningn orden
concreto en el recorrido.

Camino ms Corto
Cuando se trabaja con grafos dirigidos, etiquetados o ponderados con factores de peso no
negativos, es frecuente buscar el camino ms corto entre dos vrtices dados; es decir, el camino que
nos permite llegar desde un vrtice origen a un vrtice destino recorriendo la menor distancia o con
el menor costo.

Pgina 1 de 10

Los algoritmos ms usados para este fin son: Dijkstra, Floyd y Warshall.
Los tres algoritmos utilizan una matriz de adyacencia ponderada o etiquetada: que es la misma
matriz de adyacencia utilizada para representar grafos, pero con la diferencia que en lugar de
colocar un nmero 1 cuando dos vrtices son adyacentes, se coloca el peso o ponderacin
asignado a la arista que los une.
Con frecuencia en la matriz de adyacencia etiquetada suele utilizarse la siguiente notacin:
Suponiendo que M [i, j] representa la matriz de adyacencia, tenemos:
M [i, j] = 0 ; si i = j
M [i, j] = 1000 si no existe un camino de i a j; donde j j.
M [i, i] = costo de ir del vrtice i al vrtice j
Otro nombre con el cual suele llamarse a una matriz de adyacencia etiquetada es: matriz de
distancia o matriz de costos.
El problema de buscar un camino ms corto entre dos nodos dados se puede resolver mediante un
algoritmo voraz conocido como Algoritmo de Dijkstra.
Qu es un Algoritmo Voraz?
Un algoritmo voraz es aquel que, para resolver un determinado problema, sigue una heurstica
consistente en elegir la opcin ptima en cada paso local con la esperanza de llegar a una solucin
general ptima.

Algoritmo del camino ms corto o Ruta ms corta (Algoritmo Dijkstra)


El algoritmo Dijkstra es un algoritmo eficiente (de complejidad O(n2), donde n es el nmero de
vrtices) que sirve para encontrar el camino de coste mnimo desde un nodo origen a todos los
dems nodos del grafo. Fue diseado por el holands Edsger Wybe Dijkstra, en 1959.
Este algoritmo es un tpico ejemplo de algoritmo vido, que resuelven los problemas en sucesivos
pasos, seleccionando en cada paso la solucin ms ptima con el objeto de resolver el problema.
El fundamento sobre el que se basa este algoritmo es el principio de optimizar: si el camino ms
corto entre los vrtices u y v pasa por el vrtice w, entonces la parte del camino que va de w a
v debe ser el camino ms corto entre todos los caminos que van de w a v. De esta manera, se
van construyendo sucesivamente los caminos de coste mnimo desde un vrtice inicial hasta cada
uno de los vrtices del grafo, y se utilizan los caminos conseguidos como parte de os nuevos
caminos.

Pgina 2 de 10

Dicho en otras palabras:


Dado un grafo a cuyos arcos se ha asociado una serie de pesos, se define el camino de coste
mnimo de un vrtice u a otro v, como el camino donde la suma de los pesos de los arcos que lo
forman es la ms baja entre todos los caminos posibles de u a v .
El algoritmo de Dijkstra en cada paso selecciona un vrtice v cuya distancia es desconocida, entre
los que tienen la distancia ms corta al vrtice origen s, entonces el camino ms corto de s a v
ya es conocido y marca el vrtice v como ya conocido. As sucesivamente se van marcando
nuevos vrtices hasta que estn todos marcados; en ese momento es conocida la distancia mnima
del origen s al resto de los vrtices.
Entre las condiciones ms importantes que deben considerarse para aplicar el algoritmo estn:
Las aristas deben tener un peso no negativo.
El grafo debe ser dirigido y por supuesto ponderado.
Una posible aplicacin de este algoritmo se presenta cuando se desea encontrar la ruta ms corta
entre dos ciudades; cada vrtice representa una ciudad y las aristas representan la duracin de os
vuelos.
A continuacin, se presenta el algoritmo:
La implementacin de los algoritmos (codificacin o pseudocdigo) puede variar de acuerdo a la
lgica de cada programador. Por lo tanto, se presentar inicialmente una explicacin muy general
sobre la lgica del algoritmo y su secuencia de ejecucin, posteriormente se presentar la
explicacin del pseudocdigo para implementar el algoritmo.
Para la explicacin general, se tomar como referencia los siguientes pasos:
Seleccionar vrtice de partida, es decir, un origen.
Marcar el punto de partida como el punto de inicio.
Determinar los caminos especiales desde el nodo de partida, es decir, el de inicio.
o Camino especial: es aquel que solo puede trazarse a travs de los nodos o
vrtices ya marcados.
Para cada nodo marcado, se debe determinar si es mejor usar el camino especial antes
calculado o si es mejor usar el nuevo camino que resulte al marcar este nuevo nodo.
Para seleccionar un nuevo nodo no marcado como referencia, deber tomarse aquel cuyo
camino especial para llegar a l es el mnimo, por ejemplo si anteriormente marqu el vrtice
2, el cual tiene dos nodos adyacentes 3 y 4 cuyo peso en la arista corresponde a 10 y 5
Pgina 3 de 10

respectivamente, se tomar como nodo de partida el 4, ya que el peso del camino a arista
es menor.
Cada camino mnimo corresponde a la suma de los pesos de las aristas que forman el
camino para ir del nodo principal al resto de nodos, pasando nicamente por caminos
especiales, es decir, nodos marcados.

Consideraciones iniciales para la explicacin del algoritmo Dijkstra


Utilizaremos un arreglo D, para almacenar las distancias, las cuales representarn en todo
momento la distancia mnima de ir de un nodo de partida al resto de nodos, es importante
aclarar que en cada nuevo camino que se descubra muy probablemente se encuentre un
camino que sea ms eficiente que otro ya encontrado para ir del vrtice v al w, por lo
tanto los valores de D podran cambiar en la medida que se encuentren nuevos caminos
mnimos.
Para el vector D se utilizarn sub ndices del 0 al n-1 y cada uno corresponder a un
vrtice del grafo que se tomar como ejemplo (ver figura 1), as el grafo tiene 7 vrtices en
donde cada vrtice tendr una posicin dentro del vector, as el vrtice 1 corresponder a la
posicin 0, el vrtice 2 a la posicin 1, el vrtice 3 a la posicin 2, y as sucesivamente.
Se marcar con un sombreado cada nuevo nodo de partida.
Se utilizarn dos grficos, uno del grafo para el cual estamos aplicando el algoritmo Dijkstra
y otro que nos servir para trazar los caminos mnimos (especiales).

Pgina 4 de 10

Funcionamiento y lgica de Dijkstra


Considere el grafo de la figura 1, y suponga que quiere determinar el costo del camino mnimo que
lleva del vrtice 1 a cada uno de los dems vrtices del grafo:

1
18

10
6

3
2

20

8
2

6
5
10

7
Figura 1 - Grafo Dirigido

Pasos:
1. Se marca el vrtice origen y calcular el costo de todos los caminos especiales, esto es
marcamos con un sombreado el vrtice 1 (ver figura 2) y a partir de l vemos que tenemos
dos caminos especiales: el que va del vrtice 1 al 2 y el que va del 1 al 3, tomamos el peso
de la arista de ambos caminos y lo ingresamos a nuestro vector D y el resto de posiciones
de D quedan vacas o colocamos 0 para indicar que no hay caminos especiales desde el 1
al resto de los vrtices.
Observe a figura 3 (representacin de los caminos especiales) como se marcan los primeros
caminos y que corresponden a los caminos mnimos inicialmente encontrados desde el
vrtice 1 al vrtice 2 y desde el vrtice 1 al vrtice 3, cuyos pesos son 10 y 18
respectivamente.
Como nuestro nodo inicial es 1 y en el vector de distancias corresponde a la posicin 0
entonces siempre esta posicin que corresponde al nodo de partida se coloca 0 y sta
nunca cambia (ver figura 4):

Pgina 5 de 10

2. Ahora seleccionamos el vrtice no marcado (es decir no sombreado) con costo de camino
especial mnimo, para el caso corresponde al vrtice 2, el cual es el vrtice cuyo camino
para llegar hacia l es menor, si recuerda anteriormente calculamos dos caminos especiales
del vrtice 1 2 que tena un peso de 10 y el del vrtice 1-3 que tena un peso de 18, como
el menor de estos pesos corresponde al camino especial que va del vrtice 1-2 se toma,
entonces se toma el vrtice 2 para tomarlo como punto de partida y calcular los siguientes
caminos especiales de peso mnimo.
As sombreamos el vrtice 2 (ver figura 5) y vemos que este vrtice tiene dos caminos
especiales: el que va del vrtice 2 3 con un peso de 6 y el que va del vrtice 2 -5 con un
peso de 3, ahora bien aqu sucede algo especial y es en donde comienza a distinguirse con
mayor exactitud la accin de Dijkstra, anteriormente encontramos que el camino del vrtice 1
3 era por la arista que tiene un peso 18, pero esta vez encontramos que es ms eficiente ir
desde el vrtice 1 3 por el camino que va del vrtice 1 2 3 en donde el peso de dicho
camino es igual a sumar 10 (del camino del vrtice 1 - 2) + 6 (del camino del vrtice 2 - 3),
esta suma es igual a 16 por lo tanto 16 es menor que 18, lo que hacemos es descartar del
vector D en la posicin 2 el valor de 18 (que anteriormente se tena) y se coloca el nuevo
valor 16 (ver figura 7) y se agrega a la posicin 4 el peso de 13 que corresponde al otro
camino especial calculado desde el vrtice 1 5 el cual sigue el recorrido: 1 2 - 5. Y desde
luego que nuestro grfico de caminos especiales cambia (ver figura 6).
Es importante hasta este punto aclarar que no es importante para Dijkstra el nmero de
aristas por las cuales debe pasar para encontrar un camino mnimo, a Dijkstra solo le
interesa el peso de la arista no as el nmero de aristas.

Pgina 6 de 10

3. El proceso de seleccionar vrtices no marcados para encontrar sus caminos mnimos se


repite siguiendo la misma lgica, para el caso corresponde seleccionar el vrtice 5, el cual
corresponde al camino especial que se calcul anteriormente (ver figura 6) el cual tiene un
peso de 3 menor que el otro camino calculado desde el vrtice 2 3, por lo tanto marcamos
a 5 como nuevo vrtice de partida (ver figura 8) y calculamos sus caminos especiales, para
el caso tenemos dos caminos especiales el que va del vrtice 5 4 y el que va del vrtice 5
7
(ver figura 9).

Para el caso de nuestro vector, observe que siempre la posicin 0 es 0 (ver figura 10), la posicin 1
es 10 porque hasta el momento no hemos encontrado un camino ms pequeo que nos lleve del
vrtice 1 - 2 por lo tanto dicho valor se mantiene (ver figura 10), en el caso de la posicin 2 igual se
mantiene porque hasta el momento no hemos encontrado otro camino ms pequeo que nos lleve
del vrtice 1 3 (ver figura 10), pero para el caso de la posicin 3 ya tenemos un camino que nos
lleve del vrtice 1 4, el cual hasta el momento es el mnimo (ver figura 10) y note que corresponde
a la suma de los pesos de todas las aristas que deben recorrerse, para el caso el recorrido de este
camino es 1- 2 5 4 que corresponde a la suma de los pesos 10+3+8 = 21 (ver figura 9).
La posicin 4 del vector de distancias se mantiene igual (ver figura 10) y la posicin 6 tiene un valor
de 23 porque es el camino mnimo encontrado hasta el momento para ir del vrtice 1 7 el cual

Pgina 7 de 10

sigue la secuencia de caminos 1 2 5 7 (ver figura 9) y cuya suma de pesos corresponde a


10+3+10 = 23.
Es importante que note que hasta el momento todos los caminos que hemos calculado y hemos
tomado en cuenta para calcular los distintos caminos mnimos, son caminos que pasan nica y
exclusivamente por los vrtices ya marcados, ningn camino en Dijkstra puede pasar por un vrtice
no marcado o visitado, as observe que cuando marcamos el vrtice 5 (ver figura 8) decimos que
podemos llegar del vrtice 1 al 7 a travs del camino que sigue la secuencia de 1 2 5 cosa que
es posible porque tanto el vrtice 1, 2 y 5 estn marcados.

4. Bien el proceso es el mismo y se contina mientras haya vrtices no marcados. Ahora


corresponde marcar el vrtice 3, el cual a comparacin de los caminos especiales que llevan
a vrtices no marcados an de los vrtices 5 y 2 (ver figura 8) es el menor, por lo tanto se
marca y se toma l. A partir de este punto solo se mostrarn las figuras con los cambios que
son necesarios hacer al aplicar nuevamente el proceso, intente usted mismo reflexionar
porque los cambios se dan de esa manera y trate de documentar cada una de las
secuencias siguientes:

Pgina 8 de 10

Bien finalmente al examinar el resultado de la grfica de los caminos especiales, vemos que
exactamente corresponde a un subgrafo, en el cual nicamente se tienen los caminos mnimos que
nos llevan del vrtice 1 al resto de vrtices:

1
10
6

3
4

6
5

As:

El camino inicial es 0 que corresponde al vrtice 1.


El camino del vrtice 1 2 = 10 y pasa por los vrtices 1 y 2.
El camino del vrtice 1 3 = 16 y pasa por los vrtices 1 2 3.
El camino del vrtice 1 4 = 19 y pasa por los vrtices 1 2 3 4.
El camino del vrtice 1 5 = 13 y pasa por los vrtices 1 2 5.
Pgina 9 de 10

El camino del vrtice 1 6 = 26 y pasa por los vrtices 1- 2 3 4 7 6.


El camino del vrtice 1 7 = 21 y pasa por los vrtices 1 2 3 4 7.
Si recuerda a medida que aplicaba el proceso hubo caminos que tuvo que descartar porque ya no
representaban el camino ms corto, por lo tanto estos caminos se descartan tanto del vector D
como del grfico de caminos especiales.

Pgina 10 de 10

Vous aimerez peut-être aussi