Grafos. Amalia Duch Brown Octubre de 2007

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

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

El TAD Grafo. El TAD Grafo

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

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

y cualquier par (x, y) puede escalarse, multiplicarse por un número real s, para obtener otro vector (sx, sy).

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

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

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

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

Algoritmos sobre Grafos

Apuntes de Matemática Discreta 8. Relaciones de Equivalencia

TEORÍA DE GRAFOS Ingeniería de Sistemas

Aritmética de Enteros

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

CAPITULO 6. Análisis Dimensional y Semejanza Dinámica

Figura 3.1. Grafo orientado.

El Autómata con Pila: Transiciones

OPTIMIZACIÓN VECTORIAL

Límites de funciones de varias variables.

Representación de números enteros: el convenio exceso Z

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

Definición y representación de los

Capítulo 6. Relaciones. Continuar

Tema 7: Geometría Analítica. Rectas.

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

Unidad II. 2.1 Concepto de variable, función, dominio, condominio y recorrido de una función.

SESIÓN 11 DERIVACIÓN DE FUNCIONES TRIGONOMETRICAS INVERSAS

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

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

NOTACIÓN O GRANDE. El análisis de algoritmos estima el consumo de recursos de un algoritmo.

Definición matemática de Relación y de Función

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

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

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

El pipeline de visualización es el conjunto de

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).

Máquinas Secuenciales, Autómatas y Lenguajes. Tema 3.1: Autómatas Finitos Deterministas

Bloque 2. Geometría. 2. Vectores. 1. El plano como conjunto de puntos. Ejes de coordenadas

INSTITUTO DE FORMACIÓN DOCENTE DE CANELONES DIVISIBILIDAD

Algebra lineal y conjuntos convexos

ESTADÍSTICA DESCRIPTIVA

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,

Análisis en Forma Estratégica: Juegos Estáticos I

NOCIONES PRELIMINARES (*) 1

Tipos de datos en S. Lógica y Computabilidad. Codificación de variables y etiquetas de S. Codificación de programas en S

Autómatas Deterministas. Ivan Olmos Pineda

Capítulo 1: Fundamentos: Lógica y Demostraciones Clase 3: Relaciones, Funciones, y Notación Asintótica

Notación Asintótica 2

Apuntes de dibujo de curvas

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

SESIÓN N 07 III UNIDAD RELACIONES Y FUNCIONES

Análisis y síntesis de sistemas digitales combinacionales

DISTANCIA ENTRE DOS PUNTOS EN EL PLANO CARTESIANO.

Sistemas de Ecuaciones Lineales y Matrices

La eficiencia de los programas

CONTINUIDAD DE FUNCIONES. SECCIONES A. Definición de función continua. B. Propiedades de las funciones continuas. C. Ejercicios propuestos.

SISTEMAS DE NUMERACION

Algoritmos y programas. Algoritmos y Estructuras de Datos I

INTRODUCCIÓN. FUNCIONES. LÍMITES.

Integrales múltiples

El concepto de número

Tablas Hash y árboles binarios

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

Introducción. podríamos concretar, por ser de dimensiones tan reducidas.

Administración de la producción. Sesión 9: Hojas de cálculo (Microsoft Excel)

Sistem as de ecuaciones lineales

BLOQUE 1. LOS NÚMEROS

Algoritmos. Medios de expresión de un algoritmo. Diagrama de flujo

Profesor(a): M. A. Zeferino Galarza Hernández

Bloques Aritméticos - Multiplicadores

Capítulo 2: Inducción y recursión Clase 2: El principio de Inducción Fuerte

Cursada Segundo Cuatrimestre 2012 Guía de Trabajos Prácticos Nro. 1

Cristian Blanco

6.1.- Introducción a las estructuras de datos Tipos de datos Arrays unidimensionales: los vectores Operaciones con vectores.

VECTORES EN EL PLANO CON DERIVE

Métodos para escribir algoritmos: Diagramas de Flujo y pseudocódigo

Cálculo de bisección inversa mediante mínimos cuadrados

Estructuras de control

INTEGRACIÓN NUMÉRICA

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

UNIDAD I. ALGORITMOS

Espacios vectoriales reales.

Unidad 6. Gráficas Planares

ESCALARES Y VECTORES

Ángulos complementarios Un par de ángulos son complementarios si la suma resultante de sus medidas es.

PROGRAMACIÓN. UNIDAD II. ALGORITMO PROFA : HAU MOY

Este documento enumera los diferentes tipos de Diagramas Matriciales y su proceso de construcción.

ÁLGEBRA DE BOOLE. 1.- Postulados de HUNTINGTON

Sistemas Numéricos y Códigos Binarios

Introducción a los códigos compresores

Lección 1. Algoritmos y conceptos básicos.

Ejemplo, generación de #s aleatorios

Unidad III: Curvas en R2 y ecuaciones paramétricas

3.Si A y B son incompatibles, es decir A B = entonces:

