Sunteți pe pagina 1din 25

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Algoritmos sobre Grafos


1

Algoritmos y Complejidad
Algoritmos sobre Grafos

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo
Pablo R. Fillottrani Algoritmos y Complejidad

Pablo R. Fillottrani
Depto. Ciencias e Ingeniera de la Computacin Universidad Nacional del Sur

Primer Cuatrimestre 2009

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Representacin de grafos
los grafos constituyen una de las ms importantes Estructuras de Datos en las Ciencias de Computacin. Un inmensa variedad de problemas basan su solucin en el uso de grafos en esta materia slo nos interesaremos en aquellos problemas dnde es posible una representacin total del grafo en la memoria de la mquina las heursticas para el manejo de grafos implcitos se ven en Inteligencia Articial

Representacin de Grafos

Matriz de Adyacencia Lista de Adyacencia

los arcos pueden o no tener peso y/o etiquetas los arcos pueden o no ser dirigidos se pueden permitir o no varios arcos entre los mismos nodos (multigrafos) se pueden permitir o no arcos hacia el mismo nodo

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Representacin grafos no dirigidos

Representacin grafos dirigidos

Memoria

matriz de adyacencia lista de adyacencia

(n2 ) (n + 2a) = (max(n, a))

Memoria

matriz de adyacencia lista de adyacencia

(n2 ) (n + a) = (max(n, a))

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

un recorrido es un algoritmo que visita todos los nodos de un grafo supondremos los grafos representados por matrices de adyacencia los algoritmos ms usados para recorrer grafos generalizan los recorridos de rboles para el caso de grafo se necesita guardar informacin sobre los nodos que ya han sido visitados, de modo de no volver a visitarlos

para recorrer grafos, se etiquetarn dinmicamente los nodos como:


nodos blancos: todava no han sido visitados nodos grises: ya han sido visitados, pero no se ha controlado la visita a todos sus adyacentes nodos negros: ya han sido visitados, al igual que todos sus adyacentes

esta caracterizacin implica que ningn nodo negro tiene un nodo blanco como adyacente

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Recorrido por niveles

Algoritmo recorrido por niveles

el recorrido por niveles, o breadth-rst search (BF), basa el orden de visita de los nodos del grafo en una E.D. Cola, incorporndole en cada paso los adyacentes al nodo actual esto implica que se visitarn todos los hijos de un nodo antes de proceder con sus dems descendientes las operaciones sobre la E.D. Cola se suponen implementadas en tiempo (1)

el algoritmo que se presenta a continuacin es no determinstico: la eleccin de los nodos en cada ciclo puede hacerse en forma arbitraria, o dependiente del contexto si es necesario puede aplicarse tanto a grafos dirigidos y como a no dirigidos est dividido en dos procedimientos bfs inicializa las estructuras de datos, inicia el recorrido y
controla que todos los nodos hayan sido visitados visitaBF realiza el recorrido propio a partir de un nodo ya elegido

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

costo

veces

costo

veces

PROCEDURE bfs(G=N,A) FOR cada vrtice v en N color[v]::=blanco ENDFOR Q.ColaVaca() FOR cada vrtice v en N IF color[v]=blanco color[v]::=gris Q.insertar(v) visitarBF(G,Q) ENDIF ENDFOR
Pablo R. Fillottrani

a a a a a TvBF (n)

n 1 n n n n

PROCEDURE visitarBF(G,Q) WHILE no Q.vaca() u::=Q.primero() IF existe w adyacente a u tal que color[w]=blanco color[w]::=gris Q.insertar(w) ELSE color[u]::=negro Q.sacarDeCola() ENDIF ENDWHILE
Pablo R. Fillottrani Algoritmos y Complejidad

b b

n n

an

an

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Anlisis del tiempo de ejecucin


se puede probar por induccin sobre el nmero de iteraciones
que todo nodo es coloreado blanco, gris y negro exactamente una vez, y en ese orden que todos los nodos en Q son grises y solamente estan una vez en Q que los controles de adyacencia se hace exactamente una vez por cada arco.

