Analisis y Diseño de Algoritmos Tema: Grafos 3ra Parte

Slides:



Advertisements
Presentaciones similares
Relaciones de recurrencia
Advertisements

UNIVERSIDAD NACIONAL EXPERIMENTAL POLITÉCNICA DE LA FUERZA ARMADA
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
GRAFOS Presentado por: Oscar Leonardo Ramírez John Freddy Sandoval
GRAFOS ESTRUCTURAS DE DATOS.
GRAFOS: ALGORITMOS FUNDAMENTALES
NUMERO DE CONTROL: NOMBRE DEL TRABAJO: MAPA CONCEPTUAL
INSTITUTO TECNOLOGICO de Villahermosa
Introducción a los Algoritmos
OPTIMIZACIÓN EN REDES EN ALGUNOS PROBLEMAS DE OPTIMIZACIÓN PUEDE SER ÚTIL REPRESENTAR EL PROBLEMA A TRAVÉS DE UNA GRÁFICA: ruteo de vehículos, distribución.
MATEMÁTICAS DISCRETAS.
Instituto Tecnológico De Villahermosa
Investigación de Operaciones II
Método de Ford-Fulkerson
Curso de Programación I Parte III


Teoría de Grafos.
Problemes de Viatjants
GRAFOS HUGO ARAYA CARRASCO.
Teoría de Grafos.
1 Algoritmos Elementales de Grafos Agustín J. González ELO-320: Estructura de Datos Y Algoritmos 1er.Sem
Programación entera y grafos
PROGRAMACIÓN PARALELA EN ALGORITMOS SOBRE GRAFOS
Ejemplos de Grafos: Red de tráfico con caminos y cruces.
Grafos. Un Grafo G es un par de conjuntos (V, E), donde V es un conjunto no vacío de elementos llamados vértices o nodos y E es un conjunto formado por.
Ciudad de Könisberg, Prusia, en XVIII:
Teoria de grafos.-clase 4
Academia de Informática
Definiciones: conjuntos, grafos, y árboles
ALGORITMO DE FLOYD dik + dkj < dij
Programación en Matlab
Ordenamiento, Heapsort y Colas de prioridad
Universidad de los Andes-CODENSA
Árbol recubridor mínimo Distancias
I n s t i t u t o T e c n o l ó g i c o d e T e c n o l ó g i c o d e V i l l a h e r m o s a ING. EN SISTEMAS CATEDRATICO: I.I. Zinath Javier Gerónimo.
Single-Source Shortest Paths “Camino más corto desde/hacia una fuente”
Matemáticas Discretas
Capítulo 1 “Elementos de Programación”
Diseño y análisis de algoritmos

Diseño y análisis de algoritmos
Analisis y Diseño de Algoritmos Tema: Grafos

Diseño y análisis de algoritmos
1 Algoritmos Avaros (Greedy Algorithms) Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
1 Algoritmos Avaros (Greedy Algorithms) Agustín J. González ELO-320: Estructura de Datos y Algoritmos 1er. Sem
Tópicos I Árboles, montículos y grafos
Dikjstra – Shortest Path. Algoritmo Dijkstra Inicio: Asignar un nivel temporal igual a 0 en el nodo de inicio e infinito al resto de los nodos Iteración.
1 Single-Source Shortest Paths “Camino más corto desde/hacia una fuente” Agustín J. González ELO320: Estructura de Datos y Algoritmos 1.er. Sem
Minimum Spanning Tree (Árbol de Expansión Mínima)
Parte I. Estructuras de Datos.
Definiciones: conjuntos, grafos, y árboles
1 Flujo Máximo Agustín J. González ELO320: Estructura de Datos y Algoritmos.
Agustín J. González ELO-320: Estructura de Datos Y Algoritmos
Minimum Spanning Tree (Árbol de Expansión Mínima)
Diseño y análisis de algoritmos
TEMA 5: El problema del flujo con costo mínimo
Flujo en redes Def: una red N es un grafo orientado conexo que tiene dos nodos distinguidos una fuente s con grado de salida positivo y un sumidero t con.
Estructura de Datos 4 Grafos Dirigidos
Instituto Tecnológico De Villahermosa Alumno: Lázaro García Hernández.
ANALISIS DE REDES UNIDAD PROCEDIMIENTO DE OPTIMIZACION
UNIDAD 2 Grafos Árboles abarcadores mínimos Caminos más cortos.
* Cuando nos permite desarrollar un programa que necesitamos para tomar un conjunto de buenas prácticas para hacer eso. Esto se debe a que podemos ahorrar.
Operations Management
Recorridos de grafos Segunda Parte M.C. Meliza Contreras González.
Solución a Ecuaciones de Recurrencia Dr. Rogelio Dávila Pérez División de Posgrado Universidad Autónoma de Guadalajara
Transcripción de la presentación:

