Estructura de Datos 4 Grafos Dirigidos

Slides:



Advertisements
Presentaciones similares
Tania Guzmán García Luis González Varela Alexandre González Rivas
Advertisements

Diseño y análisis de algoritmos
GRAFOS Presentado por: Oscar Leonardo Ramírez John Freddy Sandoval
Árboles Grafo que no contiene ciclos, es decir es un grafo también acíclico, pero a su vez es conexo.
Teoría de Grafos UCR – ECCI CI-1204 Matemáticas Discretas
GRAFOS: ALGORITMOS FUNDAMENTALES
Teoría de Grafos I semestre 2009 UNIVERSIDAD NACIONAL DE INGENIERIA
Grupo 4 Matías Melgar Pablo Carbonell
Ordenamiento Topológico
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.
“GRAFOS” Chacón Zamora José Christian González García Andrea
Investigación de Operaciones II
Investigación de Operaciones II
ALGORITMO DEL ÁRBOL DE MÍNIMA EXPANSIÓN
PROGRAMACION DE ESTRUCTURAS DE DATOS
Grafos dualmente cordales y sus relaciones con otros tipos de grafos

Solución de problemas por búsqueda inteligente


Teoría de Grafos.
Analisis y Diseño de Algoritmos Tema: Grafos 3ra Parte
Problemes de Viatjants
AED I. Estructuras de Datos.
Cecilia Laborde González
GRAFOS HUGO ARAYA CARRASCO.
Teoría de Grafos.
Estructuras de datos y algoritmos
1 Algoritmos Elementales de Grafos Agustín J. González ELO-320: Estructura de Datos Y Algoritmos 1er.Sem
Programación entera y grafos
Estructura de Datos Lineales
PROGRAMACIÓN PARALELA EN ALGORITMOS SOBRE GRAFOS
Modelos Cuantitativos
Material de apoyo Unidad 4 Estructura de datos
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
Definiciones: conjuntos, grafos, y árboles
Trabajo presentado por: LUIS FERNANDO OBANDO ING
Árbol recubridor mínimo Distancias
ESTRUCTURAS DE DATOS I Conocer, comprender y analizar algunos de los principales tipos de estructuras de datos.
Single-Source Shortest Paths “Camino más corto desde/hacia una fuente”
Matemáticas Discretas
Diseño y análisis de algoritmos
Estructura de Datos II Equipo 4 Equipo 7 Acosta Montiel Miguel A.
(Organización y Manejo de Archivos)
Teoría de Grafos.-Clase 2

INSTITUTO TECNOLÓGICO DE VILLAHERMOSA. CATEDRATICO:
Estructuras de datos para Grafos
Tópicos I Árboles, montículos y grafos
Parte I. Estructuras de Datos.
Definiciones: conjuntos, grafos, y árboles
Tema 5. Grafos Introducción, notación y definiciones.
TEMA 5: El problema del flujo con costo mínimo
Cecilia Laborde González
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.
ARBOLES GENERALIZADOS
BUSQUEDA EN ANCHURA Y PROFUNDIDAD
GRAFOS.
PARTE I: ESTRUCTURAS DE DATOS Tema. Grafos
Capítulo 8: Árboles Autor: José Alfredo Jiménez Murillo.

M.C. Meliza Contreras González
Matrices Pág. 1. Matrices Pág. 2 Se llama matriz traspuesta de A, y se representa por A t a la matriz que resulta de intercambiar las filas y las columnas.
Matemáticas Discretas MISTI
Recorridos de grafos Segunda Parte M.C. Meliza Contreras González.
Algoritmos de caminos más cortos
Transcripción de la presentación:

Estructura de Datos 4 Grafos Dirigidos M. en C. J. Jesús Arellano Pimentel

4 Grafos Dirigidos 4.1. Definiciones fundamentales 4.2. Representaciones de Grafos dirigidos. 4.3.Problema de los caminos más cortos con un solo origen. 4.4. Problema de los caminos más cortos entre todos los pares. 4.5. Recorridos en grafos dirigidos 4.6. Grafos dirigidos acíclicos 4.7. Componentes fuertes

4.1. Definiciones fundamentales (I) Grafos dirigidos Los grafos representan relaciones arbitrarias entre objetos de datos. Un grafo dirigido G consiste en un conjunto de vértices V y un conjunto de arcos A. Los vértices también se denominan nodos o puntos. Un arco es un par ordenado de vértices (v, w); donde v es la cola y w la cabeza del arco. Se expresa como: v  w Se representa como: Se dice que: El arco v  w, va de v a w Y que w es adyacente a v v w