n i =1

TBF (n)

i =1

(a + TvisitarBF (n)) = (a + O (a n)) O (n4 )

la cota obtenida es muy mala una anlisis ms detallado resulta en una cota mejor

esto resulta TBF (n) = (max(n, a)), tomando como barmetros las operaciones sobre la E.D. Cola

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Ejemplo de BFS (I)

Ejemplo de BFS (II)

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Ejemplo de BFS (III)

Ejemplo de BFS (IV)

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Ejemplo de BFS (V)

Propiedades
al mismo tiempo que se hace un recorrido por niveles de un grafo se pueden calcular algunos datos adicionales que sern tiles para las aplicaciones de este algoritmo la foresta del recorrido es el subgrafo de G formado por todos los arcos utilizados en el recorrido se puede probar que siempre es una foresta (conjunto de rboles) se representa a travs de un arreglo adicional padre[1..n] donde cada nodo guarda su antecesor en la foresta; si padre[i ] = 0 entonces el nodo es una raz este arreglo se inicializa en 0
Pablo R. Fillottrani Algoritmos y Complejidad Pablo R. Fillottrani Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

el Nivel de cada nodo es la distancia (cantidad de arcos) que deben recorrerse en la foresta para llegar desde la raz al nodo correspondiente se representa por un arreglo adicional nivel[1..n], inicializado en 0 se debe recordar que la raz es en principio un nodo arbitrario se pueden calcular esta informacin adicional al mismo tiempo que se hace el recorrido; esto no agrega tiempo adicional al orden del algoritmo

PROCEDURE visitarBF(G,Q) WHILE no Q.esVaca() u::=Q.primero() IF existe w adyacente a u tal que color[w]=blanco color[w]::=gris padre[w]::=u; nivel[w]::=nivel[u]+1 Q.insertar(w) ELSE color[u]::=negro Q.sacarDeCola() ENDIF ENDWHILE
Pablo R. Fillottrani Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

se pueden probar las siguientes propiedades sobre los recorridos por nivel Lema Si el grafo es conexo, entonces la foresta de recorrido es un rbol en el caso de un grafo dirigido, conexo signica que existe un camino de ida y de vuelta entre cada par de nodos Lema al nalizar un recorrido BF, nivel[v ] contiene la mnima distancia desde la raz del rbol de v en la foresta de recorrido hasta v ejercicio: comparar con el algoritmo de Dijkstra

el recorrido permite clasicar los arcos del grafo en las siguientes categoras: arcos de la foresta son los arcos (padre[v ], v ) utilizados en el
recorrido arcos hacia atrs son arcos (u , v ) en donde v es un ancestro de u en la foresta del recorrido arcos hacia adelante son arcos (u , v ) en donde v es descendiente de u en la foresta del recorrido arcos que cruzan son los dems arcos que no entran en las otras categoras. Los extremos pueden estar en el mismo rbol o en rboles diferentes

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Propiedades

si el grafo es no dirigido, como cada arco es considerado dos veces esta clasicacin puede ser ambigua. Se toma la primera de las categoras posibles segn el orden dado estas categoras pueden calcularse en el mismo algoritmo del recorrido, sin aumentar el orden del tiempo de ejecucin (la demostracin queda como ejercicio)

Teorema Si el grafo es dirigido, entonces un recorrido BF no genera arcos hacia adelante Teorema Si el grafo es no dirigido, entonces un recorrido BF no genera arcos hacia atrs ni hacia adelante las demostraciones se hacen por el absurdo (ejercicio)

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Recorrido por profundidad


el recorrido por profundidad, o depth-rst search (DF), basa el orden de visita de los nodos del grafo en una E.D. Pila, agregando en cada paso los adyacentes al nodo actual esto hace que agote los nodos accesibles desde un hijo antes de proceder con sus hermanos las operaciones sobre la E.D. Pila se suponen de tiempo en (1) al igual que el recorrido por profundidad, se presenta un algoritmo no determinstico que puede modicarse para incluir un orden en la eleccin de los nodos puede aplicarse tanto a grafos dirigidos como a grafos no dirigidos
Pablo R. Fillottrani Algoritmos y Complejidad

