Analisis y Diseño de Algoritmos Tema: Grafos

Slides:



Advertisements
Presentaciones similares
Caminos más cortos a partir de múltiples fuentes en un grafo
Advertisements

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
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.
DERIVADA DE UNA FUNCION REAL
MATEMÁTICAS DISCRETAS.
El presente material contiene
Investigación de Operaciones II
KRIGING.
Método de Ford-Fulkerson


DERIVADAS PARCIALES Gráficas.

Teoría de Grafos.
Analisis y Diseño de Algoritmos Tema: Grafos 3ra Parte
Problemes de Viatjants
Ordenamiento topológico
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.
Teoria de grafos.-clase 4
Ordenamiento, Heapsort y Colas de prioridad
Universidad de los Andes-CODENSA
Árbol recubridor mínimo Distancias
TEMA 4 TRANSFORMADA DE LAPLACE
Single-Source Shortest Paths “Camino más corto desde/hacia una fuente”
Problemas de Decisión y Optimización
Matemáticas Discretas
Diseño y análisis de algoritmos

Diseño y análisis de algoritmos

Algoritmos y Estructuras de Datos III (segunda parte) 1er cuatrimestre 2010 Min Chih Lin Irene Loiseau.
Material de apoyo Unidad 4 Estructura de datos
Diseño y análisis de algoritmos
Agustín J. González ELO-320: Estructura de Datos y Algoritmos
Jorge Mondragón Leonardo Herrera Cristian Fernández
4.  Métodos matemáticos.
Agustín J. González ELO320: Estructura de Datos y Algoritmos
Matemáticas Discretas
Sesión 3: Teoría de Grafos
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)
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
Capa de Red4-1 Capítulo 4: Capa de Red  4. 1 Introducción  4.2 Circuitos virtuales y redes de datagramas  4.3 ¿Qué hay dentro de un router?  4.4 IP:
Agustín J. González ELO320: Estructura de Datos y Algoritmos
Minimum Spanning Tree (Árbol de Expansión Mínima)
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.
Oscar F. Bedoya L. Fundamentos de análisis y diseño de algoritmos.
Estructura de Datos 4 Grafos Dirigidos
Instituto Tecnológico De Villahermosa Alumno: Lázaro García Hernández.
Heap Fibonacci heap de Fibonacci es una estructura de datos similar a un heap binomial pero con mejor coste amortizado. se utiliza para mejorar el tiempo.
ANALISIS DE REDES UNIDAD PROCEDIMIENTO DE OPTIMIZACION
UNIDAD 2 Grafos Árboles abarcadores mínimos Caminos más cortos.
Escuela de Ciencias Basicas, Tecnología e Ingeniería
Conalep Coacalco Algoritmos Recursivos
Recorridos de grafos Segunda Parte M.C. Meliza Contreras González.
1 Técnicas de Optimización en Modelos Organizacionales (PS-3161) Tema N° 4: Solución Gráfica:Casos Especiales Prof. Orestes G. Manzanilla Salazar Correo:
Minimum Spanning Tree (Árbol de Expansión Mínima)
Transcripción de la presentación:

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

Arboles de Expansión Mínima Usos de los AEM: Circuiteria electrónica: se desea unir n pines con n-1 cables. Cableado de la compañía telefónica, cable, etc. Identificación de grupos en un conjunto de puntos. Crear grafos esparcidos que dan bastante información del grafo original. Soluciones posibles: O(ElgV) Algoritmo de Kruskal. Algoritmo de Prim. heaps fibonacci ^ (|V| << |E|) => O(E + VlgV)

Definición Un árbol de expansión mínima de un grafo con pesos es el árbol de expansión cuyos arcos suman el peso mínimo.

¿Cómo funciona? Estrategia: Dado un grafo no dirigido, w : E -> R. MST = Σ 1 arco seguro por vez. Existe A  AEM. ¿(u,v)  A? si, entonces es seguro.

