Algoritmos Elementales de Grafos. Agustín J. González ELO-320: Estructura de Datos Y Algoritmos 1er.Sem. 2002

Documentos relacionados
Ruta más Corta con una sóla Fuente de Inicio (Single-Source Shortest Paths) DR. JESÚS A. GONZÁLEZ BERNAL CIENCIAS COMPUTACIONALES INAOE

Es un conjunto de objetos llamados vértices o nodos unidos por enlaces llamados aristas o arcos, que permiten representar relaciones binarias entre

El TAD Grafo. El TAD Grafo

Un grafo G = (V, E) se dice finito si V es un conjunto finito.

Tema: Los Grafos y su importancia para la optimización de redes.

Tema 14 Grafos y su Implementación en Java. Parte II. Recorrido en Profundidad (DFS) de un Grafo. Recorrido de un Grafo: Ampliación de la clase Grafo

Caminos y Flujos optimales. Introducción a la Investigación de Operaciones 2007

Relaciones. Estructuras Discretas. Relaciones. Relaciones en un Conjunto. Propiedades de Relaciones en A Reflexividad

ALGORITMO MINIMAX. o Nodo: Representa una situación del juego. o Sucesores de un nodo: Situaciones del juego a las que se

TEORÍA DE GRAFOS Ingeniería de Sistemas

UNIDAD 9. DATOS COMPLEJOS PILAS

Notación Asintótica 2

Funciones: Aspectos básicos

Fundamentos de la teoría de grafos

Para construir un diagrama PERT se han de tener en cuenta las siguientes reglas

Capítulo 6. Relaciones. Continuar

TEMA 1. MATRICES, DETERMINANTES Y APLICACIÓN DE LOS DETERMINANTES. CONCEPTO DE MATRIZ. LA MATRIZ COMO EXPRESIÓN DE TABLAS Y GRAFOS.

El Juego como Problema de Búsqueda

Flujo Máximo. Agustín J. González ELO320: Estructura de Datos y Algoritmos 1er. Sem. 2002

2. SEÑALES Y SISTEMAS DISCRETOS EN EL TIEMPO. Una señal puede ser definida como una portadora física de información. Por ejemplo,

Inteligencia Artificial

PROGRAMACIÓN LINEAL. Su empleo es frecuente en aplicaciones de la industria, la economía, la estrategia militar, etc.

RELACIÓN DE PROBLEMAS DE CLASE DE PROGRAMACIÓN LINEAL ENTERA

Apuntes de Matemática Discreta 8. Relaciones de Equivalencia

(d) Puede haber estrategias que funcionan mejor que Minimax si el contrincante es

Autómatas Deterministas. Ivan Olmos Pineda

Matemáticas Discretas TC1003

(e) Con la poda alfa-beta se eliminan nodos que nunca serán alcanzados

Inteligencia Artificial. Integrantes Equipo # 1:

Ejemplo: El problema de la mochila. Algoritmos golosos. Algoritmos y Estructuras de Datos III. Segundo cuatrimestre 2013

No es otra cosa, que la representación de los resultados de una función sobre el plano carteciano.

Figura 3.1. Grafo orientado.

Aprendizaje Automatizado

Clases e instancias. Algoritmos y Estructuras de Datos I. Clases e instancias. memoria dinámica.

PROGRAMACION CONCURRENTE Y DISTRIBUIDA

Tablas Hash y árboles binarios

CAPÍTULO 1 INTRODUCCIÓN A LA PROGRAMACIÓN ORIENTADA A OBJETOS

Algoritmos Básicos de Grafos

Un grafo G es un par (V,E) donde V es un conjunto (llamado conjunto de vértices) y E un subconjunto de VxV (conjunto de aristas).

Algoritmos y programas. Algoritmos y Estructuras de Datos I

f: D IR IR x f(x) v. indep. v. dependiente, imagen de x mediante f, y = f(x). A x se le llama antiimagen de y por f, y se denota por x = f -1 (y).

Tema Árboles generales. 9.2 Árboles binarios 9.3 Árboles de búsqueda

La variable independiente x es aquella cuyo valor se fija previamente. La variable dependiente y es aquella cuyo valor se deduce a partir de x.

Búsqueda con adversario

OPTIMIZACIÓN VECTORIAL

Tema 3: El Método Simplex. Algoritmo de las Dos Fases.

r j ϕ j (v i ) = r i, ϕ(v i ) = v = n a ij ϕ j(v) ϕ i (v) =