POLÍGONOS POLÍGONOS. APM Página 1

Los números complejos

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

Terminaremos el capítulo con una breve referencia a la teoría de cardinales.

Mercedes Granda Departamento de Electrónica y Computadores. Las propiedades de las redes de Petri nos permiten

Transcripción:

Grafos Amalia Duch Brown Octubre de 2007 Índice 1. Definiciones Básicas Intuitivamente un grafo es un conjunto de vértices unidos por un conjunto de líneas o flechas dependiendo de si el grafo es dirigido o no dirigido. Gráficamente los vértices se representan por círculos, las líneas (o aristas) pertenecen a los grafos no dirigidos y las flechas (o arcos) a los grafos dirigidos. Formalmente, un grafo no dirigido (o simplemente grafo) consta de: 1. un conjunto finito de vértices V 2. un cojunto de aristas E en el que cada arista es un conjunto de exactamente dos vértices. Un grafo dirigido (o digrafo) consta de: 1. un conjunto finito de vértices V 2. un cojunto de arcos E V V (obsérvese que cada arco es un par ordenado vértices) Tanto en los grafos dirigidos como en los no dirigidos las secuencias de vértices pueden formar caminos y ciclos. Definimos un camino de longitud l como una secuencia de vértices u 0, u 1,..., u l tales que, para todo i tal que 1 i l, (u i 1, u i ) E (si se trata de un digrafo) o {u i 1, u i } E (si se trata de un grafo). Un camino es simple si todos los vértices del camino, excepto quizás el primero y el último, son diferentes. Un ciclo es un camino simple que comienza y acaba en el mismo vértice. Decimos que un grafo G = (V, E) es conexo si para todo par de vértices u, v V existe un camino en el grafo G que comienza en u y acaba en v. Un tipo especial de grafo conexo es el árbol (árbol libre) que es un grafo no dirigido, conexo y acíclico. Un árbol también puede definirse como un grafo no dirigido en el que hay exactamente un camino entre todo par de vértices. Los árboles tienen algunas sencillas propiedades que pueden resultar muy útiles, como por ejemplo: 1

1. un árbol con n vértices contiene exactamente n 1 aristas 2. si se añade una única arista a un árbol, el grafo resultante contiene un único ciclo 3. si se elimina una única arista de un árbol, entonces el grafo resultante deja de ser conexo Decimos que un digrafo es fuertemente conexo si para cualquier par de vértices existe un camino que los une y decimos que es débilmente conexo si el grafo resultante de convertir los arcos en aristas es conexo. En un grafo (o digrafo), decimos que un vértice v V es adyacente a un vértice u V si y solo si {u, v} E en el caso de los grafos o (u, v) E en el caso de los digrafos. En un digrafo, si un vértice v es adyacente a un vértice u, decimos que el vértice u es incidente al vértice v. En un grafo, el grado de un vértice es él número de vértices adyacentes a él y el grado del grafo el máximo de los grados de sus vértices. Teorema 1.1 En un grafo no dirigido G = (V, E) se tiene que v V grado(u) = 2 E. La demostración hecha en clase es por inducción sobre el número de vértices del grafo. En un digrafo el grado de entrada de un vértice es el número de sus vértices incidentes y el grado de salida de un vértice es el número de sus vértices adyacentes. Decimos que un grafo (digrafo) es completo si contiene el máximo número de aristas (arcos) posible. Cuántas aristas (arcos) son? Ejemplos de todo lo anterior: Dados en clase. 2. Representación Existen varias estructuras de datos que pueden utilizarse para representar grafos y digrafos. La elección de la estructura de datos adecuada depende del tipo de operaciones que se quieran aplicar al conjunto de vértices y aristas (arcos) del grafo (digrafo) en cuestión. Las representaciones más comunes son las matrices de adyacencia y las listas de adyacencia. 2.1. Matrices de Adyacencia Dado un grafo (digrafo) G = (V, E) con V = {1, 2,..., n}, la matriz de adyacencias de G es una matriz A de boleanos de tamaño n n en la que A[i][j] es cierto si y sólo si la arista (arco) que une al vértice i con el vértice j está en E ({i, j} en el caso de grafos y (i, j) en el caso de digrafos). 2