Algoritmo
PROCEDURE dfs(G=N,A) FOR cada vrtice v en N color[v]::=blanco ENDFOR P.pilaVaca() FOR cada vrtice v en N IF color[v]=blanco color[v]::=gris P.apilar(v) visitarDF(G,P) ENDIF ENDFOR
Pablo R. Fillottrani Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

PROCEDURE visitarDF(G,P) WHILE no P.esVaca() u::=P.tope() IF existe nodo w adyacente a u tal que color[w]=blanco color[w]::=gris P.apilar(w) ELSE color[u]::=negro P.desapilar() ENDIF ENDWHILE

en forma anloga al recorrido por niveles, se prueba por induccin que


todo nodo es coloreado blanco, gris y negro exactamente una vez, y en ese orden todos los nodos en P son grises y solamente estan una vez en P los controles de adyacencia se hace exactamente una vez por cada arco

resultando en un algoritmo (n + a)

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Ejemplo (I)

Ejemplo (II)

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Ejemplo (III)

Ejemplo (IV)

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Ejemplo (V)

Ejemplo (VI)

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Ejemplo (VII)

Ejemplo (VIII)

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Propiedades
al igual que en los recorridos por niveles, es posible obtener la foresta del recorrido de un recorrido por profundidad en cambio, la numeracin nivel[u ] no tiene sentido s es posible en este tipo de recorrido numerar a los nodos de acuerdo al tiempo del evento de descubrimiento (numeracin preorden), o de nalizacin (numeracin postorden) la numeracin en preorden se hace simultneamente con la coloracin en gris; y se guarda en un arreglo d[1..n] la numeracin en postorden coincide con la colaracin en negro; y se guarda en un arreglo f[1..n]

Clculo de numeracin
PROCEDURE dfs(G=N,A) FOR cada vrtice v en N color[v]::=blanco ENDFOR P.pilaVaca(); tiempo::=0 FOR cada vrtice v en N IF color[v]=blanco color[v]::=gris tiempo++; d[v]::=tiempo P.apilar(v) visitarDF(G,P) ENDIF ENDFOR
Pablo R. Fillottrani Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

PROCEDURE visitarDF(G,P) WHILE no P.esVaca() u::=P.tope() IF existe nodo w adyacente a u tal que color[w]=blanco color[w]::=gris tiempo++; d[w]::=tiempo P.apilar(w) ELSE color[u]::=negro tiempo++; f[u]::=tiempo P.desapilar() ENDIF ENDWHILE
Pablo R. Fillottrani Algoritmos y Complejidad

Lema Sea G = N , A un grafo, y d[], f[] la numeracin de descubrimiento y nalizacin obtenida mediante un recorrido DF. Entonces

(u , v ) es un arco de la foresta o hacia adelante si y solo si d[u ] < d[v ] < f[v ] < f[u ] (u , v ) es un arco hacia atrs si y solo si d[v ] < d[u ] < f[u ] < f[v ] (u , v ) es un arco que cruza si y solo si d[v ] < f[v ] < d[u ] < f[u ]
Pablo R. Fillottrani Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Ejemplo numeracin y arcos


muchas propiedades surgen a partir de la informacin obtenida en un recorrido DF Teorema En un recorrido DF de un grafo no dirigido G, todos sus arcos son de la foresta o hacia atrs Demostracin. Sea (u , v ) un arco del grafo, y supongamos que u es descubierto antes que v . Luego v es descubierto y nalizado antes de nalizar u . Si el nodo v tiene como padre a u entonces (u , v ) es un arco de la foresta; si el nodo v tiene otro padre, entonces (u , v ) es un arco hacia atrs. En forma similar se prueba si v es descubierto antes que u .

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Lema En un recorrido DF de un grafo G, para cualquier par de nodos distintos u , v vale exactamente uno de: los intervalos [d[u ], f[u ]] y [d[v ], f[v ]] son totalmente disjuntos Corolario (anidamiento de descendientes) v es un descendiente propio de u en la foresta de recorrido si y solo si d[u ] < d[v ] < f[v ] < f[u ] Demostracin. Inmediato del lema 7.