GRAFOS. Prof. Ing. M.Sc. Fulbia Torres

Minicurso de Teoría de Gráficas Escuela de Verano 2014 por María Luisa Pérez Seguí Facultad de Ciencias Físico-Matemáticas, Universidad Michoacana

UNIVERSIDAD TECNOLOGICA DE PEREIRA PROGRAMA DE TECNOLOGIA ELECTRICA

Colegio San Patricio A Incorporado a la Enseñanza Oficial Fundación Educativa San Patricio

Sistemas de Ecuaciones Lineales

Planaridad. Algoritmos y Estructuras de Datos III

Estructuras de Datos. Estructuras de Datos para Conjuntos Disjuntos

Los 3 pasos para conseguir clientes con las campañas de anuncios más exitosas en Facebook.

UNIDAD 12.- Estadística. Tablas y gráficos (tema12 del libro)

Unidad V. 5.1 Recta tangente y recta normal a una curva en un punto. Curvas ortogonales.

Continuidad. 5.1 Continuidad en un punto

Funciones 1. D = Dom ( f ) = x R / f(x) R. Recuerda como determinabas los dominios de algunas funciones: x x

3. Métodos clásicos de optimización lineal

Límites de funciones de varias variables.

4 E.M. Curso: Unidad: Estadísticas Inferencial. Colegio SSCC Concepción. Depto. de Matemáticas. Nombre: CURSO: Unidad de Aprendizaje: FUNCIONES

DEFINICION. Ing. M.Sc. Fulbia Torres Asignatura: Estructuras de Datos Barquisimeto 2006

Visión artificial y Robótica Modelos de movimiento y mapas. Depto. de Ciencia de la Computación e Inteligencia Artificial

GIMNASIO VIRTUAL SAN FRANCISCO JAVIER Valores y Tecnología para la Formación Integral del Ser Humano UNIDAD I FUNCIONES

Tema 4 Algoritmos y protocolos de encaminamiento

Matrices y determinantes

Figura 1. Círculo unidad. Definición. 1. Llamamos número π (pi) al valor de la integral

RESOLUCIÓN DE TRIÁNGULOS

ƒ : {(1, 4), (2, 5), (3, 6), (4, 7)}.

Limite de una función.

Algoritmos: Algoritmos voraces

TEORÍA DE GRAFOS. OPTIMIZACIÓN EN REDES 1

Cálculo I (Grado en Ingeniería Informática) Problemas adicionales resueltos

El pequeño círculo de la NO-O aporta un NO funcional a la salida, de modo que invierte los estados de la misma.

Diagramas de secuencia

Centro Asociado Palma de Mallorca. Tutor: Antonio Rivero Cuesta

Tema 1 El objeto de análisis de la economía

Cristian Blanco

Sistemas de producción y búsqueda de soluciones. Area de Computación e Inteligencia Artificial 1

Problemas en P y NP. Marcos Kiwi. Semestre Otoño U. Chile

27/01/2011 TRIGONOMETRÍA Página 1 de 7

El pipeline de visualización es el conjunto de

Algoritmos y Estructuras de Datos Curso 06/07. Ejercicios

Guía práctica de estudio 05: Diagramas de flujo

SISTEMAS DE ECUACIONES LINEALES. Método de reducción o de Gauss. 1º DE BACHILLERATO DPTO DE MATEMÁTICAS COLEGIO MARAVILLAS AUTORA: Teresa González.

1. Conceptos básicos sobre el problema en cuestión y cuestiones afines. 2. Formulación de los correspondientes algoritmos y su pseudocódigo.

TEORÍA DE AUTÓMATAS Y LENGUAJES FORMALES

b) t=60. Los semáforos de A están en amarillo durante 3 segundos. c) t=63. Los semáforos de A pasan a rojo y los de B a amarillo durante 3

Seminario de problemas-eso. Curso Hoja 10

7. Agrupamiento (clustering)

Estructuras de Datos Abstractas en Lenguaje Java

1 x (rad) 0 π/2 π 3π/2 2π cos x x Para representarla, recomiendo que se haga una tabla dando al argumento

REDES DE LOS SISTEMAS DE PAGO: HACIENDO ANÁLISIS USANDO

A B MIN C D E F MAX x E.T.S.I. INFORMÁTICA 4º CURSO. INTELIGENCIA ARTIFICIAL E INGENIERÍA DEL CONOCIMIENTO

Ejercicio 1. Desarrollar una versión del juego Memoria.