Analisis y Diseño de Algoritmos Tema: Grafos 3ra Parte Universidad de Los Andes Facultad de Ingeniería Postgrado en Computación Analisis y Diseño de Algoritmos Tema: Grafos 3ra Parte Andrés Arcia

Caminos Cortos en Todos los Pares de Arcos Dado un grafo dirigido G=(V,E) con una función de peso w:ER. Se desea encontrar todos los caminos más cortos (de menor peso) entre todos los pares (u,v)  V.

¿Cómo resolver el problema? En una primera instancia utilizando algún algoritmo de caminos cortos desde un solo vértice, |V| veces, una vez para cada vértice. Si todos los arcos son positivos  Dijkstra. Luego: Utilizando arreglos para las colas de prioridad  O(V3+VE) = O(V3) Utilizando heaps binarios  O(VElgV) Utilizando heaps fibonacci  O(V2lgV+VE) Si hay arcos negativos  Bellman-Ford, una vez por vértice.  O(V2E) y para grafos densos O(V4)

Representación Se dispone de una matriz de entrada W de tamaño nxn, que representa los pesos de un grafo dirigido G=(V,E) de n arcos. Luego, para W=(wij) 0 si i=j peso de (i,j) si i≠j y (i,j)  E  si i≠j y (i,j)  E wij

Salida Una matriz D=(dij) con las distancias mínimas entre el par (i,j). Una matriz =(ij), donde ij=NULL si i=j ó no hay camino de i a j, de otra forma contiene al predecesor de j en el camino mínimo. El grafo resultante se define como: G,i= (V,i, E,i) donde V,i={ jV : ij ≠ NULL } U { i } E,i={(ij,j) : j V,i y ij≠NULL

Impresión del Camino PRINT-ALL-PAIRS-SP(,i,j) 1 if i=j 2 then print i else if (ij=NULL) then print “no path from” i “to” j else PRINT-ALL-PAIRS-SP(,i,ij) print j

Multiplicación de Matrices y Caminos Cortos Se presenta un algoritmo basado en programación dinámica para resolver todos los caminos más cortos en todos los pares de nodos del grafo G=(V,E). El método es similar a la multiplicación de matrices. Recapitulando la programación dinámica: Caracterizar la estructura de la solución óptima. Definir recursivamente el valor de la solución óptima. Computar el valor de la solución óptima de abajo hacia arriba.

Estructura del Camino más Corto Sabemos que todos los subcaminos de los caminos más cortos son también caminos más cortos. Supongamos W=(wij), asumamos que no hay ciclos negativos y que el camino p tiene m arcos que van de i a j y, p es un camino corto. si i=j p0 si i≠j pi ~p’> kj tiene m-1 nodos (i,j) = (i,k) + w(k,j)

Solución Recursiva Sea dij(m) el peso mínimo para algún camino de i a j con m arcos: si m=0  no hay arcos dij(0) = 0 si i=j  si i≠j Si m1  dij(m) = min (1kn, dik(m-1) + wkj) ¿Cuál es el límite de m? (i,j) = dij(n-1)=dij(n)=dij(n+1)=…

Cálculo de la Solución de Abajo hacia Arriba Entrada: W=(wij), luego se calcula una serie de matrices D(1), D(2), …, D(n-1) | D(m)=(dij(m)). D(n-1) contiene los caminos más cortos.

Cálculo de la Solución de Abajo hacia Arriba En esencia el siguiente algoritmo extiende la solución del camino más corto, un arco a la vez. EXTEND-SHORTEST-PATHS (D,W) 1 n  rows[D] 2 let D’=(d’ij) be a nxn matrix. 3 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, dik + wkj) 8 return D’ Este algoritmo es O(n3). Observe los tres for anidados.

Relación con la Multiplicación de Matrices. Suponga C=A.B; donde A,B y C son matrices nxn. La multiplicación de matrices se define: cij = (k=1, n, aik.bkj)  dij(m)=min(1kn, dik(m-1) + wkj) d(m-1)a wb d(m)c min+ +  .