[d[u ], f[u ]] [d[v ], f[v ]] y u es descendiente de v [d[v ], f[v ]] [d[u ], f[u ]] y v es descendiente de u
Demostracin. Analizando caso por caso si d[u ] < d[v ] < f[u ], d[u ] < f[u ] < d[v ], d[v ] < d[u ] < f[v ] y d[v ] < f[v ] < d[u ]

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Recorrido por Niveles Recorrido por profundidad

Teorema (caminos blancos) En un recorrido DF de un grafo G, un nodo v es descendiente de un nodo u si y solo si en el momento d[u ] cuando u es descubierto existe un camino de u a v que consiste totalmente de nodos blancos. Demostracin. Para el solo si basta con aplicar el teorema 8 a todos los nodos intermedios. Para el si supongamos por el absurdo que v es alcanzable desde u por un camino de nodos blancos en el momento d[u ], pero v no es descendiente de u . Se toma el primer nodo en el camino de u a v que no es descendiente de u , y se demuestra que su intervalo est contenido en [d[u ], f[u ]], contradiciendo el teorema 8.
Pablo R. Fillottrani Algoritmos y Complejidad Pablo R. Fillottrani Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Denicin del problema

Problema: dado un grafo dirigido acclico G, un orden topolgico es un ordenamiento lineal de sus nodos de forma que si el arco (u , v ) G entonces u aparece antes de v en el ordenamiento si el grafo tiene ciclos, entonces tal ordenamiento no existe el orden topolgico es usado para planicar una serie de acciones que tienen precedencias: cada nodo representa una accin, y cada arco (u , v ) signica que la accin u debe ejecutarse necesariamente antes de v

la numeracin de los nodos en un recorrido DFS da una idea del algoritmo para resolver el problema

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Correctitud
PROCEDURE OrdenTopolgico(G) array f[1..n] DFS(G,f) % calculando f[v] L::= lista de nodos ordenada por f en forma decreciente RETURN L
el tiempo de ejecucin de este algoritmo claramente es (n log n), pero es posible reducirlo a (n + a) cambiando levemente el algoritmo del recorrido (ejercicio)

Lema Un grafo dirigido G es acclico si y solo si cualquier recorrido DFS de G no produce arcos hacia atrs. Demostracin. El solo si es inmediato. Para el si basta aplicar el teorema 9 al primer nodo del ciclo.

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Denicin del problema

Teorema El resultado del algoritmo anterior es un orden topolgico. Demostracin. Basta con mostrar que para todo arco (u , v ) en G dirigido acclico, f [v ] < f [u ].

dado un grafo dirigido G = N , A un componente fuertemente conexo (CFC) es un conjunto U N maximal tal que para todo u , v U valen u G v y v G u (donde a G b signica que existe en G un camino de a a b) Problema: encontrar todos los CFC de un grafo dirigido G para el caso de grafos no dirigidos, el problema se denomina componentes conexos y puede resolverse directamente a partir de cualquiera de los recorridos vistos

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

sea G un grafo, su grafo traspuesto GT se dene como GT = N , {(u , v ) : (v , u ) A} es interesante observar que G y GT tienen los mismos CFC (ejercicio) el algoritmo para CFC hace dos recorridos: uno del grafo G y otro del grafo GT en el segundo recorrido, los nodos se consideran en orden decreciente de f[]

PROCEDURE CFC(G) array f[1..n] DFS(G,f) calcular GT % el traspuesto de G array padre[1..n] DFS(GT, padre, f) % padre es la foresta del recorrido, % tomando los nodos por f decreciente RETURN padre

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Ejemplo