Algoritmo 1 A = Ф 2 while A does not form a MST do find an edge (u,v) safe for A A<-A U {(u,v)} 5 return A

Arcos Seguros Corte: (S, V-S) es una partición de V. Respeta A A corte Blancos: parte del MST. Negros: aún por ser considerados. Debe encontrarse un Arco Liviano del corte para incluirlo en la solución.

Noción de Corte Teorema: Sea G = (V,E) un grafo conexo, con w : ER. Sea A un subgrafo de E que se incluye en algún MST  G. Sea (S, V-S) cualquier corte de G que respeta A y sea (u,v) un Arco Ligero que cruza (S,V-S). Luego (u,v) es seguro para A.

Noción de Corte Prueba: Sea T un MST y A un subgrafo de T. Sea (u,v)  T. Deberiamos construir T´ que es el MST buscado. Se plantea T y un corte que respeta A. Hay un camino p de u a v. Dado que u y v son opuestos, hay al menos otro arco (x,y)  T que cruza el corte. Al cambiar (x,y) por (u,v) tenemos T’ que es un MST. w(T’) = w(T) – w(x,y) + w(u,v) w(T’) <= w(T) Pero se supone que T es MST, por lo que w(T)<=w(T’), se trata entonces del mismo arbol. T’ es un MST. A T’, pues A T y (x,y)  A => A U {(u,v)} T’. Luego, como T’=T es un MST y (u,v) es seguro.

Análisis El loop 2-4 se ejecuta |V|-1 veces => O(V). Tarea: Hacer 24.1-4 y 24.1-7.

Algoritmo de Kruskal KRUSKAL(G,w) 1 A  Ф 2 for each vertex v  V[G] do MAKE-SET(V) 4 sort the edges E by nondecreasing weight w. 5 for each edge (u,v)  E in order do if FIND-SET(u) ≠FIND-SET(v) then AA U {(u,v)} UNION(u,v) O(V) O(ElgE) O(ElgE) Total: O(ElgE)

Ejemplo 8 7 b c d 4 2 9 4 a 11 i 14 e 7 6 8 10 h g f 1 2

Algoritmo de Prim PRIM(G,w,r) 1 Q  V[G] 2 for each u  Q do key[u]   4 key[r]  0 5 [r]  NIL 6 while Q≠Ф do EXTRACT-MIN(Q) for each v  Adj[u] do if v  Q and w(u,v) < key[v] then [v]u key[v]  w(u,v) O(V) heap binario O(VlgV) O(lgV) O(ElgV) O(lgV) Total: O(Vlg V + Elg V) = O(E lg V)

Ejemplo Para un ejemplo de implantación vea: http://students.ceid.upatras.gr/~papagel/project/adjoin.htm

Problema del Camino más Corto Definición: Dado un grafo dirigido G=(V,E) con una función de pesos w: ER, el peso de un camino p=<v0, v1, …, vk> es la suma de los pesos de los arcos: w(p) = Σ(i=1, k, w(vi-1,vi)) y el camino mínimo sera: (u,v) = min {w(p): u ~> v}, si hay camino de u a v, en otro caso será .

Variantes del Problema Se requiere averiguar el camino más corto desde un nodo s  V a cada uno v  V-S. Problema de todos los caminos cortos a un destino simple (común). Solución: invertir la salida. Problema del camino más corto entre un par de nodos. Problema del camino más corto de todos los pares. Solución: Ejecutar el algoritmo para todos los pares desde cada nodo.

Arcos Negativos Los caminos más cortos están bien definidos ssi no existen ciclos negativos. De otra manera no estará bien definido, pues cada vez que demos vuelta a ciclo el camino será más corto. 3 a b (a,b) = - -4

Caminos Cortos y Relajación Para hacer más entendibles los algoritmos de caminos más cortos, es esencial comprender la técnica de relajación. La Relajación es el método mediante el cual se hace decrecer la cota superior en el peso actual del camino más corto hasta que iguale a la cota del camino más corto.

