Académique Documents
Professionnel Documents
Culture Documents
Grafo no dirigido
Grafo dirigido
Grafo regular: Aquel con el mismo grado en todos los vrtices. Si ese grado es k lo
llamaremos k-regular. Por ejemplo, el primero de los siguientes grafos es 3-regular,
el segundo es 2-regular y el tercero no es regular:
Grafo completo: Aquel con una arista entre cada par de vrtices. Un grafo completo
con n vrtices se denota Kn. A continuacin pueden verse los dibujos de K3, K4, K5
y K6:
Grafo nulo: Se dice que un grafo es nulo cuando los vrtices que lo componen no
estn conectados, esto es, que son vrtices aislados:
Problema del camino ms corto: Consiste en encontrar la ruta ms corta entre dos
nodos dados de un grafo dirigido y valuado (con capacidades). Veremos dos
algoritmos, por un lado el algoritmo de Dijkstra, que encuentra el camino ms corto
entre el nodo origen y cada uno de los otros nodos de la red, y por otro lado el
algoritmo de Floyd, que encuentra el camino ms corto entre cualquier par de nodos
de la red.
ALGORITMO DE DIJKSTRA: Tendremos a lo largo de todo el proceso dos
conjuntos y dos vectores:
o Conjunto C: Conjunto de vrtices candidatos. Inicialmente contiene todos los
nodos menos el nodo origen.
o Conjunto S: Conjunto de vrtices seleccionados, es decir, aquellos para los que ya
conocemos su camino mnimo desde el nodo origen. Inicialmente contiene el
nodo origen.
o Vector D: Almacenar la longitud del camino ms corto desde el origen a cada
nodo. Tendr tantas posiciones como nodos tenga el grafo. El coste de ir del nodo
origen a s mismo lo estimaremos como cero.
o Vector P: Almacenar el nodo predecesor a cada nodo en el camino ms corto
desde el origen hasta l. Tendr tantas posiciones como nodos tenga el grafo. La
posicin del nodo predecesor al origen estableceremos que sea cero para indicar
que es el nodo origen.
o Llamaremos al nodo origen o, y el coste de ir del nodo i al nodo j lo denotaremos
como COSTEij .
Hay que seguir los siguientes pasos:
o Seleccionamos el nodo que sea destino de la arista con menor valor que salga del
nodo o, llammoslo u. Introducimos el nodo u en S y lo sacamos de C.
Almacenamos en la posicin u del vector D el valor COSTEou y en la posicin u
del vector P el valor del nodo predecesor, es decir, o.
o Seleccionamos el siguiente nodo al que podamos llegar con menor coste, bien
directamente desde o, bien a travs del otro nodo seleccionado u. Llamamos al
nuevo nodo seleccionado v. Introducimos el nodo v en S y lo sacamos de C.
Introducimos en la posicin v del vector D el coste de llegar al nodo v, si es
directamente desde o ser COSTEov, si es a travs de u ser D[u]+COSTEuv. Por
ltimo, en la posicin v del vector P introducimos el valor del nodo predecesor, ya
sea o o u.
o Repetiremos este proceso hasta que todos los nodos hayan sido seleccionados, es
decir, hasta que el conjunto C est vaco, o lo que es lo mismo, hasta que en el
conjunto S se encuentren todos los nodos del grafo. En ese momento en el vector
D tendremos almacenado el coste mnimo para llegar desde el nodo origen a
cualquier nodo del grafo, y podremos obtener el camino ms corto mediante el
vector P.
Ejemplo: Aplicar el algoritmo de Dijkstra sobre el siguiente grafo siendo el nodo
origen el 1:
Inicio
1->3 - 30
1
Nodo3
1->2 -100
{2, 3, 4,
5}
{2, 4,
5}
{1}
{1, 3}
1 2 3 4
1 2 3 4 5
0
1 2
4 5
30
1 2
30 40
1 2 3 4 5
0
1->2 -100
2
1->3->4 - 40
Nodo 4
{2, 5}
Nodo 2
{5}
Nodo 5
{}FIN
{1, 3,
4}
1 2 3 4 5
0
1 3
1->3->5 90
1->2 -100
1->3->5 - 90
3
1->3->4->5 90
{1, 2,
1 2
4 5
3, 4}
0 55 30 40
{1, 2,
1 2
1 2 3 4 5
0 4 1 3
1->3->4->2 55
1->3->5 - 90
4
1->3->4->5 90
1 2 3 4 5
3, 4, 5} 0 55 30 40 90
0 4 1 3 3
La ruta ms corta entre el nodo origen y cualquier otro nodo de la red se determina
empezando en el nodo del punto de destino deseado y retrocediendo a travs de los
nodos, utilizando la informacin proporcionada por el vector P.
Matriz D
10
10
15
o Tomamos k=1:
Matriz C
Matriz D
10
13
10
13
15
o Tomamos i=5 (i k), en este caso ocurre como en el paso anterior, como
C[5,1]=, entonces no habr ningn cambio, no puede haber ningn camino
desde 5 a travs de 1.
o Tomamos k=2:
Matriz C
Matriz D
10
13
10
13
15
o Tomamos i=1:
j=3: C[1,2]+C[2,3] = 3+13 = 16 > C[1,3] = 10 , por tanto no hay
C[1,4] = 8 y D[1,4] = 2 .
j=5: C[1,2]+C[2,5] = 3+ = , no hay que cambiar nada.
o Tomamos i=3:
j=1: C[3,2]+C[2,1] = 13+3 = 16 > C[3,1] = 10, no hay que
cambiar nada.
j=4: C[3,2]+C[2,4] = 13+5 = 18 > C[3,4] = 6, no hay que cambiar
nada.
j=5: C[3,2]+C[2,5] = 13+ = , no hay que cambiar nada.
o Tomamos i=4:
j=1: C[4,2]+C[2,1] = 5+3 = 8 < C[4,1] = , por tanto hacemos:
C[4,1] = 8 y D[4,1] = 2.
j=3: C[4,2]+C[2,3] = 5+13 = 18 > C[4,3] = 6, no hay que cambiar
nada.
j=5: C[4,2]+C[2,5] = 5+ = , no hay que cambiar nada.
Matriz D
10
25
13
28
10
13
15
o Tomamos i=1:
j=2: C[1,3]+C[3,2] = 10+13 = 23 > C[1,2] = 3, no hay que
cambiar nada.
j=4: C[1,3]+C[3,4] = 10+6 = 16 > C[1,4] = 8, no hay que cambiar
nada.
j=5: C[1,3]+C[3,5] = 10+15 = 25 < C[1,5] = , por tanto
hacemos:
C[1,5] = 25 y D[1,5] = 3 .
o Tomamos i=2:
j=1: C[2,3]+C[3,1] = 13+10 = 23 > C[2,1] = 3, no hay que
cambiar nada.
j=4: C[2,3]+C[3,4] = 13+6 = 19 > C[2,4] = 5, no hay que cambiar
nada.
j=5: C[2,3]+C[3,5] = 13+15 = 28 < C[2,5] = , por tanto
hacemos:
C[2,5] = 28 y D[2,5] = 3.
o Tomamos i=4:
j=1: C[4,3]+C[3,1] = 6+10 = 16 > C[4,1] = 8, no hay que cambiar
nada.
j=2: C[4,3]+C[3,2] = 6+13 = 19 > C[4,2] = 5, no hay que cambiar
nada.
j=5: C[4,3]+C[3,5] = 6+15 = 21 > C[4,5] = 4, no hay que cambiar
nada.
o Tomamos i=5, como C[5,3]=, entonces no habr ningn cambio.
o Tomamos k=4:
Matriz C
1
Matriz D
4
10
12
11
10
11
10
12
10
o Tomamos i=1:
o Tomamos i=2:
o Tomamos i=3:
o Tomamos i=5:
C[5,3] = 10 y D[5,3] = 4.
o Tomamos k=5:
Matriz C
Matriz D
10
12
11
10
11
10
12
10
o Tomamos i=1:
o Tomamos i=2:
o Tomamos i=3:
o Tomamos i=4:
Matriz D
10
12
11
10
11
10
12
10
Corte: Un corte define una serie de arcos cuya supresin de la red causa una
interrupcin completa del flujo entre el origen y el destino. La capacidad de corte es
igual a la suma de las capacidades de los arcos asociados. Entre todos los cortes
posibles en la red , el corte con la menor capacidad proporciona el flujo mximo en
la red.
El siguiente grafo ilustra 3 cortes: el Corte 1 con capacidad 60, el Corte 2 con
capacidad 110 y el Corte 3 con capacidad 70. Todo lo que podemos obtener de los 3
cortes es que el flujo mximo en la red no excede de 60 unidades. No podemos saber
cual es el flujo mximo hasta que se hayan enumerado todos los cortes en la red:
Las capacidades se identifican como sigue: por ejemplo, para el arco (3,4), el lmite
de flujo es de 10 unidades de 3 a 4 y de 5 unidades de 4 a 3.
ALGORITMO DE FORD-FULKERSON: El algoritmo de Ford-Fulkerson
propone buscar caminos en los que se pueda aumentar el flujo, hasta que se alcance
el flujo mximo.
La idea es encontrar una ruta de penetracin con un flujo positivo neto que una los
nodos origen y destino.
Consideraremos las capacidades iniciales del arco que une el nodo i y el nodo j como
Cij y Cji. Estas capacidades iniciales irn variando a medida que avanza el algoritmo,
denominaremos capacidades residuales a las capacidades restantes del arco una vez
pasa algn flujo por l, las representaremos como cij y cji.
Para un nodo j que recibe el flujo del nodo i, definimos una clasificacin [aj,i] donde
aj es el flujo del nodo i al nodo j.
Los pasos del algoritmo se definen como sigue:
o Paso 1: Inicializamos las capacidades residuales a las capacidades iniciales,
hacemos (cij,cji)=(Cij,Cji) para todo arco de la red. Suponiendo el nodo 1 como el
nodo origen, hacemos a1= y clasificamos el nodo origen con [,-]. Tomamos
i=1 y vamos al paso 2.
o Paso 2: Determinamos Si como un conjunto que contendr los nodos a los que
podemos acceder directamente desde i por medio de un arco con capacidad
positiva, y que no formen parte del camino en curso. Si Si contiene algn nodo
vamos al paso 3, en el caso de que el conjunto sea vaco saltamos al paso 4.
o Paso 3: Obtenemos kSi como el nodo destino del arco de mayor capacidad que
salga de i hacia un nodo perteneciente a Si. Es decir, cik = max{cij} con jSi.
Hacemos ak=cik y clasificamos el nodo k con [ak,i]. Si k es igual al nodo destino
o sumidero, entonces hemos encontrado una ruta de penetracin, vamos al paso 5.
En caso contrario continuamos con el camino, hacemos i=k y volvemos al paso 2.
o Paso 4 (retroceso): Si i=1, estamos en el nodo origen, y como Si es vaco,
entonces no podemos acceder a ningn nodo, ni encontrar algn nuevo camino,
hemos terminado, vamos al paso 6.
En caso contrario, i1, le damos al valor i el del nodo que se ha clasificado
inmediatamente antes, eliminamos i del conjunto Si actual y volvemos al paso 2.
o Paso 5: Llegados a este paso tenemos un nuevo camino: Np={1,k1,k2,...,n}, esta
ser la p-sima ruta de penetracin desde el nodo origen al nodo destino. El flujo
mximo a lo largo de esta ruta ser la capacidad mnima de las capacidades
residuales de los arcos que forman el camino, es decir: fp=min{a1,ak1,ak2,...,an}.
La capacidad residual de cada arco a lo largo de la ruta de penetracin se
disminuye por fp en direccin del flujo y se incrementa por fp en direccin
inversa, es decir, para los nodos i y j en la ruta, el flujo residual se cambia de la
(cij,cji) actual a (cij-fp,cji+fp) si el flujo es de i a j, o (cij+fp,cji-fp) si el flujo es
de j a i.
o Iteracin 1:
5:
La
ruta
de
la
penetracin
es:
5[20,4]4[10,3]3[40,2]2[20,1]1.
Entonces la ruta es N2={1,2,3,4,5} y f2=min{,20,40,10,20}=10. Las
capacidades residuales a lo largo de esta ruta son:
(c12,c21)=(20-10, 0+10)=(10,10)
(c23,c32)=(40-10, 0+10)=(30,10)
(c34,c43)=(10-10, 5+10)=(0,15)
(c45,c54)=(20-10, 0+10)=(10,10)
o Iteracin 3:
(c12,c21)=(10-10, 10+10)=(0,20)
(c25,c52)=(30-10, 0+10)=(20,10)
o Iteracin 4:
o No son posibles ms penetraciones, debido a que todos los arcos fuera del
nodo 1 tienen residuales cero. Vayamos al paso 6 para determinar la
solucin.
o Paso 6: El flujo mximo en la red es F=f1+f2+...+f5=60 unidades. El flujo en los
diferentes arcos se calcula restando las ltimas residuales obtenidas en la ltima
iteracin de las capacidades iniciales:
Arco
Cantidad de flujo
Direccin
(1,2)
20
12
(1,3)
30
13
(1,4)
10
14
(2,3)
(2,5)
20
25
(3,4)
10
34
(3,5)
20
35
(4,5)
20
45