cada rbol de la foresta representado en padre contiene exactamente los elementos de un CFC suponiendo una representacin del grafo mediante lista de adyacencia, el tiempo y espacio del algoritmo anterior es de (n + a) (ejercicio)

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Correctitud

Lema para demostrar la correctitud del algoritmo, se usar el concepto de grafo de componentes GCFC = N CFC , ACFC que est formado por un nodo que representa a cada componente fuertemente conexo en G, y para cada par de CFC u , v se agrega un arco (u , v ) si en G existe en el componente u un nodo que presenta un arco hacia otro nodo en el componente v la principal propiedad de G (ejercicio)
CFC

Sean u , v N CFC entonces la existencia de (u , v ) ACFC implica que (v , u ) ACFC Demostracin. Si existen los dos arcos, entonces u y v seran el mismo CFC en G.

es que siempre se trata de un dag

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Lema Sean u , v N CFC tal que (u , v ) ACFC . Entonces f[u ] > f[v ]. se extiende la numeracin de descubrimiento y nalizacin para conjuntos de nodos de la forma: Demostracin. Se distinguen dos casos de acuerdo a cual componente u o v es encontrado primero en el primer recorrido. Si primero se encuentra u entonces v es descendiente de u .Si primero se encuentra v , dado que existe (u , v ) entonces no existe (v , u ) por el lema 12. Esto signica que en el momento f[v ] todos los nodos en u son blancos, por lo que f[u ] > f[v ]. Corolario Sea C , C dos CFC distintos de un grafo G = N , A , entonces si existe (u , v ) AT tal que u C y v C vale que f[C ] < f[C ].
Pablo R. Fillottrani Algoritmos y Complejidad Pablo R. Fillottrani Algoritmos y Complejidad

d[C ] = minuC (d[u ])

f[C ] = maxuC (f[u ])

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Denicin del problema


Teorema El algoritmo calcula correctamente los CFC de cualquier grafo G. Demostracin. Por induccin sobre la cantidad de rboles en la foresta del segundo recorrido. Para el caso inductivo se muestra que si u es la raz del k -simo rbol del segundo recorrido, entonces todos los nodos del CFC de u pertenecen a ese rbol. Adems, por el corolario 13 cualquier arco que toca el CFC de u debe ser tal que conecta un descendiente de u con un nodo en un rbol anterior en la foresta. Luego el rbol con raz u contiene exactamente el CFC de u . sea G no dirigido, conexo. Un punto de articulacin es un nodo de G cuya eliminacin (junto con todos sus arcos incidentes) deja al grafo resultante disconexo un puente es un arco de G cuya eliminacin deja al grafo resultante disconexo Problema: dado un grafo no dirigido conexo G = N , A encontrar todos sus puntos de articulacin

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

se pueden determinar los puntos de articulacin mediante un solo recorrido DFS de G los siguientes resultados permiten denir el algoritmo Lema Sea G un grafo no dirigido conexo, y consideremos n N el nodo inicial de un recorrido DF. Entonces n es un punto de articulacin si y solo tiene al menos dos hijos. Demostracin. Es claro el si. Para el solo si, sean n1 , n2 dos descendientes de n. Si n no fuera punto de articulacin existira un camino blanco entre n1 y n2 en el momento de visitar el primero de ellos, con lo que el segundo sera descendiente del primero.
Pablo R. Fillottrani Algoritmos y Complejidad

Lema Sea G un grafo no dirigido conexo, y consideremos n N un nodo no inicial en un recorrido DF. Entonces n N es punto de articulacin si y solo existe un hijo u de n tal que ningn descendiente v de u tiene un arco (v , w ) donde w es ancestro propio de n. Demostracin. Es claro que si n es punto de articulacin entonces tal arco no puede existir. Para el solo si, suponemos que existe u hijo de n tal que ninguno de sus descendientes v tiene un arco hacia un ancestro propio w de n. Entonces, removiendo n del grafo no existe ningn camino posible de u a w , por lo que n es punto de articulacin.

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