Es fácil observar que la matriz de adyacencias de un grafo no dirigido es una matriz simétrica y que podemos ahorrar espacio (la mitad) guardando solo su parte inferior. En un grafo representado por matrices de adyacencia el tiempo que se requiere para accesar un elemento es independiente de las tallas de V y de E, por tanto, ésta puede ser una representación adecuada en las aplicaciones en las que es necesario saber con mucha frecuencia si una determinada arista (arco) está presente en el grafo (digrafo). La desventaja principal de utilizar una matriz de adyacencias para representar un grafo (digrafo) es que la matriz requiere un espacio Ω(n 2 ) incluso si el grafo (digrafo) es esparso, es decir, si tiene bastante menos de n 2 aristas (arcos). Sólo leer o examinar la matriz requerirá tiempo O(n 2 ), en perjuicio de posibles algoritmos de tiempo O(n) para manipular grafos (digrafos) con O(n) aristas (arcos). Una alternativa para evitar esta desventaja es utilizar listas para representar un grafo. Ejemplos: Dados en clase. 2.2. Listas de Adyacencia Dado un grafo G = (V, E) la lista de adyacencias de un vértice i de G, es una lista, en un orden cualquiera, de todos los vértices adyacentes a i. Se puede representar G como un vector L en el que L[i] es un puntero a la lista de adyacencias del vértice i. La cantidad de memoria que requiere esta representación es proporcional a la suma del número de vértices más el número de punteros (que corresponde al número de aristas o arcos según sea el caso). Es decir, el coste en memoria es Θ(n + m) con n = V y m = E. Si el grafo es esparso este coste es mucho menor que el requerido por la representación matricial, en cambio, si el grafo es denso (lo que sucede cuando el número de aristas o arcos es Θ(n 2 )) la diferencia en requerimientos de memoria entre una representación u otra no es tan significativa. La desventaja de esta representación es que el determinar si una arista (arco) está o no en el grafo puede tomar tiempo O(n) ya que el número máximo de vértices que pueden haber en la lista de adyacencias de un vértice dado es n. Ejemplos: Dados en clase. 3. TAD Grafo Es posible definir formalmente los TADs correspondientes a los grafos y a los grafos dirigidos y estudiar las implementaciones de sus operaciones. No entraremos en los detalles porque la mayoría de ellos se han estudiado antes en la asignatura. Las operaciones más comunes en grafos y digrafos incluyen las operaciones de leer la etiqueta de un vértice o de una arista (arco), insertar o 3

borrar vértices y aristas (o arcos), navegar por el grafo (digrafo) siguiendo sus aristas (arcos). Esta última operación requiere la definición de un tipo índice que nos permita recorrer todos los vértices adyacentes a uno dado. Para ello, definimos las macros: 1. forall ver(u,g) que recorre todos los vértices de G 2. forall adj(uv,g[u]) que hace que el iterador uv recorra toda la lista de adyacencias G[u]. En este caso es posible imaginar que u es el vértice de salida, que uv es la arista (o arco) y que *uv es el vértice de destino. La implementación correspondiente se encuentra en el fichero graph.hh incluido en el código de la asignatura (http://www.lsi.upc.edu/~ada). 4. Recorridos Un recorrido de un grafo es una manera sistemática de explorar sus vértices siguiendo la estructura del grafo. Los recorridos dan lugar a esquemas para el tratamiento de grafos. Varias preguntas sobre grafos (como por ejemplo saber si un grafo es conexo o no) pueden resolverse mediante recorridos. En un recorrido puede aplicarse una determinada operación en cada visita. Nosotros nos centraremos en generar una secuencia de los vértices en el orden en el que se visitan (igual que se había hecho para árboles). 4.1. Recorrido en Profundidad (DFS) En cada paso se escoge seguir por una de las aristas que salen del vértice visitado más recientemente. Dado un grafo G = (V, E) el coste de recorrerlo utilizando el algoritmo DFS es Θ( V + E ), ya que los bucles del algoritmo DFS toman un tiempo Θ( V ) que es independiente del tiempo que toma hacer las llamadas a las visitas en profundidad de cada vértice. Para cada visita a un vértice v el bucle correspondiente se ejecuta tantas veces como el número de vértices adyacentes a v ( Adj[v] ) y como v V Adj[v] = Θ( E ), el coste total de ejecutar el bucle es Θ( E ). La combinación de los dos costes descritos resulta en el coste del algoritmo. 4.2. Recorrido en Amplitud (BFS) En cada paso se visitan todos los vértices (aún no visitados) adyacentes al vértice visitado más recientemente. 4

Dado un grafo G = (V, E) el coste en tiempo de recorrerlo en amplitud es O( V + E ) ya que cada vértice del grafo se pone en la cola y se saca de ella una única vez. Las operaciones de agregar un elemento a la cola y de sacarlo toman tiempo Θ(1), por tanto el tiempo total de agregar y sacar elementos de la cola es Θ( V ). Por otra parte, la lista de adyacencias de cada vértice se recorre sólo cuando el vertice se saca de la cola, es decir, se recorre una única vez y como la suma de las longitudes de todas las listas de adyacencias es Θ( E ), el tiempo total de recorrer las listas es O( E ). De las dos consideraciones anteriores se desprende el coste del algoritmo BFS. 5. Ordenación Topológica Dado un grafo dirigido y acíclico una ordenación topológica de sus vértices es una ordenación de sus vértices en la que un vértice v no aparece antes que un vértice u si en el grafo hay un camino de u a v. Partiendo de las versiones iterativa y recursiva del DFS, pueden determinarse dos algoritmos (iterativo y recursivo, respectivamente) eficientes para obtener una posible ordenación topológica de un grafo dirigido y acíclico dado. 5