Relajación   INITIALIZATION(G,s) 1 for each vertex v  V[G] do d[v]   [v]  NIL 4 d[s] 0 Relajar es mejorar la distancia de un nodo a otro. Dado (u,v) se pregunta si el camino calculado hasta ahora hasta v es mejor que el camino hasta u y luego w(u,v). RELAX(u,v,w) 1 if d[v] > d[u] + w(u,v) then d[v]  d[u] + w(u,v) [v]  u 2 2 5 6 5 9 2 2   5 6 5 7

Propiedades de la Relajación Una vez relajado (u,v), d[v]  d[u] + w(u,v) Luego de la inicialización d[v]  (s,v)  vV. Si no hay camino entre sV y vV, luego de inicializar el grafo, d[v]=(s,v)=. Dado un camino s~>uv es un camino corto (s,v) si, d[u]=(s,u) antes de la llamada a RELAX y luego sera d[v]=(s,v).

Algoritmo de Dijkstra Resuelve el camino mínimo para aquellos grafos dirigidos, con peso no negativo. Entonces se asume w(u,v)0  (u,v)  E. Al final del algoritmo se tiene que para todos los vértices d[v] = (s,v).

Algoritmo de Dijkstra DIJKSTRA (G,w,s) 1 INITIALIZE(G,s) 2 SФ 3 QV[G] 4 while Q≠Ф do u  EXTRACT-MIN(Q) S  S U {u} for each vertex v  Adj[u] do RELAX(u,v,w)

Ejemplo u v 1 10 9 2 3 s 4 6 7 5 2 x y

Análisis Si EXTRACT-MIN es un arreglo lineal  O(V). Como hay O(V) operaciones de ese tipo  O(V2). Hay (E) operaciones con arcos. TOTAL: O(V2 + E) = O(V2). Si utilizamos un heap binario, la operación DECREASE-KEY en RELAX y EXTRACT-MIN sería O(lgV). TOTAL: O((V+E)lgV) = O(ElgV), si todos los nodos son alcanzables desde el origen. Se puede mejorar aún más si Q se implanta con heaps de fibonacci. El costo amortizado de los |V| EXTRACT-MIN es O(lgV) y los |E| DECREASE-KEY serán O(1).

Algoritmo de Bellman - Ford Resuelve caminos cortos desde un nodo en el caso general, aún con pesos negativos. BELLMAN-FORD(G,w,s) 1 INITIALIZE(G,s) 2 for i1 to |V[G]| - 1 do for each edge (u,v)  E[G] do RELAX(u,v,w) 5 for each vertex (u,v)  E[G] do if d[v] > d[u] + w(u,v) then return false 8 return true (V) (V) (E) TOTAL: (VE)

Ejemplo u v 5 6 -2 -4 -3 8 z 7 2 7 9 x y Orden de relajación: (u,v), (u,x), (u,y), (v,u), (x,v), (x,y), (y,v), (y,z), (z,u), (z,x).

Funcionamiento Lema: Sea G(V,E) un grafo con peso w: ER, dirigido. Sea sV el vertice origen y sea s~>uv un camino corto en G para algun par de vertices u, v  V. Suponga que G se inicia con INITIALIZE(G,s) y luego existe una secuencia de pasos de relajación RELAX(u,v,w). Si d[u]=(s,u) en cualquier momento previo de la llamada con (u,v), entonces d[v]= (s,v) todo el tiempo despues de la llamada. Prueba: Sabiendo que d[u]= (s,u) en algún momento antes de relajar (u,v), y que esto se mantiene al dejar el arco (u,v): d[v]  d[u] + w(u,v) = (s,u) + w(u,v) = (s,v)