de acuerdo al lema anterior, para saber si un nodo n es un punto de articulacin es suciente con vericar si se puede acceder a un ancestro propio desde un descendiente de n por un arco fuera de la foresta teniendo en cuenta la numeracin de descubrimiento generada por un recorrido DFS, se puede computar para cada nodo el ancestro ms viejo que se alcanza a travs de arcos hacia atrs

d[v ] d[w ] : (v , w ) es un arco hacia atrs masviejo[v ] = min masviejo [w ] : (v , w ) es un arco


de la foresta

PROCEDURE PuntosArticulacin(G) array d[1..n], masviejo[1..n], pa[1..n] DFS(G,d) calcular masviejo en otro recorrido DFS de G pa[1]::= tiene ms de un hijo en la foresta FOR cada v en N-{1} pa[v]::= existe un hijo u de v tal que d[v]<=masviejo[u] ENDFOR RETURN pa

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Puentes
para determinar los puentes es til la siguiente propiedad Lema el tiempo de ejecucin es de (a) (dos recorridos ms una iteracin sobre todos los nodos) se podran mejorar las constantes realizando el clculo completo en un slo recorrido (ejercicio) Sea G = N , A un grafo no dirigido. Un arco (u , v ) A es un puente en G si y solo si (u , v ) no pertenece a ningn ciclo simple en G. Demostracin.

): entonces removiendo (u , v ) existira un otro camino de u a v , con


lo que el grafo resultante sera conexo, contradiciendo el hecho de que es puente. ): luego el grafo obtenido removiendo (u , v ) es conexo por lo que existe un camino de u a v que no use (u , v ). Tomando ese camino ms (u , v ) se forma un ciclo simple, con lo se obtiene una contradiccin.
Pablo R. Fillottrani Algoritmos y Complejidad Pablo R. Fillottrani Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Denicin del problema

se puede obtener entonces un algoritmo en tiempo O (a) que encuentre los puentes, a partir de un recorrido DF del grafo ejercicio: especicar un algoritmo para encontrar los puentes en un slo recorrido del grafo

una red de ujo es un grafo dirigido G = N , A donde cada arco (u , v ) A tiene asociado una capacidad c (u , v ) 0, y se distinguen dos nodos s y t llamados fuente y destino, tal que ningn arco llega a la fuente, o sale del destino adems, por conveniencia, si (u , v ) A entonces se supone c (u , v ) = 0 tambin que para todo n N , s
G

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Ejemplo de ujo
un ujo en G es una funcin f : N N R que satisface: restriccin de capacidad: f (u , v ) c (u , v ) para todo u , v N simetra oblicua: f (u , v ) = f (v , u ) para todo u , v N conservacin de ujo: v N {s,t } f (u , v ) = 0 el valor de un ujo |f | se dene como |f | = v N f (s, v ) = v N f (v , t ). Problema: dada una red de ujo G, el problema MAXFLUJO consiste en encontrar el mximo ujo que admite G

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Propiedades
en el ujo slo se representan los valores positivos tambin se cancelaran ujos opuestos entre dos nodos, de forma que el ujo representado sea positivo en a lo sumo uno de los sentidos se supondr que todas las capacidades son enteros si las capacidades son racionales, se pueden escalar para que se consideren enteros tambin usaremos en la notacin la sumatoria implcita, f (U , V ) = Lema Sea G una red de ujo, y f un ujo en G. Entonces valen: para todo X N, f (X , X ) = 0 para todo X , Y N, f (X , Y ) = f (Y , X ) para todo X , Y , Z N tal que X Y = 0 / , valen f (X Y , Z ) = f (X , Z ) + f (Y , Z ) y f (Z , X Y ) = f (Z , X ) + f (Z , Y ) Demostracin. ejercicio, usando las propiedades de ujo

x U y V

f (x , y )

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Mtodo de Ford-Fulkerson

Corolario

| f |= f (V , t )
Demostracin.

el mtodo de Ford-Fulkerson permite resolver el problema MAXFLUJO lo llamamos mtodo porque produce distintos algoritmos, con distintos tiempos de ejecucin de acuerdo a la implementacin se basa en los conceptos de red residual, camino de aumento, y corte