4.1. Definiciones fundamentales (II) Grafos dirigidos La siguiente figura presenta un grafo dirigido con cuatro vértices y cinco arcos. Los vértices pueden usarse para representar objetos, y los arcos, relaciones entre los objetos. Por ejemplo: los vértices pueden representar ciudades, y los arcos, vuelos aéreos de una ciudad a otra. 1 2 3 4

4.1. Definiciones fundamentales (III) Grafos dirigidos Un camino en un grafo dirigido es una secuencia de vértices v1, v2, …, vn, tal que v1v2, v2v3, …, vn-1vn, son arcos. Este camino va del vértice v1 al vértice vn y pasa por los vértices v2, v3, …, vn-1, y termina en el vértice vn. La longitud del camino es el número de arcos en ese camino (n-1 para el caso anterior). Un vértice sencillo v, por si mismo denota un camino de longitud 0 que va de v a v. En la figura anterior la secuencia 1,2,4, es un camino de longitud 2 que va del vértice 1 al vértice 4.

4.1. Definiciones fundamentales (IV) Grafos dirigidos Un camino es simple si todos sus vértices, excepto tal vez el primero y el último, son distintos. Un ciclo simple es un camino de longitud por lo menos uno, que empieza y termina en el mismo vértice. Es útil asociar información a los vértices y arcos de un grafo dirigido. Las etiquetas pueden estar en los vértices y/o en los arcos. Un vértice puede tener a la vez un nombre y una etiqueta.

4.2. Representaciones de grafos dirigidos (I) Para representar un grafo dirigido se pueden emplear varias estructuras de datos. Todo depende de las operaciones que se aplicarán a los vértices y a los arcos. Una representación común para un grafo dirigido G = (V, A) es la matriz de adyacencia. Para V = {1, 2, …, n} La matriz de adyacencia es de dimensión n x n Dicha matriz contiene elementos booleanos Un elemento i,j es verdadero si y sólo si existe un arco del vértice i al vértice j.

4.2. Representaciones de grafos dirigidos (II) Matriz de adyacencia Ventajas: Tiempo de acceso independiente del tamaño de V y A. Es útil en algoritmos en los cuales es necesario saber si un arco dado está presente. Desventajas: Ocupa el espacio para alojar n2 arcos aún cuando quizá solo se tengan n arcos. Examinar completamente matrices grandes ocupa bastante tiempo. Grafo dirigido de transiciones a 1 2 a b b b b a 4 3 a Matriz de adyacencia etiquetada 1 2 3 4 1 2 3 4 a b a b a b a b

4.2. Representaciones de grafos dirigidos (III) Otra representación para grafos dirigidos es mediante la lista de adyacencia. La lista de adyacencia para un vértice i es una lista, en algún orden, de todos los vértices adyacentes a i. Se puede representar el grafo G por un arreglo unidimensional donde cada elemento es un apuntador a la lista de adyacencia del vértice. La ventaja es que se utiliza un espacio proporcional al número de vértices. La desventaja es que el tiempo para determinar si existe un arco se incrementa en función de la cantidad de vértices. 1 2 3 4 Lista de adyacencia 2 3 1 2 3 4 4 2 3

4.3. Problema de los caminos más cortos con un solo origen (I) Grafos dirigidos Para un grafo G=(V, A) en el cual cada arco tiene una etiqueta no negativa, y donde un vértice se especifica como origen. El problema es determinar el costo del camino más corto del origen a todos los demás vértices de V, donde la longitud de un camino es la suma de los costos de los arcos del camino.

4.3. Problema de los caminos más cortos con un solo origen (II) Grafos dirigidos 1 10 100 2 30 5 50 10 60 3 4 20 Grafo dirigido con arcos etiquetados

4.3. Problema de los caminos más cortos con un solo origen (III) Grafos dirigidos En la solución de este problema se maneja una técnica “ávida” conocida como algoritmo de Dijkstra. Opera a partir de un conjunto de S vértices cuya distancia más corta desde el origen ya es conocida. En principio S contiene solo el vértice de origen. En cada paso, se agrega algún vértice restante v a S, cuya distancia desde el origen es la más corta. Suponiendo que todos los arcos tienen costos no negativos, siempre es posible encontrar un camino más corto entre el origen y v que pasa sólo a través de los vértices de S, y que se llama especial. En cada paso del algoritmo se utiliza un arreglo D para registrar la longitud del camino más corto a cada vértice. Una vez que S incluye todos los vértices, todos los caminos son especiales, así que D contendrá la distancia más corta del origen a cada vértice. El algoritmo supone que existe: Un grafo dirigido G =(V, A) en el que V={1, 2, ..., n} y el vértice 1 es el origen. Un arreglo bidimensional C de costos, donde C[i][j] es el costo de ir del vértice i al vértice j por el arco ij, si no existe ij entonces el costo será . En cada paso, D[i] contiene la longitud del camino especial más corto actual para el vértice i. 1 2 5 3 4 10 50 20 30 60 100