CONTENIDOS. 1. Procesos Estocásticos y de Markov. 2. Cadenas de Markov en Tiempo Discreto (CMTD) 3. Comportamiento de Transición de las CMTD

la solución a una ecuación cuadrática solicitando al usuario los términos de dicha ecuación.

Apuntes de Algoritmos y Estructuras de Datos, Programación III, Fac. de Informática UNLP. Alejandro Santos. 7 de agosto de

PLANES DE ESTUDIO PARA PRIMER CURSO

Transcripción:

Algoritmos Elementales de Grafos Agustín J. González ELO-0: Estructura de Datos Y Algoritmos er.sem. 00

Introducción Estudiaremos métodos para representar y explorar o recorrer grafos. Explorar un grafo significa seguir sistemáticamente los arcos de un grafo para visitar sus vértices. Las dos representaciones más comunes para representar grafos son: Lista de adyacencia y matriz de adyacencia. Representación de grafos Un Grafo G =(V, E), V : conjunto de vértices y E conjunto de arcos, se representa preferiblemente con una lista de adyacencia porque ésta permite una representación compacta cuando el grafo es disperso; i.e. cuando E << V Es preferible usar una representación con Matriz de Adyacencia cuando el grafo es denso; i.e. E ~ V,.o cuando es preciso saber rápidamente si hay un arco conectando dos vértices.

Representación con Listas de Adyacencia En este caso el Grafo G=(V, E) consiste de un arreglo Adj que almacena V listas, una para cada vértice en V. Para cada u V, la lista de adyacencia Adj[u] contiene (punteros a) todos los vértices v tal que hay una arco (u,v) E. Si el grafo es dirigido, se cumple que la suma de los largos de las listas de adyacencia es E. Si el grafo no es dirigido, se cumple que la suma de los largos de las listas de adyacencia es * E. Dado que cada arco aparece dos veces. En cualquier caso la memoria requerida es O(max( V, E )) = O( V + E ).

Representación con Listas de Adyacencia: Ejemplo Caso grafo no dirigido 5 4 4 5 5 5 4 5 4 4 Caso Grafo dirigido 4 5 4 5 5 6 6 4 4 5 6 6 Las listas de adyacencia pueden ser fácilmente adaptadas para representar grafos con peso. En estos un peso es asociado a cada arco a través de una función de peso w: E --> R. Así el peso del arco (u,v) es puesto en el nodo v de la lista u. 4

Representación con Matriz de Adyacencia: Ejemplo Caso grafo no dirigido 5 4 5 Notar la simetría. Para ahorrar memoria se puede almacenar sólo la mitad. Caso Grafo dirigido 4 5 6 0 0 0 0 0 0 0 0 0 0 0 0 0 4 0 0 0 0 0 4 5 6 5 0 0 0 0 0 0 0 0 0 0 6 4 4 5 0 0 0 0 0 0 0 0 0 0 0 Si el grafo es con peso, el peso se almacena en la matriz. Cuando un arco no existe se toma algún valor que represente su ausencia 0, - etc. Dependiendo de la aplicación. La matriz de adyacencia es preferible cuando el grafo es pequeño por 5 su simplicidad.

Algoritmos de Exploración de un grafo. La idea es visitar todos los vértices siguiendo los arcos. Breadth-first search búsqueda (visitar) primero por distancia (todos de igual distancia se visitan primero) Dado un vértice fuente s, Breadth-first search sistemáticamente explora los arcos del grafo G para descubrir todos los vertices alcanzables desde s. También calcula la distancia (menor número de arcos) desde s a todos los vértices alcanzables. También produce un árbol con raíz en s y que contiene a todos los vértices alcanzables. El camino desde s a cada vértice en este recorrido contiene el mínimo número de arcos. Es el camino más corto medido en número de vértices. Su nombre se debe a que expande uniformemente la frontera entre lo descubierto y lo no descubierto. Llega a los nodos de distancia k, sólo luego de haber llegado a todos los nodos a distancia k-. 6