| f |= f (s, V ) = f (V , V ) f (V s, V ) = f (V s, V ) = f (V , V s) = f (V , t ) + f (V , V s t ) = f (V , t )

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Red residual
Lema sea G una red de ujo, y f un ujo sobre G. Una red residual es un grafo Gf = N , Ef , donde los arcos son Ef = {(u , v ) : c (u , v ) f (u , v ) > 0} y la capacidad es precisamente c (u , v ) f (u , v ) Sea G una red de ujo, f un ujo sobre G, Gf la red residual y f un ujo sobre Gf . Entonces el ujo sum f + f , denido (f + f )(u , v ) = f (u , v ) + f (u , v ), es un ujo en G tal que | f + f |=| f | + | f |. Demostracin. Se debe vericar que cumple con las tres propiedades de ujo, y que su valor es exactamente la suma de los valores de f y f (ejercicio).

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Camino de aumento
Lema Sea G una red de ujo, f un ujo sobre G y p un camino de aumento en Gf . Entonces existe un ujo fp denido sea G una red de ujo, y f un ujo sobre G. Un camino de aumento es un camino s Gf t en la red residual Gf la capacidad residual de s Gf t es la mnima capacidad de los arcos que pertenecen al camino, y se nota cf (p)

cf (p) si (u , v ) est en p cf (p) si (v , u ) est en p fp (u , v ) =


0 sino con valor | fp |= cf (p) > 0. Demostracin. Es suciente con probar las tres propiedades de ujo, y vericar el valor de fp .

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Corte de una red de ujo

G una red de ujo, y f un ujo sobre G. Un corte es una particin de N en S y T = N S tal que s S y t T el ujo neto a travs el corte (S , T ) es f (S , T ). La capacidad de un corte (S , T ) es c (S , T ) el corte mnimo de una red es un corte cuya capacidad es mnima entre todos los cortes

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Teorema (Mximo ujo, mnimo corte) Sea G una red de ujo, y f un ujo en G. Entonces son equivalentes:
1 2 3

f es un ujo mximo de G la red residual Gf no contiene caminos de aumento

| f |= c (S , T ) para algn corte (S , T ) de G

Demostracin. 1) 2): si f es el mximo ujo y Gf tiene camino de aumento p existe un ujo fp (lema 22) y f + fp es un ujo en G de mayor valor que f . 2) 3): entonces sea S = {v N : s Gf v } y T = N S . Se puede ver que (S , T ) es un corte y que | f |= f (S , T ) = c (S , T ). 3) 1): para todos los cortes (S , T ) se puede ver que | f | c (S , T ). Luego | f |= c (S , T ) implica que f es un ujo mximo.
Pablo R. Fillottrani Algoritmos y Complejidad Pablo R. Fillottrani Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Algoritmo
PROCEDURE FordFulkerson (G,s,t,c) FOR cada arco (u,v) en A f[u,v]::=0; f[v,u]::=0 ENDFOR WHILE existe un camino de aumento p en Gf cf(p)::=min{(c[u,v]-f[u,v]) para todo (u,v) en p} FOR cada arco (u,v) en p f[u,v]::=f[u,v]+c_f(p) f[v,u]::=-f[u,v] ENDFOR ENDWHILE RETURN f
Pablo R. Fillottrani Algoritmos y Complejidad

el teorema anterior permite denir un algoritmo iterativo, a partir de un ujo nulo, que compute el ujo mximo de una red de ujo se denomina Ford-Fulkerson, y en cada iteracin encuentra un camino de aumento, obtiene el ujo de ese camino y se lo suma al ujo anterior, resultando en un ujo con valor mayor

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Ejemplo (I)

Ejemplo (II)

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Ejemplo (III)

Ejemplo (IV)

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Ejemplo (V)

Anlisis del tiempo de ejecucin


costo veces