4.3. Problema de los caminos más cortos con un solo origen (IV) Grafos dirigidos Algoritmo de Dijkstra. S = {1}; para i = 2 hasta n hacer D[i ] = C[1][i ]; para i = 1 hasta n-1 hacer elige un vértice w en V-S tal que D[w] sea un mínimo; agrega w a S; para cada vértice v en V-S hacer D[v] = min(D[v], D[w] + C[w][v]); 1 2 5 3 4 10 50 20 30 60 100

4.3. Problema de los caminos más cortos con un solo origen (V) Grafos dirigidos C = 1 2 3 4 5 1 2 3 4 5 Algoritmo de Dijkstra. S = {1}; para i = 2 hasta n hacer D[i ] = C[1][i ]; para i = 1 hasta n-1 hacer elige un vértice w en V-S tal que D[w] sea un mínimo; agrega w a S; para cada vértice v en V-S hacer D[v] = min(D[v], D[w] + C[w][v]); 1 2 5 3 4 10 50 20 30 60 100 10  30 100  50      10   20 60     i V S w V-S v D[2] D[3] D[4] D[5] D[w] + C[w][v] {1,2,3,4,5} {1} 10  30 100 1 {1,2} 2 {2, 3, 4, 5} {3, 4, 5} 3 60 10 + 50 = 60 4 30 10 +  =  5 100 10 +  =  2 {1,2,4} 4 {3, 5} 3 50 30 + 20 = 50 5 90 30 + 60 = 90 3 {1,2,4,3} 3 { 5} 5 60 50 + 10 = 60 4 {1,2,4,3,5} 5 { } {1,2,3,4,5} {1,2,4,3,5} 10 50 30 60

4.3. Problema de los caminos más cortos con un solo origen (VI) Grafos dirigidos Algoritmo de Dijkstra y recuperación de caminos. S = {1}; para i = 2 hasta n hacer D[i ] = C[1][i ]; para i = 1 hasta n-1 hacer elige un vértice w en V-S tal que D[w] sea un mínimo; agrega w a S; para cada vértice v en V-S hacer D[v] = min(D[v], D[w] + C[w][v]); si D[w] + C[w][v] < D[v] entonces P[v] = w; C = 1 2 3 4 5 1 2 3 4 5 1 2 5 3 4 10 50 20 30 60 100 10  30 100  50      10   20 60     i V S w V-S v D[2] D[3] D[4] D[5] D[w] + C[w][v] P {1,2,3,4,5} {1} 10  30 100 P[2]=P[4]=P[5]=1 1 {1,2} 2 {2, 3, 4, 5} 3 60 10 + 50 = 60 P[3] = 2 {3, 4, 5} 4 30 10 +  =  5 100 10 +  =  2 {1,2,4} 4 {3, 5} 3 50 30 + 20 = 50 P[3] = 4 5 90 30 + 60 = 90 P[5] = 4 3 {1,2,4,3} 3 { 5} 5 60 50 + 10 = 60 P[5] = 3 4 {1,2,4,3,5} 5 { } P[2] = 1 P[3] = 4 P[4] = 1 P[5] = 3 {1,2,3,4,5} {1,2,4,3,5} 10 50 30 60

4.4. Problema de los caminos más cortos entre todos los pares (I) Grafos dirigidos Para un grafo G=(V, A) en el cual cada arco tiene un costo no negativo, el problema es encontrar el camino de longitud más corta entre cada par ordenado de vértices (v , w).

4.4. Problema de los caminos más cortos entre todos los pares (II) Grafos dirigidos La solución podría estar en aplicar Dijkstra, tomando cada vértice como origen. Un solución más directa es aplicar el algoritmo de R. W. Floyd. Supone que los vértices v están numerados como 1, 2, …, n. Utiliza una matriz A de n x n en la cual se calculan las longitudes de los caminos más cortos. Inicialmente A[i][j] = C[i][j] para toda i ≠ j. Si no existe un arco de i a j C[i][j] = . Cada elemento de la diagonal se hace 0. Se hacen n iteraciones sobre la matriz. Al final de la k-ésima iteración, A[i][j] tendrá la longitud más pequeña que vaya desde el vértice i hasta el vértice j y que no pase por un vértice con un número mayor que k.

