Está en la página 1de 8

Algoritmo de Dijkstra

El algoritmo de Dijkstra, también llamado algoritmo de caminos mínimos, es


un algoritmo para la determinación del camino más corto dado un vértice origen al resto
de los vértices 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 más
cortos que parten del vértice origen y que llevan a todos los demás vértices; cuando se
obtiene el camino más corto desde el vértice origen, al resto de vértices que componen
el grafo, el algoritmo se detiene. El algoritmo es una especialización de la búsqueda 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 búsqueda
nodos que en próximas iteraciones bajarían el costo general del camino al pasar por una
arista con costo negativo).
Una de sus aplicaciones más importantes reside en el campo de la telemática, gracias a
él, podemos resolver grafos con muchos nodos, los cuales serían muy complicados de
hacer sin dicho algoritmo, encontrando así las rutas más cortas entre un origen y todos
los destinos en una red.
Grafos Dirigidos

Figura #1

1. Represente el grafo de la Figura #1 con una matriz de adyacencia, una matriz de


adyacencia etiquetada y una lista de adyacencia.
2. Utilice el algoritmo de Dijkstra para encontrar las distancias más cortas entre el
vértice 1 y los demás vértices del grafo de la Figura #1 y, construya la matriz P que
permite recuperar los caminos más cortos. Dibuje el grafo resultante de los
caminos más cortos para el vértice 1.

Solución

1. Representaciones del grafo


1 2 3 4 5 6 1 2 3 4 5 6
1 0 1 1 0 0 0 1  10 5    
2 
0 0 0 0 1 0 2 
    30  
3 0 1 0 0 1 1 3  10   15 10
   
4 1 0 1 0 0 0 4 60  25    
5 0 0 0 0 0 0 5      
   
0
6  0 0 1 1 0 
6    20 20  

Matriz de Adyacencia Matriz de Adyacencia Etiquetada

Lista de Adyacencia

2. Algoritmo de Dijkstra
Iteració S w D[2] D[3] D[4] D[5] D[6]
n
Inicial {1} --- 10 5   
1 {1,3} 3 10 5  20 15
2 {1,3,2} 2 10 5  20 15
3 {1,3,2,6} 6 10 5 35 20 15
4 {1,3,2,6,5} 5 10 5 35 20 15
5 {1,3,2,6,5,4} 4 10 5 35 20 15

1 2 3 4 5 6
Matriz P
1 0 0 0 6 3 3

Caminos más cortos iniciando en 1


FLUJO MÁXIMO

Existe un flujo que viaja desde un único lugar de origen hacia un único lugar de destino
a través de arcos que conectan nodos intermediarios. Los arcos tienen una capacidad
máxima de flujo y se trata de enviar desde la fuente al destina la mayor cantidad posible
de flujo.

Hay problemas donde lo importante es la cantidad de flujo que pasa a través de la red
como por ejemplo: en las líneas de oleoductos, redes eléctricas o de transmisión de
datos. Por esta razón en dichos problemas se determina el flujo máximo que pasa a
través de una red.
Definiciones básicas
Flujo: Circulación de unidades homogéneas de un lugar a otro.
Capacidad de flujo: es la capacidad de unidades que pueden entrar por el nodo fuente
y salir por el nodo destino.
Origen o fuente de flujo: nodo por el cual el flujo ingresa.
Destino o Sumidero de flujo: nodo por el cual el flujo sale.
Capacidades residuales: capacidades restantes unas vez que el flujo pasa el arco.

Ford Fulkerson
Para la resolución de problemas de flujo máximo se requiere el uso del método Ford
Fulkerson. Este método propone buscar caminos en los que se pueda aumentar el flujo
hasta que se alcance el flujo máximo, la idea es encontrar una ruta de penetración con
un flujo positivo neto que una los nodos de origen y destino.

 El flujo es siempre positivo y con unidades enteras.


 El flujo a través de un arco es menor o igual que la capacidad.
 El flujo que entra en un nodo es igual al que sale de él.

Resolución de problema
Para resolver un problema de flujo máximo se debe seguir los siguientes pasos:
1. Se identifica el nodo origen y destino.
2. Se parte desde el nodo de origen y se escoge el arco que posea mayor flujo
3. Se identifica los nodos de transbordo.
4. Repetir como si el nodo intermediario fuera el nodo origen.
5. Se calcula "k" y las capacidades nuevas.
6. Dado el resultado se cambian las capacidades y se repite el mismo
procedimiento desde el inicio.
Formulario
Cij,ji =(Ci-K, Cj+K), donde:
C: capacidad
Ij: índices de los nodos
K: es el mínimo flujo que pasa por el nodo, se calcula como k= min(capacidades de la
ruta).
Hallar el flujo máximo del siguiente problema:

Método Ford Fulkerson


El nodo de origen como se puede observar es el número 1 de color amarillo, y el nodo
de destino es el número 5 de color azul.

Se escoge desde el nodo de origen aquel flujo que sea el mayor, en este caso es 30, y va
dirigido al nodo número 3.

Se identifica el nodo de transbordo como [30,1], 30 es la capacidad, y 1 es el nodo del


cual proviene la capacidad y luego repetimos todo el proceso, como si el nodo
intermediario fuese el nodo de origen. Se tiene como flujo mayor 20 del nodo numero 3
al nodo numero 5, con el nodo de transbordo como [20,5].
Ahora que hemos llegado al nodo de destino, procedemos a calcular "k" y las
capacidades nuevas.

K=min(∞,30,20)
K=20

C13,31 =(30-20, 0+20)


C13,31 =(10, 20)

C35,53 =(20-20, 0+20)


C35,53 =(0, 20)

Luego de haber calculado las nuevas capacidades, es necesario reemplazarlas.

Se realiza el proceso otra vez, haciendo la ruta con los mayores flujos.
K=min(∞,20,40,10,20)
K=10

C12,21 =(20-10, 0+10)


C12,21 =(10, 10)

C23,32 =(40-10, 0+10)


C23,32 =(30, 10)

C34,43 =(10-10, 5+10)


C34,43 =(0, 15)

C45,54 =(20-10, 0+10)


C45,54 =(10, 10)

Volvemos a hacer el proceso y escogemos el camino 1,2. Como se puede observar si se


tomara rumbo del nodo 2 al nodo 3 terminaría trancado, obligándose a volver al nodo
origen, por lo que se toma el camino 2,5.

K=min(∞,10,20)
K=10
C12,21 =(10-10, 10+10)
C12,21 =(0, 20)

C25,52 =(20-10, 0+10)


C25,52 =(10, 10)

Se actualizan las capacidades y procedemos a resolver de nuevo. Esta vez agarraremos


el camino de 1,3.

K=min(∞,10,10,10)
K=10

C13,31 =(10-10, 20+10)


C13,31 =(0, 30)

C32,23 =(10-10, 30+10)


C32,23 =(0, 40)

C25,52 =(10-10, 10+10)


C25,52 =(0, 20)

Y por ultimo escogemos el camino 1,4.


K=min(∞,10,10)
K=10

C14,41 =(10-10, 0+10)


C14,41 =(0, 10)

C45,54 =(10-10, 10+10)


C45,54 =(0, 40)
Reemplazando las nuevas capacidades, nos queda de la siguiente forma, las
capacidades del nodo de origen quedan como 0, por lo cual seguimos a sumar a todas
las K y ahi conseguimos el flujo máximo.

Flujo Máximo = Σ K
Flujo Máximo = 20+10+10+10+10
Flujo Máximo = 60
El flujo máximo que puede pasar del nodo origen 1 hasta el nodo destino es de 60.

También podría gustarte