PROCEDURE FordFulkerson (G,s,t,c) FOR cada arco (u,v) en A f[u,v]::=0; f[v,u]::=0 ENDFOR WHILE existe un camino de aumento p en Gf cf(p)::= capacidad mnima de p FOR cada arco (u,v) en p f[u,v]::=f[u,v]+cf(p) f[v,u]::=-f[u,v] ENDFOR ENDWHILE; RETURN f
Pablo R. Fillottrani Algoritmos y Complejidad Pablo R. Fillottrani Algoritmos y Complejidad

a O (|f |) O (|f |) O (a|f |) O (a|f |)

(n + a)
O (a ) b b

f es el resultado

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Algoritmo de Edmonds-Karp

la dependencia del tiempo de ejecucin en el valor del ujo, y no en la longitud de su representacin, no es bueno

el algoritmo de Edmonds-Karp es una instancia del mtodo de Ford-Fulkerson en donde la bsqueda del camino de aumento p se hace mediante una bsqueda por niveles comenzando por s el recorrido por niveles permite encontrar los caminos mnimos (en cuanto a cantidad de arcos) desde el origen a cada nodo entonces en la red residual, el camino mnimo ya no existe. Esto permite ajustar la cantidad de iteraciones del ciclo WHILE

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Lema En el algoritmo EK, si v N {s, t } entonces la distancia mnima nivel[v ] en la red residual Gf aumenta con cada aumento de ujo. Demostracin. Sea v el nodo con menor nivel de todos los w tal que niveli [w ] > niveli +1 [w ], y s fi +1 u v el camino mnimo que redujo el nivel de v . Sabemos que niveli +1 [u ] = niveli +1 [v ] 1 y que niveli +1 [u ] niveli [u ] (por la eleccin de v ). Se deduce que (u , v ) Efi y (u , v ) Efi +1 , y como el camino de aumento es el camino ms corto (por el algoritmo), entonces (v , u ) pertenece al camino de aumento en la iteracin i + 1. Luego niveli [v ] = niveli [u ] 1 niveli +1 [u ] 1 = niveli +1 [v ] 2 lo que contradice la disminucin de la distancia mnima.
Pablo R. Fillottrani Algoritmos y Complejidad

Teorema El nmero total de iteraciones del algoritmo EK en una red de ujo G = N , A es a lo sumo O (na). Demostracin. Primero se muestra que la cantidad de veces que cada arco (u , v ) puede ser crtico (ie coincide con la capacidad residual) es n/2 1 veces. Sea i la iteracin donde (u , v ) es arco crtico, y j la iteracin donde (v , u ) es arco crtico. Entonces niveli [u ] = niveli [v ] + 1 nivelj [v ] + 1 = nivelj [v ] + 2, con lo que la distancia mnima disminuye al menos en 2 entre cada para de iteraciones donde (u , v ) es arco crtico. Y (n 2) es una cota de la mxima distancia mnima. Entonces como hay O (a) arcos posibles a ser arcos crticos, no puede haber ms de O (na) iteraciones.
Pablo R. Fillottrani Algoritmos y Complejidad

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

Introduccin Recorridos Ordenamiento topolgico Componentes fuertemente conexos Puntos de articulacin y puentes Flujo mximo

Red residual Camino de aumento Corte Mtodo de Ford-Fulkerson

como cada iteracin (construir el grafo residual, hacer el recorrido BFS, encontrar el camino de aumento y la capacidad residual, y actualizar el ujo) del algoritmo EK toma de O (a), de acuerdo al teorema anterior el tiempo total de ejecucin es de O (na2 ) se elimina de esta forma la dependencia del tiempo de ejecucin en f existen algoritmos asintticamente mejores (O (n2 a), O (n3 )) para el mismo problema

otras variantes del problema de mximo ujo se pueden reducir a la versin analizada. Por ejemplo, si se tienen mltiples orgenes o destinos

Pablo R. Fillottrani

Algoritmos y Complejidad

Pablo R. Fillottrani

Algoritmos y Complejidad

S-ar putea să vă placă și