4.4. Problema de los caminos más cortos entre todos los pares (III) Grafos dirigidos Algoritmo de Floyd. En la k-ésima iteración aplica la fórmula: Ak-1[i][j] Ak[i][j] = min Ak-1[i,k] + Ak-1[k,j] k Ak-1[i][k] Ak-1[k][j] i j Ak-1[i][j]

4.4. Problema de los caminos más cortos entre todos los pares (IV) Grafos dirigidos Algoritmo de Floyd. para i = 1 hasta n hacer para j = 1 hasta n hacer A[i ][ j ] = C[i ][ j ]; A[i ][i ] = 0; para k = 1 hasta n hacer si A[ i ][k] + A[k][ j ] < A[i ][ j ] entonces A[i ][ j ] = A[i ][k] + A[k][ j ] k Ak-1[i][k] Ak-1[k][j] i j Ak-1[i][j]

4.4. Problema de los caminos más cortos entre todos los pares (V) Grafos dirigidos Algoritmo de Floyd. para i = 1 hasta n hacer para j = 1 hasta n hacer A[i ][ j ] = C[i ][ j ]; A[i ][i ] = 0; para k = 1 hasta n hacer si A[ i ][k] + A[k][ j ] < A[i ][ j ] entonces A[i ][ j ] = A[i ][k] + A[k][ j ] C = 1 2 3 1 2 3 8 2 2 8 5 1 2 3 2 3 3   2 5 Se copia C en A A = 1 2 3 1 2 3 La diagonal de A se hace 0’s A = 1 2 3 1 2 3 2 8 5 8 5 3  3   2  2 Para k = 1 A = 1 2 3 1 2 3 Para k = 2 A = 1 2 3 1 2 3 Para k = 3 A = 1 2 3 1 2 3 i j i j i j 1 1 1 1 1 1 8 5 8 5 7 5 2 2 2 3 3 3 2 1 3 8 2 1 3 8 2 1 3 8 2 2 2 3 3 3  2 5 2 5 2 3 1 3 1 3 1 2 2 2 3 3

4.4. Problema de los caminos más cortos entre todos los pares (VI) Grafos dirigidos Algoritmo de Floyd con recuperación de caminos. para i = 1 hasta n hacer para j = 1 hasta n hacer A[i ][ j ] = C[i ][ j ]; P[i ][ j ] = 0; A[i ][i ] = 0; para k = 1 hasta n hacer si A[ i ][k] + A[k][ j ] < A[i ][ j ] entonces A[i ][ j ] = A[i ][k] + A[k][ j ] P[i ][ j ] = k; Se agrega una Matriz P donde P[i ][ j ] tiene el vértice k que permitió a Floyd encontrar el valor más pequeño. Si P[i ][ j ] es 0 entonces el camino de i a j es directo

4.4. Problema de los caminos más cortos entre todos los pares (VII) Grafos dirigidos Algoritmo de Floyd. para i = 1 hasta n hacer para j = 1 hasta n hacer A[i ][ j ] = C[i ][ j ]; P[i ][ j ] = 0; A[i ][i ] = 0; para k = 1 hasta n hacer si A[ i ][k] + A[k][ j ] < A[i ][ j ] entonces A[i ][ j ] = A[i ][k] + A[k][ j ] P[i ][ j ] = k; 8 2 1 2 3 2 3 5 Se inicializa P con ceros P = 1 2 3 1 2 3 La diagonal de A se hace 0’s A = 1 2 3 1 2 3 3 8 5 1 3  2  2 Para k = 1 A = 1 2 3 1 2 3 Para k = 2 A = 1 2 3 1 2 3 Para k = 3 A = 1 2 3 1 2 3 i j i j i j 1 1 1 1 1 1 8 5 8 5 7 5 2 2 2 3 3 3 2 1 3 8 2 1 3 8 2 1 3 8 2 2 2 3 3 3  2 5 2 5 2 3 1 3 1 3 1 2 2 2 3 3

4.5. Recorridos en grafos dirigidos (I) Consiste en visitar los vértices y los arcos de forma sistemática. Se utiliza la búsqueda en profundidad Es una generalización del recorrido en orden previo de un árbol. Ayuda a resolver con eficiencia muchos problemas relacionados con grafos dirigidos.

4.5. Recorridos en grafos dirigidos (II) La búsqueda en profundidad trabaja de la siguiente forma: Para un grafo dirigido G en un principio se marcan todos los vértices de G como no visitados. Se selecciona un vértice v como punto de partida; v se marca como visitado. Después se recorre cada vértice adyacente a v que no se haya visitado y se marca como visitado, aplicando de forma recursiva este paso (3). Una vez que se hayan visitado todos los vértices alcanzables desde v, la búsqueda esta completa. Si algunos vértices de G quedan sin visitar, se selecciona uno de ellos como vértice de partida repitiendo el proceso desde el paso 2 hasta que todos los vértices de G se hayan visitado.