Algoritmo Sea AB un producto matricial retornado por EXTEND-SHORTEST-PATHS(A,B) D(1) = D(0).W = W D(2) = D(1).W = W2 D(3) = D(2).W = W3 … D(n-1) = D(n-2).W = Wn-1 SLOW-ALL-PAIRS-SHORTEST-PATHS(W) 1 n  rows[w] 2 D(1)  W 3 for m 2 to n-1 do D(m)  EXTEND-SHORTEST-PATHS(D(m-1),w) 5 return D(n-1) O(n4)

Mejora del Tiempo de Ejecución ¿Cuál es el objetivo? R: D(n-1) Recordemos que si no hay ciclos negativos, D(m)=D(n-1)  m  n-1 Así, podemos computar D(n-1) en solo lg(n-1), haciendo D(1) = W D(2) = W2 = W.W D(4) = W4 = W2. W2 D(8) = W8 = W4. W4 … D(2^ln(n-1)) = W(2^ln(n-1)) = W(2^(ln(n-1)-1)) . W(2^(ln(n-1)-1)) La técnica se denomina “repetición cuadrática”.

Algoritmo FASTER-ALL-PAIRS-SHORTEST-PATHS(W) 1 nrows[w] 2 D(1)W 4 while n-1 > m do D(2m)EXTEND-SHORTEST-PATH(D(m), D(m)) m 2m 7 return D(m) n-12m2n-2 O(n3lgn)

Algoritmo Floyd-Warshall Estructura del camino más corto Se consideran los vértices intermedios (v.i.) de un camino simple p=<v1, v2,…, vl>, es decir, cualquier vertice que no sea v1 y vl. El algoritmo se basa en la siguiente observación: Sean los nodos de G, V={1,2,…n} y considere el subconjunto {1,2,…,k} para algún k. Para cualquier par de vertices i,j V considere todos los caminos de i a j cuyos vertices son todos obtenidos de {1,2,…,k} y sea p el camino de minimo peso entre ellos. El algoritmo explota la relación entre el camino p y los caminos cortos de i a j con vértices intermedios en el conjunto {1,2, …, k-1}. Si tenemos que p se divide en i~p1~>k~p2~>j. p1 y p2 son caminos cortos con vértices intermedios en {1,2,...,k}.

Solución Recursiva Sea dij(k) el peso del camino más corto de i a j con v.i. en {1,2,…,k}. Cuando k=0 el camino de i a j no tiene un v.i. numerado más alto que 0 y de hecho no tiene v.i. dij(k) = Wij si k=0 min(dij(k-1) , dik(k-1) + dkj(k-1) ) si k1

Computo de Abajo hacia Arriba FLOYD-WARSHALL(W) 1 nrows[n] 2 D(0)  w 3 for k  1 to n 4 do for i 1 to n do for j 1 to n dij(k) min(dij(k-1), dik(k-1)+ dkj(k-1)) return D(n) (n3)

Ejemplo Valores iniciales D(0) = (0) = D(1) = (1) = D(2) = (2) = 3 3 8  -4 1 7 4 2 -5 6 NIL 1 2 3 4 5 D(0) = (0) = NIL 1 2 3 4 5 3 8  -4 1 7 4 2 5 -5 -2 6 D(1) = (1) = 3 8 4 -4  1 7 5 11 2 -5 -2 6 NIL 1 2 3 4 5 D(2) = (2) =

Construcción del camino más corto Se selecciona el mismo predecesor que en camino más corto, pero queda atado por apuntadores a los padres en una cadena. ij(k-1) si dij(k-1)  dik(k-1)+ dkj(k-1) kj(k-1) si dij(k-1) > dik(k-1)+ dkj(k-1) ij(k)

Clausura transitiva de un grafo dirigido Dado un grafo dirigido G=(V,E) con un conjunto de nodos V = {1,2,…,n} se quiere averiguar si hay un camino de i a j  i,j  V. La clausura transitiva se define: G*=(V,E*) donde E*={(i,j): hay camino de i a j en G}.

¿Cómo se calcula? Asignar peso 1 a todos los arcos en E y ejecutar Floyd-Warshall  O(n3). Si hay camino  dij<n Si no hay camino  dij= Otra manera es utilizando los operadores lógicos  y  en vez de los operadores min y + en FLOYD-WARSHALL. tij(0) = 0 si i≠j y (i,j)  E. = 1 si i=j o (i,j)  E. Para k1: tij(k) = tij(k-1)  (tik(k-1)  tkj(k-1)). (n3).