Algoritmos Breadth-first search (BFS) Inicialmente el algoritmo colorea los vértices con blanco. Luego éstos pasan a plomo y luego negro. El color plomo es usado para definir la frontera entre lo ya descubierto o explorado y lo por visitar. BFS(G,s) { /* pseudo-código */ int d[n], p[n], color[n]; /* Arreglos de distancia, de padres, y de color */ QUEUE Q; /* Cola usada como estructura auxiliar */ for ( cada vértice u V[G] -{s) { color [u] =Blanco; d[u] = ; /* distancia infinita si el nodo no es alcanzable */ color[s] =Plomo; d[s] = 0; p [s]=null; Enqueue(Q, s); while (!Queue_Vacía(Q) ) { u = Cabeza(Q); for ( cada v Adj [u] ) { if (color [v] == Blanco) { color[v]=plomo; d [v]=d [u] +; p [v] = u; Enqueue(Q, v); Dequeue(Q); /* se extrae u */ color [u] = Negro; El tiempo de ejecución es O( V + E ). Notar que cada nodo es encolado una vez y su lista de adyacencia es recorrida una vez también. 7

Ejemplo de Breadth-first search Recorrido o Búsqueda de nodos en amplitud 8

Algoritmos Depth-first search (DFS) Como en BFS, inicialmente el algoritmo colorea los vértices con blanco. Luego éstos pasan a plomo y luego negro. Aquí el color plomo es usado para definir nodos cuyos descendientes están siendo visitados. int tiempo; /* global */ int d[n], f[n], p[n], color[n]; /* Arreglos de tiempo de entrada, tiempo de salida, padres, y color */ DFS(G) { /* pseudo-código */ for ( cada vértice u V[G]) { color [u] =Blanco; p[u] = NULL; tiempo = 0; for (cada vértice u V[G]) if (color[u] == Blanco) DFS_visit(u); DFS_visit (u) /* pseudo-código */ color [u]= Plomo; /* Vértice Blanco u es visitado, ingresamos a su sub-árbol */ d[u] = ++tiempo; /* el tiempo se incrementa cada vez que entramos y salimos de un nodo*/ for ( cada v Adj [u] ) { /* explora arcos (u,v) */ if (color [v] == Blanco) { p [v] = u; DFS_visit(v); color [u] = Negro; /* ennegrezca u, salimos de su sub-árbol */ f [u] = ++tiempo; 9 El tiempo de ejecución de DFS es también O( V + E ). Cada arco y nodo es recorrido una vez.

Ejemplo de DFS 0

Orden Topológico El orden topológico tiene sentido sólo en grafos aciclicos dirigidos (DAG). Orden topológico de un dag G=(V,E) es un orden lineal de todos los vértices tal que si G contiene el arco (u,v), entonces u aparece antes que v en el orden. Cuando se tienen muchas actividades que dependen parcialmente unas de otras, éste orden permite definir un orden de ejecución sin conflictos. Gráficamente se trata de poner todos los nodos en una línea de manera que sólo haya arcos hacia delante. Algoritmo: Topological_Orden(G) Llamar a DFS(G) para calcular el tiempo de término f[v] para cada vértice. Insertar cada nodo en una lista enlazada según su orden de término. Retornar la lista enlazada

Ejemplo: Orden topológico Es teste el único orden topológico?

Ejemplo: Orden topológico Cuál es el orden topológico?

Detección de componentes fuertemente Conexas Una componente fuertemente conexa de un grafo G=(V,E) es el máximo conjunto de vértices U subconjunto de V tal que para cada par de vértices u, v en U, existan caminos desde u a v y viceversa. El algoritmo descubre todas las componentes fuertemente conexas. Para ello define el grafo traspuesto de G, G T = (V,E T ), donde E T ={(u,v) tal que (v,u) pertenece a E. En otras palabras, invierte el sentido de todas los arcos. Algoritmo: Strongly_Connected_Components(G).- Llamar a DFS(G) para obtener el tiempo de término f[u], para cada vértice u;.- Calcular G T ;.- Llamar a DFS(G T ), pero en el loop principal de DFS, considerar los vértices en orden decreciente de f [u]. 4.- La salida son los vértices de cada árbol de la foresta del paso. Cada árbol es una componente fuertemente conexa separada. 4

Ejemplo de Detección de Componentes fuertemente conexas 5

Por qué funciona? No haremos una demostración rigurosa, pero si daremos algunos elementos que ayudan a su entendimiento. Cuando se recorre un grado en DFS se tiene: si v es un descendiente de u entonces f[v]<f[u]. Si v es descendiente de u, v es alcanzable desde u. La conectividad de nodos en una componente conexa es es invariante con respecto a la inversión de arcos. Si de v llegamos a u, y de u llegamos a v, al invertir los arcos esta propiedad se mantiene. Al visitar los nodos de G T usando orden de término decreciente, para cada árbol estaremos partiendo por los mismos nodos que usamos en el recorrido de G. Tendremos que llegar a todos los conectados de todas formas y éstos definirán las componentes fuertemente conexas. 6