4.5. Recorridos en grafos dirigidos (III) Para aplicar la búsqueda en profundidad se pueden utilizar: Un lista de adyacencia (L[v]) para representar los vértices adyacentes al vértice v, y Un arreglo marca cuyos elementos son del tipo (VISITADO, NOVISITADO), para saber si el vértice ya fue visitado o no. El procedimiento se inicia de la siguiente forma: para v = 1 hasta n hacer marca[v] = NOVISITADO; si marca[v] == NOVISITADO entonces bpf(v);

4.5. Recorridos en grafos dirigidos (IV) El algoritmo para el procedimiento que realiza la búsqueda en profundidad (bpf) es el siguiente: bpf( v ){ marca[v] = VISITADO; para cada vértice w en L[v] hacer si marca[w] == NOVISITADO entonces bpf( w ); }

4.5. Recorridos en grafos dirigidos (V) para v = 1 hasta n hacer F B A v bpf( v ) A bpf ( A ) A  VISITADO w en L[A] bpf ( w ) E B bpf ( B ) B  VISITADO w en L[B] bpf ( w ) G D C C bpf ( C ) C  VISITADO w en L[C] bpf ( w ) A Lista de adyacencia L[v] marca[v] D bpf ( D ) D  VISITADO B w en L[D] bpf ( w ) A A NOVISITADO VISITADO 1 A B C D B NOVISITADO VISITADO 2 C C A C NOVISITADO VISITADO 3 B D A C D NOVISITADO VISITADO 4 C E F G E NOVISITADO 5 D VISITADO E bpf ( E ) E  VISITADO F B F NOVISITADO VISITADO 6 w en L[E] bpf ( w ) G D F G NOVISITADO VISITADO 7 F bpf ( F ) F  VISITADO w en L[F] bpf ( w ) B para v = 1 hasta n hacer marca[v] = NOVISITADO; si marca[v] == NOVISITADO entonces bpf(v); bpf( v ){ marca[v] = VISITADO; para cada vértice w en L[v] hacer si marca[w] == NOVISITADO entonces bpf( w ); } G bpf ( G ) G  VISITADO w en L[G] bpf ( w ) D F F G

4.6. Grafos dirigidos acíclicos (I) Un grafo dirigido acíclico, o gda, es un grafo dirigido sin ciclos. Los gda son más generales que los árboles, pero menos que los grafos dirigidos arbitrarios, si se cuantifican las relaciones que presentan. Árbol Gda Grafo dirigido A A A B C B C B C D E D E D E

4.6. Grafos dirigidos acíclicos (II) Entre otras cosas los grafos dirigidos acíclicos son útiles para la representación de la estructura sintáctica de expresiones aritméticas con subexpresiones comunes. Por ejemplo la expresión: ( (a + b) * c + ((a + b) + e) * (e + f) ) * ((a + b) * c) * + * * + c + + a b e f

4.6. Grafos dirigidos acíclicos (III) para v = 1 hasta n hacer v bpf( v ) F B A A bpf ( A ) A  VISITADO w en L[A] bpf ( w ) E B bpf ( B ) B  VISITADO w en L[B] bpf ( w ) C bpf ( C ) C  VISITADO G D C w en L[C] bpf ( w ) A D bpf ( D ) D  VISITADO Prueba de aciclicidad w en L[D] bpf ( w ) A C Si se encuentra un arco de retroceso durante la búsqueda de profundidad, entonces el grafo tiene un ciclo. B C D E bpf ( E ) E  VISITADO A E w en L[E] bpf ( w ) F bpf ( F ) F  VISITADO w en L[F] bpf ( w ) F G B B G bpf ( G ) G  VISITADO w en L[G] bpf ( w ) C D D F Árbol abarcador en profundidad para A Árbol abarcador en profundidad para B F G Bosque abarcador de profundidad

4.5. Componentes fuertes (I) Grafos dirigidos Un componente fuertemente conexo de un grafo dirigido es un conjunto máximo de vértices en el cual existe un camino que va desde cualquier vértice del conjunto hasta cualquier otro vértice también del conjunto. La búsqueda en profundidad puede utilizarse para determinar con eficiencia los componentes fuertemente conexos de un grafo dirigido Grafo dirigido Componentes fuertes Grafo reducido A B A,B,C A B D C D D C