Funcionamiento Lema: Sea G(V,E) un grafo con peso y dirigido con origen s y función peso w:ER. Asuma que G no contiene ciclos negativos alcanzables desde s. Al terminar BELLMAN-FORD, se tiene d[v]= (s,v)  vV y s~>v. Prueba: Por inducción. Sea v un nodo alcanzable desde s, y p=<v0, v1, …, vk> un camino corto desde s a v, donde v0=s y vk=v. Como hay |V|-1 pasadas es suficiente probar por inducción. Base: d[v0]= (s,v0)=0, y se mantiene… Paso inductivo: d[vi-1]= (s,vi-1) luego de la (i-1)esima pasada, el arco (vi-1,vi) se relaja en la i-esima pasada. Por el lema anterior se concluye que d[vi]= (s,vi) y se mantiene…

Caminos Cortos en DAGs. Si se relajan los arcos de un DAG con peso G(V,E) y de acuerdo con su orden topológico, se puede computar los caminos más cortos en (V+E). En los DAGs los caminos cortos siempre estan bien definidos pues no hay ciclos.

Caminos Cortos en DAGs. DAG-SHORTEST-PATHS 1 Topologically sort the vertex of G 2 INITIALIZE(G,s) 3 for each vertex u taken in topollogically sorted order 4 do RELAX(u,v,w) (V+E) (E) TOTAL: (V+E)

Ejemplo 6 1 r u s t v x 5 2 7 -1 -2 2 3 4

Funcionamiento Teorema: Si un grafo G=(V,E) tiene como origen s y no hay ciclos, al terminar el algoritmo DAG-SHORTEST-PATHS, d[v]=(s,v)  v  V y G es un árbol de caminos más cortos. Prueba: 1) d[v] = (s,v)  v  V. Si (s~>v)  d[v]=(s,v)=. 2) Suponga s~>v y el camino es p=<v0, v1, …, vk>, v0=s y vk=v. Como esta en orden topológico, p=(v0,v1), (v1,v2)…(vk-1,vk), y por inducción se puede demostrar que d[vi]=(s,vi) y al finalizar G es un árbol de caminos más cortos.

Restricciones Diferenciales y Caminos Cortos Programación Lineal: En el problema general de la programación lineal se tiene una matriz mxn llamada A, un vector b de tamaño m y un vector x de n elementos que maximiza la función objetivo (i=1, n, cixi) dado las m restricciones de la forma Axb.

Restricciones Diferenciales En la matriz, cada fila contiene 1, -1 y el resto 0. Se plantea entonces: xi-xJbk. donde: 1i,jn y 1km Ejemplo: 1 -1 x1 x2 x3 4 1 -2 

Funcionamiento Lema: Sea x=(x1, x2, …, xk) una solución de un sistema Axb y sea d una constante cualquiera. Luego x=(x1+d, x2+d, …, xk+d) tambien es una solución. Prueba: (xj+d) – (xi+d) = xj-xi

Grafos de Restricciones Desde el punto de vista de los grafos, A puede ser interpretada como una matriz de incidencia dada por un grafo de n nodos y m arcos. Cada nodo vi corresponde a una de las n variables desconocidas. Cada arco corresponde a una de las m desigualdades que implica a dos variables. V = {v0, v1, …, vn} E = {(vi,vj): xj-xibk es una restricción} U {(v0,v1), (v0,v2),…,(v0,vn)} w(vi,vj) = bk w(v0,vi) = 0

Análisis Observese que en la solución xi0. La solución será: x=((v0,v1), (v0,v1), …, (v0,vn)), si G no tiene ciclos negativos, de lo contrario la solución no existe. Esto sugiere usar BELLMAN-FORD. Dado que hay n+1 nodos y n+m arcos, se puede resolver el sistema en O((n+1)(n+m)) = O(n2+nm). Tarea: Hacer 25.5-1, 25.5-2 y 25-2. ¿Por qué funciona? Porque se trata de distancias mínimas y estas cumplen una restricción de cota.