Sei sulla pagina 1di 106

Optsicom

Research Group
Tema 2:
Algoritmos sobre grafos
1
Optsicom
Research Group
Tema 2: Algoritmos sobre grafos
1.- Introduccin
2.- Recorridos
2.1.- Recorrido en anchura
2.2.- Recorrido en profundidad
2.3.- Ordenacin topolgica
2.4.- Componentes fuertemente conexas
3.- rboles de recubrimiento
3.1.- Algoritmo de Kruskal
3.2.- Algoritmo de Prim
4.- Caminos ms cortos desde un origen
4.1.- Caminos ms cortos y relajacin
4.2.- Algoritmo de Dijkstra
4.3.- Algoritmo de Bellman-Ford
4.4.- Caminos ms cortos en grafos dirigidos acclicos
5.- Caminos ms cortos todos con todos
5.1.- Caminos ms cortos y multiplicacin de matrices
5.2.- El algoritmo de Floyd-Warshall
5.3.- Cierre transitivo de un grafo
6.- Flujo mximo
6.1.- Redes de flujo
6.2.- El mtodo de Ford-Fulkerson
2
Optsicom
Research Group
Tema 2: Algoritmos sobre grafos
1.- Introduccin
2.- Recorridos
2.1.- Recorrido en anchura
2.2.- Recorrido en profundidad
2.3.- Ordenacin topolgica
2.4.- Componentes fuertemente conexas
3.- rboles de recubrimiento
3.1.- Algoritmo de Kruskal
3.2.- Algoritmo de Prim
4.- Caminos ms cortos desde un origen
4.1.- Caminos ms cortos y relajacin
4.2.- Algoritmo de Dijkstra
4.3.- Algoritmo de Bellman-Ford
4.4.- Caminos ms cortos en grafos dirigidos acclicos
5.- Caminos ms cortos todos con todos
5.1.- Caminos ms cortos y multiplicacin de matrices
5.2.- El algoritmo de Floyd-Warshall
5.3.- Cierre transitivo de un grafo
6.- Flujo mximo
6.1.- Redes de flujo
6.2.- El mtodo de Ford-Fulkerson
3
Optsicom
Research Group
Introduccin
El grafo es una estructura de datos omnipresente en
ciencia de la computacin
Existe una gran cantidad de problemas interesantes
definidos sobre grafos
En este tema trataremos con algunos de los ms
representativos:
Recorridos
rboles de recubrimiento mnimo
Caminos ms cortos
Flujo mximo
4
Optsicom
Research Group
Introduccin: Definiciones
preliminares
Se suele definir un grafo G=(V,E) como un conjunto de
vrtices V y un conjunto de aristas E.
Usualmente, la complejidad de los algoritmos sobre
grafos suele medirse en funcin del
nmero de vrtices: |V|
nmero de aristas: |E|
Convenios de notacin: Cuando nos refiramos a estas
cantidades en notacin asinttica, sustituiremos |V| y |E|
por V y E.
Ejemplo: O(VE) en lugar de O(|V||E|)
5
Optsicom
Research Group
Introduccin: representaciones
usuales de grafos
Existen dos implementaciones tpicas de grafos:
Como matriz de adyacencia
Como lista de adyacencia
Grafo no dirigido:
6
Optsicom
Research Group
Introduccin: representaciones
usuales de grafos
Existen dos implementaciones tpicas de grafos:
Como matriz de adyacencia
Como lista de adyacencia
Grafo dirigido:
7
Optsicom
Research Group
Introduccin: Representaciones
usuales de grafos
Lista de adyacencia:
Representacin compacta para grafos dispersos (aqullos en los
que |E| << |V|
2
)
No aseguran un acceso rpido a la hora de comprobar si hay
una arista entre dos vrtices dados
Matriz de adyacencia:
Aseguran un acceso rpido a la hora de comprobar si hay una
arista entre dos vrtices dados
Se requiere una memoria de O(V
2
), y no depende de la densidad
del grafo
Para grafos densos (aqullos en los que |E| ~ |V|
2
) ya no se
desperdicia tanta memoria
8
Optsicom
Research Group
Tema 2: Algoritmos sobre grafos
1.- Introduccin
2.- Recorridos
2.1.- Recorrido en anchura
2.2.- Recorrido en profundidad
2.3.- Ordenacin topolgica
2.4.- Componentes fuertemente conexas
3.- rboles de recubrimiento
3.1.- Algoritmo de Kruskal
3.2.- Algoritmo de Prim
4.- Caminos ms cortos desde un origen
4.1.- Caminos ms cortos y relajacin
4.2.- Algoritmo de Dijkstra
4.3.- Algoritmo de Bellman-Ford
4.4.- Caminos ms cortos en grafos dirigidos acclicos
5.- Caminos ms cortos todos con todos
5.1.- Caminos ms cortos y multiplicacin de matrices
5.2.- El algoritmo de Floyd-Warshall
5.3.- Cierre transitivo de un grafo
6.- Flujo mximo
6.1.- Redes de flujo
6.2.- El mtodo de Ford-Fulkerson
9
Optsicom
Research Group
Recorrido en Anchura
El recorrido en anchura (breadth-first) es uno de los
algoritmos sobre grafos ms sencillos
en l se sustentan otros como Dijkstra o Prim.
Dado un grafo G=(V,E) y un vrtice inicial s
explora sistemticamente los vrtices de G para descubrir si son
alcanzables desde s
calcula la distancia (menor nmero de vrtices) desde s hasta los
vrtices alcanzables
produce un rbol de recorrido en anchura donde la raz es s
para cualquier vrtice v alcanzable desde s, la ruta en el rbol de
recorrido en anchura desde s hasta v es el camino ms corto
entre esos dos vrtices
es un algoritmo adecuado para grafos dirigidos y no dirigidos
10
Optsicom
Research Group
Recorrido en Anchura
El recorrido en anchura se llama as porque recorre la
frontera en anchura, de modo que descubre todos los vrtices
a una distancia k de s antes de descubrir el primer vrtice a la
distancia k+1 de s
Control del progreso del recorrido para asegurar que es en
anchura:
Colores: blanco, gris y negro
Inicialmente todos los vrtices son blancos
Cuando un vrtice es alcanzado en el recorrido, deja de ser blanco
si (u,v) e E y el vrtice u es negro, entonces v es gris o negro
todos los vrtices adyacentes a uno negro han sido descubiertos
Los vrtices grises pueden tener adyacentes blancos (no
descubiertos) son la frontera entre los descubiertos y los no
descubiertos.
11
Optsicom
Research Group
Recorrido en Anchura
rbol de recorrido en anchura:
Inicialmente, solo contiene la raz s
Cuando se alcanza un vrtice blanco v escaneando la lista de
adyacencia de un vrtice ya descubierto u, el vrtice v y el arco
(u,v) se aaden al rbol.
El vrtice u es predecesor o padre de v en el rbol
Como todos los vrtices se descubren al menos una vez, todos
tienen un predecesor.
Si u es un vrtice en el camino de s a v, se dice que u es un
antepasado de v y v es descendiente de u
12
Optsicom
Research Group
RECORRIDO-ANCHURA(G,s)
FOREACH u e V[G]-s DO
color[u] blanco
d[u]
t[u] NIL
ENDFOR
color[s] gris
d[s]
t[s] NIL
Q {s}
WHILE Q C DO
u desencolar[Q]
FOREACH v e Ady[u] DO
IF color[v] = blanco THEN
color[v] gris
d[v]
t[v] u
encolar(Q,v)
ENDIF
ENDFOR
color[u] = negro
ENDWHILE
Recorrido en Anchura: Algoritmo
13
Optsicom
Research Group
Recorrido en Anchura: Ejemplo
14
Optsicom
Research Group
Recorrido en Anchura
Anlisis:
Operaciones de encolado y desencolado O(1)
Como cada vrtice se encola al menos una vez, en total: O(V)
La adyacencia de cada nodo se examina una vez
en total, la longitud de las adyacencias de los nodos es O(2E)=O(E).
En el peor de los casos O(E)
Por lo tanto, el coste del recorrido en anchura es O(V+E)
que es lineal con el tamao del grafo
15
Optsicom
Research Group
Recorrido en Anchura
Imprimir los caminos mnimos:
IMPRIMIR-CAMINO(G, s, v)
IF v = s THEN
IMPRIMIR(v)
ELSE
IF t[v] = NIL THEN
IMPRIMIR(No existe camino entre, s, y ,v)
ELSE
IMPRIMIR-CAMINO(G, s, t[v])
IMPRIMIR(v)
ENDIF
ENDIF
16
Optsicom
Research Group
Recorrido en Profundidad
El recorrido en profundidad (depth-first) tiene como
estrategia profundizar en el grafo siempre que sea posible
de modo que se visitan primero las aristas sin explorar del vrtice v
descubierto ms recientemente
Cuando ya han sido explorados todos, se vuelve atrs para explorar
las aristas inexploradas del vrtice predecesor de v
Este proceso contina mientras haya vrtices sin descubrir, que
sean alcanzables desde el vrtice inicial
Si an hay vrtices sin explorar, el recorrido se reinicia desde uno
de ellos y el proceso se repite hasta haber descubierto todos
Como en el recorrido en anchura, se almacena el vrtice
predecesor de los vrtices descubiertos
Al contrario que en recorrido en anchura, pueden formarse varios
rboles de recorrido (uno por cada vez que se reinicia el recorrido)
17
Optsicom
Research Group
Recorrido en Profundidad
Se define el subgrafo predecesor G=(V,E
t
) como sigue:
El recorrido en profundidad de un grafo forma un bosque de
rboles de recorrido en profundidad
Cada E
t
es una arista de un rbol
Los vrtices se colorean como en el recorrido en
anchura
Inicialmente todos son blancos
Cuando se descubren, se colorean de gris (controlado por d[v])
Finalmente, se colorean de negro cuando toda su adyacencia ha
sido descubierta (controlado por f[v])
De esta forma se asegura que cada vrtice acaba en un solo
rbol
{ } NIL v V v v v E = e = ) ( , : ) ), ( ( t t
t
18
Optsicom
Research Group
Recorrido en Profundidad
De modo que:
Un vrtice v es blanco hasta d[v]
Gris desde d[v] hasta f[v]
Negro desde f[v]
d[v] y f[v] son enteros entre 1 y 2|V|, puesto que hay un
evento de descubrimiento y otro de finalizacin de
exploracin de su adyacencia para cada vrtice
Adems, d[v] < f[v] para todo vrtice v.
19
Optsicom
Research Group
RECORRIDO-PROFUNDIDAD(G)
FOREACH u e V[G] DO
color[u] blanco
t[u] NIL
ENDFOR
tiempo 0
FOREACH u e V[G] DO
IF color[v] = blanco THEN
RP-VISITAR(u)
ENDIF
ENDFOR
Recorrido en Profundidad: Algoritmo
RP-VISITAR(u)
color[u] gris
tiempo tiempo + 1
d[u] tiempo
FOREACH v e Ady[u] DO
IF color[v] = blanco THEN
t[v] u
RP-VISITAR(u)
ENDIF
ENDFOR
color[u] = negro
tiempo tiempo + 1
f[u] = tiempo
ENDWHILE
20
Optsicom
Research Group
Recorrido en Profundidad: Ejemplo
21
Optsicom
Research Group
Recorrido en Profundidad
Anlisis:
Cada uno de los bucles de RECORRIDO-PROFUNDIDAD
consumen O(V)
El procedimiento RP-VISITAR
se llama exactamente una vez por vrtice
internamente, el bucle se ejecuta |ady[v]| por cada vrtice v
Como el coste total de RP-VISITAR es O(E).
Por lo tanto, el coste del recorrido en profundidad es O(V+E)
que es lineal con el tamao del grafo
22
Optsicom
Research Group
Recorrido en Profundidad
Tipos de aristas:
Un recorrido en profundidad puede usarse para clasificar las
aristas (o arcos) de un grafo. Podemos definir cuatro tipos de
aristas:
Aristas del rbol (o aristas de descubrimiento): aqullas que
pertenecen al bosque de rboles G
t
.
Aristas de retorno: son las aristas (u,v) que conectan un vrtice u con su
antecesor en el rbol v. Los autociclos se consideran aristas de retorno.
Aristas de avance: aqullas que no pertenecen al rbol y que conectan
un vrtice con alguno de sus descendientes.
Aristas de cruce: son aristas que unen
vrtices del mismo rbol tales que ninguno es antecesor del otro
vrtices de diferentes rboles
23
Optsicom
Research Group
Recorrido en Profundidad
Tipos de aristas:
Las aristas se pueden etiquetar al mismo tiempo que se lleva a
cabo el recorrido. Supongamos una arista (u,v) que est siendo
explorada desde u. Si el color de v es:
Blanco: la arista es de descubrimiento
Gris: La arista es de retorno
Negro: La arista es de avance o de cruce
En grafos no dirigidos, las aristas son, o bien de descubrimiento
o bien de avance.
24
Optsicom
Research Group
Ordenacin topolgica
Dado un grafo G=(V,E) dirigido y acclico, se denomina
ordenacin topolgica a una disposicin lineal de los
nodos tal que, dado un arco (u,v), el nodo u est antes
que v en la ordenacin
Es decir, los arcos van de izquierda a derecha.
El tiempo de ejecucin de este algoritmo es O(V+E), ya que la
insercin en la lista es O(1).
ORDENACION-TOPOLOGICA(G)
Llamar a RECORRIDO-PROFUNDIDAD para calcular los f[u] para cada vrtice u
Ir insertando en una lista los vrtices u en orden creciente de f[u]
Devolver la lista enlazada de los vrtices
25
Optsicom
Research Group
Componentes fuertemente
conexas
Una de las aplicaciones tpicas del recorrido en
profundidad es la descomposicin de un grafo en sus
componentes fuertemente conexas
Dado un grafo G=(V,E), una componente fuertemente
conexa es un subconjunto U _ V tal que para cualquier
par de vrtices u, v e U, se tiene que
u es alcanzable desde v.
v es alcanzable desde u.
Grafo traspuesto: Dado un grafo G=(V,E), su grafo
traspuesto es G
T
=(V,E
T
) donde E
T
={(u,v) : (v,u) e E}
26
Optsicom
Research Group
Componentes fuertemente
conexas: Algoritmo
Anlisis:
El tiempo de ejecucin de este algoritmo es O(V+E)
COMPONENTES-FUERTEMENTE-CONEXAS(G)
Llamar a RECORRIDO-PROFUNDIDAD(G) para calcular los f[u] para cada vrtice u
Calcular G
T
Llamar a RECORRIDO-PROFUNDIDAD(G
T
), pero en el bucle principal, considerar los
vrtices en orden decreciente de f[u] (calculado en la 1 instruccin )
Devolver los vrtices de cada rbol del bosque de recorrido en profundidad como
componentes conexas diferentes
27
Optsicom
Research Group
Tema 2: Algoritmos sobre grafos
1.- Introduccin
2.- Recorridos
2.1.- Recorrido en anchura
2.2.- Recorrido en profundidad
2.3.- Ordenacin topolgica
2.4.- Componentes fuertemente conexas
3.- rboles de recubrimiento
3.1.- Algoritmo de Kruskal
3.2.- Algoritmo de Prim
4.- Caminos ms cortos desde un origen
4.1.- Caminos ms cortos y relajacin
4.2.- Algoritmo de Dijkstra
4.3.- Algoritmo de Bellman-Ford
4.4.- Caminos ms cortos en grafos dirigidos acclicos
5.- Caminos ms cortos todos con todos
5.1.- Caminos ms cortos y multiplicacin de matrices
5.2.- El algoritmo de Floyd-Warshall
5.3.- Cierre transitivo de un grafo
6.- Flujo mximo
6.1.- Redes de flujo
6.2.- El mtodo de Ford-Fulkerson
28
Optsicom
Research Group
rboles de recubrimiento mnimo
Sea G=(V,E) un grafo conexo, no dirigido y ponderado
donde cada arista (u, v) tiene un peso asociado (u, v).
Queremos encontrar un subconjunto acclico T _ E que
conecte todos los vrtices de V, y cuyo peso total
sea mnimo.
Como T es acclico y contiene todos los vrtices de V, se
dice que T es un rbol de recubrimiento
Al problema que consiste en calcular T se le denomina
rbol de recubrimiento mnimo
29

e
=
T v u
v u T
) , (
) , ( ) ( e e
Optsicom
Research Group
rboles de recubrimiento mnimo
Ejemplo
30
Optsicom
Research Group
rboles de recubrimiento mnimo:
crecimiento
Sea G=(V,E) un grafo conexo, no dirigido y ponderado
:E R.
Los algoritmos considerados siguen una estrategia
voraz (greedy)
Siempre disponen de un subconjunto A del rbol de expansin
En cada iteracin se analiza un vrtice (u, v) para decidir si se
aade al rbol de expansin
Se debe cumplir que si A es un rbol de expansin, entonces
A{(u, v)} tambin lo es.
31
ARBOL-DE-EXPANSION-GENERICO(G,)
A C
WHILE A no sea un rbol de expansin DO
encontrar un vrtice adecuado para A
A A{(u, v)}
ENDWHILE
Optsicom
Research Group
Algoritmo de Kruskal
Se basa en la idea del algoritmo genrico
El vrtice adecuado para A es el vrtice con menor peso que
conecta dos componentes conexas distintas
EL algoritmo de Kruskal va construyendo un bosque de rboles
A.
Un vrtice (u, v) ser adecuado para aadirlo a A si es el de
menor coste que une dos rboles distintos
32
Optsicom
Research Group
Algoritmo de Kruskal
Algoritmo:
33
KRUSKAL(G,)
A C
FOREACH u e V[G] DO
INICIALIZAR-CONJUNTO(u)
ENDFOR
Ordenar los vrtices de E por su peso de forma no decreciente
FOREACH (u, v) e E DO
IF CONJUNTO(u) CONJUNTO(v) THEN
A A{(u, v)}
UNION(u,v)
ENDIF
ENDFOR
Optsicom
Research Group
Algoritmo de Kruskal: ejemplo
34
Optsicom
Research Group
Algoritmo de Prim
Es tambin un caso particular del algoritmo genrico
Tiene un modo de funcionamiento similar al algoritmo de Dijkstra
Tiene la propiedad de que las aristas en A forman un solo rbol
El rbol comienza en un vrtice arbitrario (que acta de raz)
hasta que el rbol A recubre a todos los vrtices en V.
De modo que, en cada paso, se aade una arista que une a un
vrtice en A con otro vrtice en V-A.
Es tambin una estrategia voraz, ya que en cada paso del
algoritmo se escoge de entre todas las aristas posibles aqulla
que contribuye menos al peso del rbol de expansin
Para que sea eficiente la implementacin de este algoritmo, la
clave est en que el proceso de seleccin del vrtice en cada
paso sea poco costoso.
35
Optsicom
Research Group
Algoritmo de Prim
Algoritmo:
36
PRIM(G,)
Q V(G)
FOREACH u e Q DO
key[u]
ENDFOR
key[r] 0
t[r] NIL
WHILE Q C DO
u EXTRAER-MINIMO(Q)
FOREACH v e Ady[u] DO
IF (v e Q) AND (e(u, v) < key[v]) THEN
t[v] u
key[v] e(u, v)
ENDIF
ENDFOR
ENDWHILE
Optsicom
Research Group
Algoritmo de Prim: ejemplo
37
Optsicom
Research Group
Tema 2: Algoritmos sobre grafos
1.- Introduccin
2.- Recorridos
2.1.- Recorrido en anchura
2.2.- Recorrido en profundidad
2.3.- Ordenacin topolgica
2.4.- Componentes fuertemente conexas
3.- rboles de recubrimiento
3.1.- Algoritmo de Kruskal
3.2.- Algoritmo de Prim
4.- Caminos ms cortos desde un origen
4.1.- Caminos ms cortos y relajacin
4.2.- Algoritmo de Dijkstra
4.3.- Algoritmo de Bellman-Ford
4.4.- Caminos ms cortos en grafos dirigidos acclicos
5.- Caminos ms cortos todos con todos
5.1.- Caminos ms cortos y multiplicacin de matrices
5.2.- El algoritmo de Floyd-Warshall
5.3.- Cierre transitivo de un grafo
6.- Flujo mximo
6.1.- Redes de flujo
6.2.- El mtodo de Ford-Fulkerson
38
Optsicom
Research Group
Caminos ms cortos desde un origen
39
Sea G=(V,E) un grafo dirigido y ponderado donde cada
arco (u, v) tiene un peso asociado (u, v).
El peso de un camino p = <v
0
, v
1
, , v
k
> es la suma de
los pesos de sus arcos constituyentes
Se define el coste del camino mnimo entre u y v
como
El camino ms corto entre u y v es cualquier camino p
con coste (p)=(u, v)

=

=
k
i
i i
v v p
1
1
) , ( ) ( e e

=
caso otro en
y entre camino un existe si } : ) ( min{
) , (
v u v u p
v u
p
e
o
Optsicom
Research Group
Variantes del problema
40
Existen diferentes variantes del problema:
El problema de los caminos ms cortos desde un origen:
Sea G=(V,E) un grafo dirigido y ponderado. Este problema
consiste en encontrar el camino ms corto entre un origen dado
seV con todos los restantes vrtices veV.
El problema de los caminos ms cortos hacia un destino:
Encontrar el camino ms corto hacia un destino dado teV desde
todos los restantes vrtices veV. Es isomorfo al anterior.
El problema del caminos ms cortos entre una pareja:
Encontrar el camino ms corto entre dos vrtices. Resolviendo el
primero, tambin resolvemos ste.
El problema del caminos ms cortos todos con todos:
Encontrar el camino ms corto entre cada par de vrtices. Puede
resolverse a travs del primero de los problemas, considerando
el origen del camino desde cada vrtice del grafo.
Optsicom
Research Group
Variantes del problema
41
Arcos con pesos negativos:
En algunas instancias del problema de los caminos ms cortos,
es posible que algunos arcos tengan pesos negativos
Si el grafo G=(V,E) no contiene ciclos con pesos negativos
alcanzables desde la fuente s, entonces, para todos los vrtices
veV, el peso del camino ms corto (s, v) permanece bien
definido, incluso si tiene un valor negativo.
Si, por le contrario, el grafo contiene ciclos con pesos negativos
alcanzables desde la fuente s, entonces los pesos de los
caminos ms cortos no estn bien definidos.
Siempre puede encontrarse un camino ms corto volviendo a pasar po el
ciclo de coste negativo
En estos casos, se define (s, v) = -
Optsicom
Research Group
Variantes del problema
42
Arcos con pesos negativos: Ejemplo
Optsicom
Research Group
Variantes del problema
43
Arcos con pesos negativos:
El algoritmo de Dijkstra asume que la instancia no tiene pesos
negativos
El algoritmo de Bellman-Ford permite arcos con pesos negativos
Proporciona una salida correcta siempre que no haya ciclos con coste
negativo alcanzables desde la fuente
Si hay ciclos con costes negativos el algoritmo los detecta
Optsicom
Research Group
Representacin de caminos ms
cortos
44
Usualmente interesa calcular no solo los pesos sino
tambin los caminos:
Es decir, los vrtices por los que pasa el camino ms corto
Dado un grafo G=(V,E) se mantiene para cada vrtice veV un
predecesor t[v] que es otro vrtice o NIL.
Es fcil recuperar el camino, recorriendo de forma inversa este
vector
Optsicom
Research Group
Caminos ms cortos y relajacin
45
Los algoritmos de clculo de caminos ms cortos,
explotan mtodos de relajacin:
Estos mtodos disminuyen iterativamente una cota superior en el
camino ms corto de cada vrtice hasta que la cota superior
iguala el coste el camino ms corto
Los algoritmos de clculo de caminos ms cortos se basan en la
idea de que los caminos ms cortos incluyen otros caminos
ms cortos dentro de ellos.
Para cada vrtice veV, se mantiene un atributo d[v] que es una
cota superior al coste del camino ms corto para v.
Llamamos a d[v] el estimado del camino ms corto para v.
Optsicom
Research Group
UNA-SOLA-FUENTE-INICIALIZAR(G,s)
FOREACH v e V[G] DO
d[v]
t[v] NIL
ENDFOR
d[s] 0
Caminos ms cortos: Algoritmos
RELAJAR(u,v,e)
IF d[v] > d[u] + e(u,v) THEN
d[v] d[u] + e(u,v)
t[v] u
ENDIF
46
Optsicom
Research Group
Algoritmo de Dijkstra
47
El algoritmo de Dijkstra resuelve el problema de los
caminos ms cortos desde un origen:
Se asume que todos los pesos de los arcos son no negativos
El algoritmo de Dijkstra mantiene un conjunto de vrtices S cuyo
camino mnimo desde el origen ya ha sido calculado. Es decir,
d[v]= (s, v).
Iterativamente, el algoritmo selecciona el vrtice en u e V-S con
el mnimo valor del coste estimado para el camino ms corto,
inserta u en S y relaja el resto de vrtices con u.
En la implementacin del algoritmo se puede utilizar una cola Q
que contiene todos los vrtices restantes ordenados de menor a
mayor d[v].
Optsicom
Research Group
DIJKSTRA(G,s)
UNA-SOLA-FUENTE-INICIALIZAR(G,s)
S C
Q V[G]
WHILE QC DO
u EXTRAER-MENOR(Q)
S S {u}
FOREACH v e Ady[u] DO
RELAJAR(u,v,e)
ENDFOR
ENDWHILE
Algoritmo de Dijkstra
48
Esta implementacin asume que el grafo est
representado como una lista de adyacencias
Optsicom
Research Group
Algoritmo de Dijkstra: Ejemplo
49
Optsicom
Research Group
Algoritmo de Dijkstra: Anlisis
50
Complejidad del algoritmo de Dijkstra
Supongamos que Q est implementado como un array:
La operacin EXTRAER-MENOR tiene una complejidad de O(V)
Como se ejecuta una vez por vrtice, esta operacin consumen un
tiempo de O(V
2
).
Cada vrtice v se inserta en S exactamente una vez, de modo que cada
ady[v] se examina una sola vez
Como la adyacencia total tiene un tamao de |E|, el bucle FOREACH
consume un tiempo de O(E), ya que el coste de ejecucin del bucle es
O(1).
Por lo tanto, el coste del algoritmo de Dijkstra es O(V
2
+ E) = O(V
2
).
Si el grafo es disperso, es conveniente implementar Q como un
montculo binario. Para este diseo,
cada operacin EXTRAER-MENOR tiene una complejidad de O(lg(V)) y el
algoritmo resultante (a veces denominado Algoritmo de Dijkstra
Modificado) es O(E lg(V)).
Optsicom
Research Group
Algoritmo de Bellman-Ford
51
Este algoritmo resuelve el problema de los caminos ms
cortos en el caso ms general en el que las aristas
pueden tener pesos negativos
Dado un grafo G=(V,E) y unos pesos :ER, el algoritmo de
Bellman-Ford devuelve un valor booleano indicando si existe o
no un ciclo con coste negativo alcanzable desde la fuente.
Si existe dicho ciclo, el algoritmo no puede alcanzar una solucin al
problema
Si no existe, devuelve los caminos ms cortos y sus pesos
El algoritmo de Bellman-Ford tambin utiliza la estrategia de la
relajacin, estimando d[v] hasta calcular (s, v).
El algoritmo devuelve TRUE si y solo si no hay ningn ciclo con
coste negativo alcanzable desde s.
Optsicom
Research Group
BELLMAN-FORD(G,s)
UNA-SOLA-FUENTE-INICIALIZAR(G,s)
FOR i 1 TO |V(G)|-1 DO
FOREACH (u,v) e E[G] DO
RELAJAR(u,v,e)
ENDFOR
ENDFOR
FOREACH (u,v) e E[G] DO
IF d(v) > d(u) + e(u,v) THEN
RETURN FALSE
ENDIF
ENDFOR
RETURN TRUE
Algoritmo de Bellman-Ford
52
Optsicom
Research Group
Algoritmo de Bellman-Ford: Ejemplo
53
Optsicom
Research Group
Algoritmo de B-F: Anlisis
54
Complejidad del algoritmo de Bellman-Ford
La operacin de inicializacin es O(V).
Cada una de las pasadas por el conjunto de arcos es O(E).
Por lo tanto, el algoritmo completo es O(VE).
Optsicom
Research Group
Grafos Dirigidos Acclicos (DAG)
55
Dado un grafo acclico ponderado y dirigido
es posible calcular los caminos ms cortos desde un origen
utilizando una ordenacin topolgica con coste O(V+E).
En este tipo de grafos, los caminos mas cortos estn
siempre bien definidos
aunque pueden existir arcos con coste negativo
al no existir ciclos, no hay ciclos con costes negativos
Algoritmo
Comenzar ordenando topolgicamente los vrtices del grafo
Si existe un camino entre u y v, entonces u precede a v en la
ordenacin topolgica
Se hace solo una pasada sobre los vrtices ordenados
Como todos los vrtices se procesan, todos los vrtices que
salen del vrtice se relajan
Optsicom
Research Group
CAMINOS-MAS-CORTOS-DAG(G,e,s)
Ordenar topolgicamente los vrtices de G
UNA-SOLA-FUENTE-INICIALIZAR(G,s)
FOREACH u tomado en orden topolgico DO
FOREACH v e Ady[u] DO
RELAJAR(u,v,e)
ENDFOR
ENDFOR
Algoritmo caminos ms cortos en
DAGs
56
Optsicom
Research Group
Caminos ms cortos DAGs: Ejemplo
57
Optsicom
Research Group
Tema 2: Algoritmos sobre grafos
1.- Introduccin
2.- Recorridos
2.1.- Recorrido en anchura
2.2.- Recorrido en profundidad
2.3.- Ordenacin topolgica
2.4.- Componentes fuertemente conexas
3.- rboles de recubrimiento
3.1.- Algoritmo de Kruskal
3.2.- Algoritmo de Prim
4.- Caminos ms cortos desde un origen
4.1.- Caminos ms cortos y relajacin
4.2.- Algoritmo de Dijkstra
4.3.- Algoritmo de Bellman-Ford
4.4.- Caminos ms cortos en grafos dirigidos acclicos
5.- Caminos ms cortos todos con todos
5.1.- Caminos ms cortos y multiplicacin de matrices
5.2.- El algoritmo de Floyd-Warshall
5.3.- Cierre transitivo de un grafo
6.- Flujo mximo
6.1.- Redes de flujo
6.2.- El mtodo de Ford-Fulkerson
58
Optsicom
Research Group
Caminos ms cortos todos con
todos
59
Este problema consiste en encontrar el camino ms
corto entre cada par de vrtices u, v e V en un grafo
dirigido G=(V,E) y ponderado :ER.
Tpicamente, la salida se proporciona en forma de tabla: la
entrada en la fila u y la columna v es el valor de la longitud del
camino ms corto entre u y v.
Puede resolverse llamando |V| veces al un algoritmo de
la seccin anterior:
Dijkstra si los pesos de los vrtices son todos no negativos
Ejecutar |V| veces el algoritmo de Dijsktra => O(V
2
E)
Bellman-Ford si hay pesos negativos en el grafo
Tiene un coste de O(V
2
E) en grafos dispersos y O(V
4
) en densos
Optsicom
Research Group
Caminos ms cortos todos con
todos
60
En esta seccin supondremos que los grafos vienen
representados por su matriz de adyacencia W
W es una matriz nn que representa los pesos de los arcos en
un grafo dirigido.
Es decir, W=e
ij
donde:
Se permiten arcos con pesos negativos pero, de momento,
consideraremos que no los hay

e =
e =
=
=
E j i j i
E j i j i (i,j)
j i
ij
) , ( y si
) , ( y si arco del peso el
si 0
e
Optsicom
Research Group
Caminos ms cortos todos con
todos
61
La salida viene dada por una matriz D
D es una matriz nn que contiene las longitudes de los caminos
entre cada par de vrtices.
Es decir, D=d
ij
donde la entrada d
ij
contiene el coste del camino
ms corto entre i y j.
Por lo tanto d
ij
=(i,j) al trmino del algoritmo
Los caminos ms cortos vienen dados por la matriz de
predecesores
es una matriz nn que contiene los predecesores de los
vrtices en el camino.
Es decir, =
ij
donde la entrada
ij
es:

=
=
caso otro en desde camino el en de predecesor
si o y entre camino hay no si
i j
j i j i NIL
ij
t
Optsicom
Research Group
Caminos ms cortos todos con
todos
Imprimir los caminos mnimos:
IMPRIMIR-CAMINO(, i, j) //, i origen y j destino
IF i = j THEN
IMPRIMIR(i)
ELSE
IF
ij
= NIL THEN
IMPRIMIR(No existe camino entre, i, y ,j)
ELSE
IMPRIMIR-CAMINO(, i,
ij
)
IMPRIMIR(j)
ENDIF
ENDIF
62
Optsicom
Research Group
Caminos ms cortos y
multiplicacin de matrices
63
En primer lugar se presenta un algoritmo O(V
4
), basado
en el esquema de programacin dinmica
Los pasos para desarrollar un algoritmo de
programacin dinmica son
Caracterizar la estructura de una solucin ptima
Definir recursivamente el valor de la solucin ptima
Calcular el valor de la solucin ptima siguiendo un esquema
botton-up
Optsicom
Research Group
Caminos ms cortos y
multiplicacin de matrices
64
Caracterizar la estructura de una solucin ptima
Se puede probar que todos los sub-caminos de un camino ms
corto, son a su vez caminos ms cortos
Supongamos que existe un camino mnimo p ente i y j con m
nodos como mximo
Asumiendo que no hay arcos con pesos negativos, m es finito.
Si los vrtices i y j son distintos, podemos descomponer el
camino p del siguiente modo
donde el camino p contiene m-1 nodos como mximo y es un
camino mnimo entre i y k. Es decir:
j k i j i
p p

'
kj
k i j i e o o + = ) , ( ) , (
Optsicom
Research Group
Caminos ms cortos y
multiplicacin de matrices
65
Definir recursivamente el valor de la solucin ptima
Sea ahora d
ij
(m)
el camino mnimo entre i y j con m vrtices como
mximo
Cuando m=0, hay un camino mnimo entre i y j solo si i=j
Cuando m>0, calculamos d
ij
(m)
como el mnimo de d
ij
(m-1)
(el coste
del camino mnimo desde i hasta j con m-1 vrtices como
mximo) y el mnimo coste de cualquier camino de i a j formado
de m vrtices como mximo, obtenido considerando todos los
posibles predecesores k de j.

=
=
=
j i
j i
d
ij
0
) 0 (
( ) ( ) ( )
kj
m
ik
n k
kj
m
ik
n k
m
ij
m
ij
d d d d e e + = + =

s s

s s
) 1 (
1
) 1 (
1
) 1 ( ) (
min min , min
Optsicom
Research Group
Caminos ms cortos y
multiplicacin de matrices
66
Definir recursivamente el valor de la solucin ptima
Cules son los valores reales de los costes de los caminos
(i,j)?
Cuando el grafo no contiene ciclo con coste negativo, todos los
caminos mnimos son simples y contienen n-1 vrtices a lo sumo
Un camino con ms de n-1 vrtices entre i y j no puede tener
menor coste que el camino de coste mnimo entre i y j.
Los costes de los caminos ms cortos entre i y j vienen dados
por
... ) , (
1 1
= = = =
+ n
ij
n
ij
n
ij
d d d j i o
Optsicom
Research Group
Caminos ms cortos y
multiplicacin de matrices
67
Calcular el valor de la solucin ptima siguiendo un
esquema botton-up
Dada la matriz W=e
ij
de entrada, queremos calcular las matrices
D
(1)
, D
(2)
, , D
(n-1)
, donde para m=0,1,(n-1) tenemos D
(m)
=
(d
ij
(m)
).
La matriz final D
(n-1)
contiene los costes reales de los caminos
ms cortos.
Observar que como d
ij
(1)
=e
ij
, tambin D
(1)
=W.
El corazn del algoritmo es el procedimiento EXTENDER-
CAMINOS-MAS-CORTOS que, dadas las matrices D
(m-1)
y W,
devuelve la matriz D
(m)
.
Optsicom
Research Group
Caminos ms cortos y
multiplicacin de matrices
EXTENDER-CAMINOS-MAS-CORTOS(D, W)
n FILAS(D)
Sea D= d
ij
una matriz nn
FOR i 1 TO n DO
FOR j 1 TO n DO
d
ij

FOR k 1 TO n DO
d
ij
min(d
ij
, d
ik
+ e
kj
)
ENDFOR
ENDFOR
ENDFOR
RETURN D
68
MULTIPLICACION DE MATRICES (A, B)
n FILAS(A)
Sea C una matriz nn
FOR i 1 TO n DO
FOR j 1 TO n DO
c
ij
0
FOR k 1 TO n DO
c
ij
c
ij
+ a
ik
b
kj
ENDFOR
ENDFOR
ENDFOR
RETURN C
Muy similar a:
Optsicom
Research Group
Caminos ms cortos y
multiplicacin de matrices
CAMINOS-MAS-CORTOS-LENTO(W)
n FILAS(W)
D
(1)
W
FOR m 2 TO n-1 DO
D
(m)
EXTENDER-CAMINOS-MAS-CORTOS(D
(m-1)
, W)
ENDFOR
RETURN D
(n-1)
69
Y el siguiente es el procedimiento que lo llama:
Optsicom
Research Group
Caminos ms cortos y
multiplicacin de matrices
70
Optsicom
Research Group
Mejora del tiempo de cmputo
71
No estamos interesados en calcular todas las D
(m)
, sino
solamente D
(n-1)
:
Recordar que en ausencia de ciclos con coste negativo, D
(m)
=
D
(m-1)
para m > n-1
De modo que podemos calcular D
(n-1)
con solo lg(n-1)( productos
de matrices a travs de la secuencia:
Como 2
lg(n-1)(
> n-1, entonces
( ( ( (
1 ) 1 lg( 1 ) 1 lg( ) 1 lg( ) 1 lg(
2 2 2 ) 2 (
4 4 8 ) 8 (
2 2 4 ) 4 (
2 ) 2 (
) 1 (
....
,

= =
= =
= =
= =
=
n n n n
W W W D
W W W D
W W W D
W W W D
W D
(
1 ) 2 (
) 1 lg(

n
D D
n
Optsicom
Research Group
Caminos ms cortos y
multiplicacin de matrices
CAMINOS-MAS-CORTOS-RAPIDO(W)
n FILAS(W)
D
(1)
W
m 1
WHILE n-1 > m DO
D
(2m)
EXTENDER-CAMINOS-MAS-CORTOS(D
(m)
, D
(m)
)
m 2 m
ENDFOR
RETURN D
(m)
72
Como resultado, obtenemos esta versin rpida del
algoritmo de los caminos ms cortos:
Optsicom
Research Group
El algoritmo de Floyd-Warshall
73
Es un algoritmo para encontrar el camino ms corto
entre cada par de vrtices u, v e V en un grafo dirigido
G=(V,E) y ponderado :ER.
Tiene una complejidad O(V
3
).
Se asume que puede haber aristas con costes negativos
pero no puede haber ciclos con costes negativos
Tambin est basado en el esquema algortmico de
programacin dinmica. Los pasos son:
Caracterizar la estructura de una solucin ptima
Definir recursivamente el valor de la solucin ptima
Calcular el valor de la solucin ptima siguiendo un esquema botton-
up.
Optsicom
Research Group
El algoritmo de Floyd-Warshall
74
Caracterizar la estructura de una solucin ptima
Este algoritmo utiliza otra estructura de la solucin ptima
Dado un camino p=<v
1
, v
2
, , v
l
>, considera los vrtices
intermedios
Los vrtices intermedios de este camino son {v
2
, , v
l-1
}.
El algoritmo de Floyd-Warshall se basa en la siguiente
observacin:
Sean V={1,2,,n} los vrtices de G.
Consideremos un subconjunto {1,2,,k}, para cierto k.
Para cualquier par de vrtices i,jeV consideremos todos los caminos
entre i y j cuyos vrtices intermedios pertenecen al conjunto
{1,2,,k} y sea p el camino mnimo de entre todos ellos.
El algoritmo de F-W explota una relacin entre el camino p y el
camino mnimo entre i y j con todos los vrtices intermedios en el
conjunto {1,2,,k-1}
Optsicom
Research Group
El algoritmo de Floyd-Warshall
75
La relacin depende de si el vrtice k es intermedio o no en el
camino p:
Si k no es un vrtice intermedio de p, entonces todos los vrtices
intermedios de p pertenecen al conjunto {1,2,,k-1}. Por lo tanto, un
camino mnimo entre los vrtices i y j con todos los vrtices
intermedios en el conjunto {1,2,,k-1} es tambin un camino
mnimo entre los vrtices i y j con todos los vrtices intermedios en
el conjunto {1,2,,k}
Si k es un vrtice intermedio de p, entonces dividimos el camino p
en los caminos:
Como los sub-caminos de un camino mnimo son tambin caminos
mnimos, p
1
es un camino mnimo entre i y k con todos los vrtices
intermedios en {1,2,,k}. De hecho, k no es un vrtice intermedio
de p
1
y por lo tanto p
1
es un camino mnimo entre i y k con todos los
vrtices intermedios en {1,2,,k-1}. De forma similar, p
2
es un
camino mnimo entre k y j con todos los vrtices intermedios en
{1,2,,k-1}.
j k k i
p p
2 1
y
Optsicom
Research Group
El algoritmo de Floyd-Warshall
76
Definimos recursivamente el valor de la solucin ptima:
Sea d
ij
(k)
el peso del camino ms corto entre i y j tal que todos
los vrtices intermedios del camino pertenecen al conjunto
{1,2,,k}.
Cuando k = 0, no hay vrtices en el camino entre i y j con valores
superiores a 0. Por lo tanto, d
ij
(0)
= e
ij
.
Una definicin recursiva viene dada por:
El resultado final es la matriz D
(n)
(es decir, d
ij
(n)
= (i,j)), ya que
los vrtices de esos caminos estn en el conjunto {1,2,,n}.

> +
=
=

1 si ) , min(
0 si
) 1 ( ) 1 ( ) 1 (
) (
k d d d
k
d
k
kj
k
ik
k
ij
ij
k
ij
e
Optsicom
Research Group
El algoritmo de Floyd-Warshall
77
Calcular el valor de la solucin ptima siguiendo un
esquema botton-up:
FLOYD-WARSHALL(W)
n FILAS(D)
D
(0)
W
FOR k 1 TO n DO
FOR i 1 TO n DO
FOR j 1 TO n DO
d
ij
(k)
min(d
ij
(k-1)
, d
ik
(k-1)
+ d
kj
(k-1)
)
ENDFOR
ENDFOR
ENDFOR
RETURN D
(n)
Optsicom
Research Group
El algoritmo de Floyd-Warshall
78
Clculo de la matriz de predecesores H a la vez que se
computa la matriz D :

ij
(k)
es el predecesor del vrtice j en el camino ms corto que
empieza desde i con todos los vrtices intermedios del camino
en el conjunto {1,2,,k}.
Cuando k = 0, no hay vrtices en el camino entre i y j con valores
superiores a 0. Por lo tanto
y para k > 1 :

+ >
+ s
=


) 1 ( ) 1 ( ) 1 ( ) 1 (
) 1 ( ) 1 ( ) 1 ( ) 1 (
) (
si
si
k
kj
k
ik
k
ij
k
kj
k
kj
k
ik
k
ij
k
ij k
ij
d d d
d d d
t
t
t

< =
= =
=
ij
ij
) 0 (
y si
o si
e
e
t
j i i
j i NIL
ij
Optsicom
Research Group
El algoritmo de Floyd-Warshall
79
Ejemplo 1/3:
Optsicom
Research Group
El algoritmo de Floyd-Warshall
80
Ejemplo 2/3:
Optsicom
Research Group
El algoritmo de Floyd-Warshall
81
Ejemplo 3/3:
Optsicom
Research Group
Cierre transitivo de un grafo
82
El cierre transitivo de un grafo se define del siguiente
modo:
Dado un grafo dirigido G=(V,E) y su conjunto de vrtices V =
{1,2,,n}, se llama cierre transitivo de G a un grafo G*=(V,E*)
tal que E*={(i,j) : existe un camino entre i y j en G }.
Un modo de calcular el cierre transitivo de un grafo es asignar un
valor de 1 a cada arista E de G y ejecutar el algoritmo de F-W. Si
existe un camino entre i y j entonces d
ij
< n. Si no existe, d
ij
= .
Existe otra forma de calcular el cierre transitivo similar al anterior
pero utilizando menos recursos.
Se sustituyen las operaciones min y + en el algoritmo de F-W por
operaciones lgicas AND y OR
Se define t
ij
(k)
como 1 si existe un camino en G entre i y j con los
vrtices intermedios en el conjunto {1,2,,k}, y 0 en otro caso.
Optsicom
Research Group
Cierre transitivo de un grafo
83
Las definiciones recursivas para t
ij
(k)
son:
Para k = 0 :
Y para k > 1:
) 1 ( ) 1 ( ) 1 ( ) (
. v =
k
kj
k
ik
k
ij
k
ij
t t t t

e =
e =
=
E (i,j) j i
E (i,j) j i
t
ij
e si 0
o si 1
) 0 (
Optsicom
Research Group
Cierre transitivo de un grafo
84
CIERRE-TRANSITIVO(G)
n |V[G]|
FOR i 1 TO n DO
FOR j 1 TO n DO
IF i=j O (i,j) eE THEN
t
ij
(0)
1
ELSE
t
ij
(0)
0
ENDIF
ENDFOR
ENDFOR
FOR i 1 TO n DO
FOR j 1 TO n DO
FOR k 1 TO n DO
t
ij
(k)
t
ij
(k-1)
OR (t
ik
(k-1)
AND t
kj
(k-1)
)
ENDFOR
ENDFOR
ENDFOR
RETURN T
(n)
Optsicom
Research Group
Cierre transitivo de un grafo
85
Optsicom
Research Group
Tema 2: Algoritmos sobre grafos
1.- Introduccin
2.- Recorridos
2.1.- Recorrido en anchura
2.2.- Recorrido en profundidad
2.3.- Ordenacin topolgica
2.4.- Componentes fuertemente conexas
3.- rboles de recubrimiento
3.1.- Algoritmo de Kruskal
3.2.- Algoritmo de Prim
4.- Caminos ms cortos desde un origen
4.1.- Caminos ms cortos y relajacin
4.2.- Algoritmo de Dijkstra
4.3.- Algoritmo de Bellman-Ford
4.4.- Caminos ms cortos en grafos dirigidos acclicos
5.- Caminos ms cortos todos con todos
5.1.- Caminos ms cortos y multiplicacin de matrices
5.2.- El algoritmo de Floyd-Warshall
5.3.- Cierre transitivo de un grafo
6.- Flujo mximo
6.1.- Redes de flujo
6.2.- El mtodo de Ford-Fulkerson
86
Optsicom
Research Group
Redes de flujo
87
Un grafo dirigido tambin se puede interpretar como una
red de flujo, y utilizarlo para responder preguntas acerca
del material que fluye
Supongamos un material que se produce en una fuente y se
desaparece en un sumidero a la misma velocidad.
El flujo de material en un punto del sistema est intuitivamente
relacionado con la velocidad a la que se mueve
Las redes de flujo se pueden utilizar para modelar
Redes de tuberas
Redes de ordenadores
Redes elctricas
.
Optsicom
Research Group
Redes de flujo
88
Redes de flujo
Cada arco en las redes de flujo puede asemejarse a un conducto
para el material
Cada conducto tiene un caudal (capacidad)
Los vrtices son uniones entre conductos y en ellos el flujo se
conserva (excepto en la fuente y el sumidero).
Problema del flujo mximo:
Cul es la mxima velocidad a la que un material puede fluir
desde el origen al destino sin violar las restricciones de
capacidad?
Optsicom
Research Group
Redes de flujo
89
Definiciones previas
Una red de flujo G=(V,E) es un grafo dirigido en el que cada
arista (u,v)eE tiene una capacidad no negativa c(u,v)>0.
Si (u,v)eE se asume que c(u,v)=0.
Se distinguen dos vrtices en la red de flujo: la fuente s y el
sumidero t.
Se asume que el resto de los vrtices pertenecen a algn
camino entre s y t.
El grafo es pues conexo y |E| > |V|-1.
Optsicom
Research Group
Redes de flujo
90
Definicin del problema
Sea G=(V,E) una red de flujo (con una funcin de capacidad c
implcita). Sea s la fuente y t el sumidero. Un flujo en G es una
funcin real f : VVR que tiene las siguientes tres propiedades:
Capacidad: para todo u,veV se requiere f(u,v) c(u,v).
Simetra: para todo u,veV se tiene que f(u,v) = -f(u,v).
Conservacin: para todo ueV-{s,t} se cumple
La cantidad f(u,v), que puede ser positiva o negativa se llama
flujo de red entre el vrtice u y el v. El valor del flujo f se define
como:
es decir, el flujo de red de salida de la fuente. El problema del
flujo mximo consiste en maximizar | f | entre s y t.

e
=
V v
v u f 0 ) , (

e
=
V v
v s f f ) , (
Optsicom
Research Group
Redes de flujo
91
Significado de las restricciones:
Por la restriccin de capacidad, el flujo de red no debe exceder
la capacidad entre vrtices.
Por la restriccin de simetra, el flujo de red desde un vrtice u y
hasta otro vrtice v es el negativo respecto al flujo en direccin
inversa. Esto implica que el flujo de red entre un vrtice y l
mismo es 0, ya que f(u,u) = -f(u,u), por lo que f(u,u) = 0. Por lo
tanto, se puede reescribir la conservacin del flujo como
Adems no puede haber flujo entre u y v si no hay un arco entre
ellos. Si (u,v)eE y (v,u) e E entonces c(u,v)=c(v,u)=0. Por lo tanto,
por la restriccin de capacidad f(u,v)0 y f(v,u)0. Pero como por
la restriccin de simetra f(u,v)=-f(v,u), se tiene que f(u,v)=f(v,u)=0
} , { , 0 ) , ( t s V v v u f
V u
e =

e
Optsicom
Research Group
Redes de flujo: Ejemplo
92
Optsicom
Research Group
El mtodo de Ford-Fulkerson
93
Es un mtodo ms que un algoritmo
puesto que admite diferentes implementaciones que difieren en
el tiempo de cmputo
Este mtodo depende de tres ideas fundamentales que
trascienden este mtodo:
Redes residuales
Caminos de aumento
Cortes
Son ideas importantes para el teorema max-flow min-cut, que
caracteriza el valor del flujo mximo en trminos de cortes del
flujo de red
Optsicom
Research Group
El mtodo de Ford-Fulkerson
94
Es un mtodo iterativo
Inicialmente, f(u,v) = 0 para todo u,veV .
En cada iteracin, se incrementa el valor del flujo buscando un
camino de aumento, que es un camino desde la fuente al
sumidero que puede conducir ms flujo.
Se repite el proceso previo hasta no encontrar ningn camino de
aumento.
En virtud del teorema max-flow min-cut, este proceso conduce al
flujo mximo.
METODO-DE-FORD-FULKERSON(G,s,t)
Inicializar flujo f a 0
WHILE exista un camino de aumento p DO
Aumentar el flujo f a travs de p
ENDWHILE
RETURN f
Optsicom
Research Group
El mtodo de Ford-Fulkerson
95
Redes residuales
Supongamos una red de flujo G(V,E) con fuente s y sumidero t.
Sea f un flujo en G, y consideremos un par de vrtices u,veV.
El incremento de flujo de red adicional que se puede empujar
desde u hasta v sin exceder la capacidad c(u,v) es la capacidad
residual de c
f
(u,v) dada por
Dada una red de flujo G(V,E) y un flujo f , la red residual de G
inducido por f es G
f
(V,E
f
), donde
Es decir, cada arista de la red residual (o arista residual) puede
admitir un flujo de red estrictamente positivo.
) , ( ) , ( ) , ( v u f v u c v u c
f
=
{ } 0 ) , ( : ) , ( > e = v u c V V v u E
f f
Optsicom
Research Group
El mtodo de Ford-Fulkerson
96
Redes residuales: ejemplo
Optsicom
Research Group
El mtodo de Ford-Fulkerson
97
Caminos de aumento
Supongamos una red de flujo G(V,E) y un flujo f.
Un camino de aumento es un camino sencillo de s a t en G
f
.
Por definicin de red residual cada arista del camino de aumento
puede admitir un flujo de red estrictamente positivo sin violar las
restricciones de capacidad.
Se define la capacidad residual del camino como:
{ } p v u v u c p c
f f
e = ) , ( : ) , ( min ) (
Optsicom
Research Group
El mtodo de Ford-Fulkerson
98
Caminos de aumento: ejemplo
Optsicom
Research Group
El mtodo de Ford-Fulkerson
99
Cortes de redes de flujo
Un corte (S,T) de una red de flujo G(V,E) es una particin de V en
S y T=V-S tal que seS y teT.
Si f es un flujo, el flujo de red a travs del corte (S,T) se define
como f(S,T). La capacidad del corte es c(S,T).
Cortes: ejemplo
Optsicom
Research Group
El mtodo de Ford-Fulkerson
100
Teorema max-flow min-cut: Si f es un flujo en una red
de flujo G(V,E) con fuente s y sumidero t, las siguientes
condiciones son equivalentes:
f es un flujo mximo en G.
La red residual G
f
no contiene caminos de aumento.
|f|= c(S,T) para algn corte (S,T) de G.
Demostracin en la pg 596 del libro: Cormen introduction to
algorithms
Optsicom
Research Group
El mtodo de Ford-Fulkerson
101
Algoritmo de Ford-Fulkerson bsico:
En cada iteracin del algoritmo se busca un camino de aumento
p cualquiera y se aumenta el flujo de red f en l por valor de la
capacidad residual del camino p, c
f
(p).
En esta implementacin del mtodo se calcula el flujo mximo en
un grafo G(V,E) actualizando el flujo de red f[u,v] entre cada par
de vrtices u,v que estn conectados mediante una arista.
Si los vrtices u,v no estn conectados, se asume que f[u,v]=0.
Este algoritmo bsico es una extensin del pseudocdigo visto
en la diapostiva 94.
Optsicom
Research Group
El mtodo de Ford-Fulkerson
102
Algoritmo de Ford-Fulkerson bsico:
METODO-DE-FORD-FULKERSON(G,s,t)
FOREACH (u,v)eE[G] DO
f[u,v] 0
f[v,u] 0
ENDFOR
WHILE exista un camino p entre s y t en el grafo residual G
f
DO
c
f
(p)min{c
f
(u,v): (u,v) e p}
FOREACH (u,v)ep DO
f[u,v] f[u,v] + c
f
(p)
f[v,u] - f[u,v]
ENDFOR
ENDWHILE
RETURN f
Optsicom
Research Group
El mtodo de Ford-Fulkerson:
Ejemplo 1/3
103
Optsicom
Research Group
El mtodo de Ford-Fulkerson:
Ejemplo 2/3
104
Optsicom
Research Group
El mtodo de Ford-Fulkerson:
Ejemplo 3/3
105
Optsicom
Research Group
El mtodo de Ford-Fulkerson
106
Anlisis del algoritmo de Ford-Fulkerson:
El tiempo de ejecucin del algoritmo depende de cmo se
determine p. Si se elige mal, el algoritmo podra incluso no
terminar.
Si se utiliza una estrategia de primero en anchura para calcular
el camino de aumento, el algoritmo se ejecuta en tiempo
polinmico.
El algoritmo de Ford-Fulkerson se ejecuta en tiempo O(E |f*|),
donde f* es el flujo mximo encontrado por el algoritmo.
El primer bucle se ejecuta en O(E)
El segundo gran bucle se ejecuta un mnimo de |f*| veces, puesto
que el flujo aumenta como mnimo en una unidad en cada iteracin
(observar que se hace la suposicin de que f es entero)

Potrebbero piacerti anche