Algoritmo de Jhonson para grafos esparcidos Encuentra los caminos más cortos en O(V2lgV + VE), que es asintóticamente mejor que los otros dos métodos. Usa Dijkstra y Bellman-Ford. Usa la técnica de reasignación de pesos. Si todos los pesos son positivos, entonces se utiliza Dijkstra en c/u de los nodos y con heap fibonacci se tiene O(V2lgV + VE), de lo contrario se recalculan los pesos para que queden todos positivos y se aplica la misma técnica.

Reasignación de Pesos Sea  el nuevo peso asignado.  debe cumplir con: (u,v)  E, (u,v) con w:ER es también (u,v) con  :ER. (u,v)  E, (u,v)0.  se determina en O(VE).

Reasignación de Pesos Lema: La reasignación de pesos no cambia los caminos más cortos. Sea G=(V,F) con w:ER y h:VR cualquier función que mapea VR. Luego (u,v)E: (u,v) = w(u,v) + h(u) – h(v). Sea p = <v0, v1, … vk> un camino de v0 a vk. w(p)=(v0,vk)  (p)=(v0,vk) G tiene ciclo negativo  G´ tiene ciclo negativo

Reasignación de Pesos Prueba: (p) = w(p) + h(v0) – h(vk) Se tiene (p) = (i=1, k, (vi-1, vi)) = (i=1, k, w(vi-1, vi) + h(vi-1) - h(vi)) = (i=1, k, w(vi-1, vi)) + h(v0) – h(vk) = w(p) + h(v0) – h(vk) Suponga que hay un camino más corto p’ desde v0 a vk usando . Entonces (p’)< (p). w(p’) + h(v0) – h(vk) = (p’) < w(p) = w(p)+h(v0)+h(vk) Que implica que w(p’) < w(p) que contradice que p es el camino más corto. Suponga que hay un ciclo negativo c = <v0, v1, …, vk> Luego, (c)=w(c) + h(v0) – h(vk) =w(c)  si hay ciclo negativo en (c) tambien lo hay en w(c).

Algoritmo JHONSON 1 compute G’, V[G’]=V[G] U {s}, E[G’]=E[G]U{(s,v) : v  V[G]} 2 if BELLMAN-FORD(G’,w,s) = false then print “there is a negative weight cycle” else for each vertex v  V[G] do set h(v) to the value computed by the BELLMAN-FORD algorithm. for each edge (u,v)  E[G’] do (u,v)w(u,v) + h(u) – h(v) for each vertex u  V[G] do run Dijkstra(G, , u) to compute ’(u,v)  u  V[G] for each vertex v  V[G] do duv ’(u,v) + h(v) – h(u) 12 return D

Ejemplo -1 3 4 7 1 -5 8 5 -4 2 -5 -1 -4 4 6 10 -5 13 2 4 -4 2

Ejemplo 2/1 0/0 0/0 2/-3 2/3 0/-4 0/-4 2/2 2/-1 0/1 4 4 10 10 13 13 2 4 10 10 0/0 2/-3 2/3 0/-4 13 13 2 2 0/-4 2/2 2/-1 0/1 2 2

Flujo Máximo Imaginemos algún flujo que va desde un sitio s, donde es producido, hasta un sitio t donde es consumido a la misma tasa de producción. Intuitivamente, el flujo en cualquier punto de la red es la tasa a la que se mueve el material. Usos: modelado de flujo en tuberías, líneas de ensamblado, corrientes eléctricas, información en redes de comunicación, etc.

Flujo Máximo Cada arco dirigido puede ser visto como un conducto por donde pasa el material, según las siguientes restricciones: Cada conducto tiene una capacidad máxima finita. Se cumple la conservación de flujo. fi = fo (por nodo). Problema del Flujo Máximo: ¿Cuál es la mayor tasa a la que se puede llevar material sin violar ninguna restricción?

Redes de Flujo Una red de flujo G=(V,E) es un grafo dirigido tal que cada arco (u,v)E posee una capacidad c(u,v)0. Si (u,v)E, c(u,v)=0. Se distinguen 2 vertices, el fuente “s” y el destino “t”. Cada vertice vV esta en algun s~>v~>t. El grafo es conexo |E||V|-1

Flujo El flujo está dado por una función con imagen en los reales. f:VxVR que satisface: Restricción de capacidad: u,v  V, f(u,v)c(u,v). Simetría distorsionada: u,v  V, f(u,v)=-f(v,u). Conservación de flujo: u,v  V-{s,t} se requiere que vV f(u,v) = 0 Sea f(u,v) el flujo desde u hasta v, el valor de ese flujo se define como |f|= f(s,v) vV

Relación entre 2 nodos 8 de v1 a v2 3 de v2 a v1 cancelación 7 más de v2 a v1 v1 v2 10 4 v1 v1 v1 v1 8/10 8/10 5/10 10 4 3/4 4 2/4 v2 v2 v2 v2

Redes de múltiples entradas y múltiples salidas    T’ S’    

Metodo Ford-Fulkerson El método iterativo depende de tres ideas importantes: Red residual Aumento de camino Cortes Para ello usaremos el teorema max-flow min-cut que caracteriza el flujo máximo en terminos de cortes de la red de flujo.

Iteración En cada iteración se va consiguiendo un valor de flujo que aumenta el camino, es decir, podemos aumentar el flujo en un camino de s a t. Este proceso se repite hasta que no haya más posibilidad de aumentar. FORD-FULKERSON-METHOD(G,s,t) 1 initialize flow f to 0 2 while there exists an augmenting path p. do augment flow f along p 4 return f.

Red Residual La red residual consiste en arcos que admiten más flujo. Dada una red de flujo G=(V,E) con fuente s y destino t. Sea f el flujo en G, y considere un par de vertices u,v V. La cantidad de flujo adicional que se puede verter sobre u,v es la capacidad residual. cf(u,v) = c(u,v) – f(u,v) Ejemplo: c(u,v)=16, f(u,v)=-4 cf(u,v)=20 c(u,v)=16, f(u,v)=10 cf(u,v)=6 La red residual se define como: Ef – {(u,v)  VxV: cf(u,v) > 0}

Aumento de Caminos Dada una red de flujo G=(V,E), un camino aumentado p es un camino simple de s a t en la red residual Gf. Este camino solo admite flujo positivo. La cantidad máxima de flujo que puede llevarse por los arcos en un aumento de p se denomina capacidad residual de p, y está dado por: cf(p) = min {cf(u,v): (u,v)  p}

Corte de la red de flujo El método aumenta repetidamente el flujo a través de los caminos de aumento hasta alcanzar el máximo. Un corte (S,T) de la red de flujo G=(V,E) esuna partición de V en S y T=V-S tal que sS y tT. Si f es el flujo, entonces el flujo de red a través del corte (S,T) se define f(S,T). La capacidad del corte (S,T) es C(S,T).

Teorema max-flow min-cut Teorema: El máximo valor de entre todos los flujos en una red es igual a la capacidad mínima de entre todos los cortes. Prueba: Es suficiente con mostrar un flujo y un corte tal que sean iguales en valor. Luego, el flujo ha de ser máximo pues no puede rebasar la capacidad del corte y el corte ha de ser mínimo porque ninguna otra capacidad puede ser menor que el valor actual del flujo.

Algoritmo de Ford-Fulkerson FORD-FULKERSON(G,s,t) 1 for each edge (u,v)  E[G] do f[u,v]0 f[v,u]0 4 while there exists a path p from s to t in the residual network Gf do cf(p)=min {cf(u,v) : (u,v)p} for each edge (u,v) in p do f[u,v]  f[u,v] + cf(p) f[v,u]  -f[u,v]

Ejemplo s s s 1 2 1 2 1 2 3 4 3 4 3 4 5 5 5 t t t Cmin = 2 Cmin = 1 2 2 3 3 2 1 2 1 2 1 2 1 2 1 1 1 1 1 1 3 1 2 1 1 1 2 1 3 4 3 4 3 4 1 2 3 3 2 5 5 2 2 5 t t t Cmin = 2 Cmin = 1 Cmin = 1

Ejemplo S T Flujo Máximo s 1 2 Dirección del Flujo 3 4 5 t 2 2 1 1 1 2 2 1 1 2 1 1 Dirección del Flujo 2 1 1 3 4 2 2 1 5 t T 1 2

Análisis El algoritmo está acotado por O(|f*|) donde f* es el flujo máximo. 1.000.000 1.000.000 1.000.000 999.999 u u s 1 s 1 t 1 t 1 1.000.000 v 999.999 v 1.000.000 1.000.000 999.999 999.999 u s 1 1 t 1 999.999 v 999.999

Mejora Si hallamos el camino mínimo de s a t en la red residual donde cada arco tiene peso 1, se puede mejorar Ford-Fulkerson. Este método es llamado Edmonds-Karp y esta acotado por O(VE).