Estructuras de datos para Grafos

Slides:



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

ALGORITMOS DE KRUSKAL Y PRIM
Diseño y análisis de algoritmos
GRAFOS Presentado por: Oscar Leonardo Ramírez John Freddy Sandoval
GRAFOS: ALGORITMOS FUNDAMENTALES
Teoría de Grafos I semestre 2009 UNIVERSIDAD NACIONAL DE INGENIERIA
NUMERO DE CONTROL: NOMBRE DEL TRABAJO: MAPA CONCEPTUAL
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
INSTITUTO TECNOLOGICO DE VILLAHERMOSA
Instituto Tecnológico De Villahermosa
Investigación de Operaciones II
Investigación de Operaciones II
ALGORITMO DEL ÁRBOL DE MÍNIMA EXPANSIÓN
ESTRUCTURAS DE DATOS AVANZADAS
Grafos dualmente cordales y sus relaciones con otros tipos de grafos


Definiciones: conjuntos, grafos, y árboles

Teoría de Grafos.
Analisis y Diseño de Algoritmos Tema: Grafos 3ra Parte
Problemes de Viatjants
AED I. Estructuras de Datos.
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
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.
Ciudad de Könisberg, Prusia, en XVIII:
Teoria de grafos.-clase 4
Definiciones: conjuntos, grafos, y árboles
Trabajo presentado por: LUIS FERNANDO OBANDO ING
Á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.
Problemas de Decisión y Optimización
Matemáticas Discretas
Diseño y análisis de algoritmos

Teoría de Grafos.-Clase 2

Surge cuando se necesita un modelo costo-efectividad que permita transportar ciertos bienes desde un lugar de origen a un destino que necesita aquellos.
INSTITUTO TECNOLÓGICO DE VILLAHERMOSA. CATEDRATICO:
Agustín J. González ELO320: Estructura de Datos y Algoritmos
Matemáticas Discretas
Tópicos I Árboles, montículos y grafos
s t a c b d Grafos.
Grafos..
Sesión 3: Teoría de Grafos
Minimum Spanning Tree (Árbol de Expansión Mínima)
Definiciones: conjuntos, grafos, y árboles
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
Cecilia Laborde González
Estructura de Datos 4 Grafos Dirigidos
Instituto Tecnológico De Villahermosa Alumno: Lázaro García Hernández.
ALUMNO: GABRIEL GARCÍA VELAZQUEZ NO.CONTROL: MATERIA: INV. OPERACIONES UNIDAD 3.
UNIDAD 2 Grafos Árboles abarcadores mínimos Caminos más cortos.
BUSQUEDA EN ANCHURA Y PROFUNDIDAD
GRAFOS.
M.C. Meliza Contreras González
Matemáticas Discretas MISTI
Recorridos de grafos Segunda Parte M.C. Meliza Contreras González.
Transcripción de la presentación:

Estructuras de datos para Grafos Estructura de Datos Facultad de Ciencias de la computación BUAP. Verano 2005

Introducción Los grafos sirven para representar relaciones arbitrarias (no necesariamente jerárquicas) entre objetos de datos PLAZA DE CASTILLA NUEVOS MINISTERIOS GREGORIO MARAÑÓN CANAL GUZMAN EL BUENO CUATRO CAMINOS AVDA. DE AMÉRICA Estructura de Datos

Introducción: aplicaciones Circuitos electrónicos Tarjetas impresas Circuitos integrados Redes de transporte Autopistas Vuelos Redes de ordenadores LANs Internet Web Bases de datos Diagramas entidad/relación Estructura de Datos

Introducción: aplicaciones(Cont.) Modelar conectividad en computadoras y redes de comunicaciones. Representar un mapa como un conjunto de localidades con distancias entre ellas; usado para calcular las rutas más cortas entre localidades. Modelar capacidades de flujo en redes de transporte. Modelar relaciones en familias, negocios u organizaciones militares. Modelar algoritmos de computadora, mostrando las transiciones del estado de un programa a otro. Estructura de Datos

Fundamentos: definiciones Un grafo consiste en un conjunto de vértices o nodos y un conjunto de arcos. Se representa con el par G = (V,A). Un arco o arista está formado por un par de nodos u y v, y se representa por (u,v) Un grafo es dirigido si los pares de nodos que forman los arcos son ordenados y se representan u  v. Un grafo no dirigido es aquel que los arcos están formados por pares de nodos no ordenados, se representa u  v. Si (u,v) es una arista en A(G), entonces u y v se dice que son vértices adyacentes. Un arco tiene, a veces, asociado un factor de peso, en cuyo caso se dice que es un grafo valorado o ponderado (con pesos). Estructura de Datos

Fundamentos: grafos dirigidos b d c Grafo no dirigido V(G1) = {a,b,c,d} A(G1) = {(a,b),(a,d),(b,c),(b,d)} 1 3 5 7 9 Grafo dirigido V(G2) = {1,3,5,7,9} A(G2) = {(1,3),(3,1),(9,1), (3,5),(5,7)} Estructura de Datos

grafo no conexo con dos componentes conexas Fundamentos Grado de un nodo En un grafo dirigido Grado de un nodo u = nº de aristas que contienen a u Grado de entrada de u = nº de arcos que llegan a u Grado de salida de u = nº de arcos que salen de u Grafos conexos Un grafo no dirigido es conexo si existe un camino entre cualquier par de nodos que forman el grafo Ejemplos: grafo no conexo con dos componentes conexas grafo conexo Estructura de Datos

Fundamentos: camino P1 X U V W Z Y a c b e d f g h P2 Un camino P de longitud n en el grafo G desde u0 a un es la secuencia de n+1 vértices P = (u0, u1, ..., un) tal que (ui,ui+1) son arcos de G para 0  i  n Un camino es simple si todos los nodos que forman el camino son distintos, pudiendo ser iguales los extremos del camino Ejemplo: P1 es simple P2 no es simple P1 X U V W Z Y a c b e d f g h P2 Estructura de Datos

Fundamentos: ciclos y bucles Un ciclo es un camino simple cerrado con u0=un, compuesto al menos por tres nodos Un ciclo es simple si todos sus vértices y arcos son distintos Un arco que va desde un vértice a sí mismo (u,u) se denomina bucle Ejemplo C1 es un ciclo simple C2 es un ciclo no simple C1 X U V W Z Y a c b e d f g h C2 Estructura de Datos

TAD GRAFO: Operaciones Creación del grafo crearGrafo (grafo) Inclusión de vértices insertarVertice(grafo, vertice) Eliminación de vértices borrarVertice(grafo, referenciaVertice) Inclusión de aristas insertarArista(grafo, vertice1, vertice2) Borrar aristas borrarArista(grafo,arista) Recorrido del grafo recorrer(grafo,tipoRecorrido) Estructura de Datos

TAD GRAFO: Operaciones info(referenciaVertice)  Informacion grado(referenciaVertice)  Entero gradoEntrante(referenciaVertice)  Entero gradoSaliente(referenciaVertice)  Entero adyacentes(referenciaVertice)  {referenciaVertice} incidentes{referenciaVertice)  {referenciaVertice} esAdyacente(refenciaVertice1, referenciaVertice2)  Boolean Acceso a los vertices Modificación de vertices asignarInfo(referenciaVertice, valorInformacion) vertices(referenciaArista)  (refVertice, refVertice) destino(referenciaArista)  refVertice origen(referenciaArista)  refVertice etiqueta((referenciaArista)  etiqueta Acceso a las aristas Modificación de aristas asignarEtiqueta(referenciaArista, valorEtiqueta) Estructura de Datos

Representación: matriz de adyacencia Matriz de adyacencias Sea G = (V,A) un grafo de n nodos, suponemos que los nodos V = {u1,...,un} están ordenados y podemos representarlos por sus ordinales {1,2,...,n}. La representación de los arcos se hace con una matriz A de nxn elementos aij definida: 1 si hay arco (ui,uj) aij 0 si no hay arco (ui,uj) Estructura de Datos

Representación: matriz de adyacencia 2 3 5 4 1 2 1 4 3 2 3 5 4 1 6 0 1 0 0 0 0 0 2 0 0 0 6 0 0 2 0 0 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 1 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 1 1 1 1 0 0 1 1 0 0 0 1 1 0 0 Estructura de Datos

Representación Matriz de adyacencia Listas de adyacencia Poco eficiente si el nº de vértices varía a lo largo del tiempo de vida del grafo Puede darse el caso de que el nº de vértices sea mayor del previsto inicialmente Poco eficiente cuando el grafo tiene pocos arcos (la matriz es “dispersa”) Listas de adyacencia Representar una lista de todos los vértices Cada objeto vértice guarda una lista de adyacencia con un objeto arista para cada vértice alcanzable desde él Estructura de Datos

Representación: listas de adyacencia Ejemplo 1 2 5 4 3 1 3 2 5 4 Estructura de Datos

Representación de Grafos Estructura de Datos

Recorridos Primero en profundidad Primero en anchura Visitar vértice inicial vi Visitar vértice adyacente a vi ... proceder así hasta encontrar uno ya visitado... Volver atrás hasta llegar a un vértice con adyacentes sin visitar El recorrido termina cuando volviendo atrás llegamos al vértice innicial vi y no quedan adyacentes por recorrer Primero en anchura Visitar vértice inicial vi Visitar todos los vértices adyacentes a vi Al terminar, comenzar a visitar los adyacentes a los adyacentes a vi ... proceder así hasta que no queden vértices por visitar Estructura de Datos

Recorridos Profundidad Anchura RPP(vi) RPA(vi) { { marcar vi como visitado para cada vk adyacente a v si vk no visitado entonces RPP(vk) } Anchura RPA(vi) { marcar vi como visitado meter vi en cola q mientras cola q no vacía sacar v de cola q para cada vk adyacente a v si vk no visitado entonces marcar vk visitado meter vk en cola q } Estructura de Datos

Recorridos: operaciones auxiliares Marcar vértice como visitado Si los vértices están identificados por algún tipo ordinal, emplear un conjunto que contenga los identificadores de los vértices visitados Encontrar los vértices adyacentes Con matrices de adyacencia: recorrer la fila correspondiente al vértice, buscando columnas a TRUE Con listas de adyacencia: recorrer la lista Cola de vértices visitados en anchura Operaciones del TAD Cola Estructura de Datos

Recorrido primero en profundidad 1 2 3 4 6 7 8 5 10 11 9 13 12 1, 3, 6, 10, 13, 12, 9, 5, 2, 4, 7, 8, 11 Estructura de Datos

Recorrido primero en profundidad 1 2 3 4 5 6 7 8 9 10 11 12 13 1 2 4 3 6 10 7 11 8 5 9 12 13 1 2 3 4 5 6 7 8 9 10 11 12 13 0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 0 Estructura de Datos

Recorrido primero en anchura 1 2 3 4 6 7 8 5 10 11 9 13 12 1, 3, 4, 2, 6, 7, 8, 5, 10, 11, 9, 13, 12 Estructura de Datos

Recorrido primero en anchura 1 2 3 4 5 6 7 8 9 10 11 12 13 1 2 3 4 5 6 7 8 9 10 11 12 13 1 2 3 4 5 6 7 8 9 10 11 12 13 0 1 1 1 0 0 0 0 0 0 0 0 0 1 0 0 1 1 0 0 0 0 0 0 0 0 1 0 0 1 0 1 1 0 0 0 0 0 0 1 1 1 0 0 1 1 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 1 1 0 0 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 1 1 1 0 Estructura de Datos

Árbol reducido/de expansión Un árbol puede verse como un caso particular de un grafo: un grafo conexo acíclico Para obtener el árbol reducido de un grafo hay que eliminar todas las aristas que producen ciclos, pero manteniéndolo conexo Aplicación: encaminamiento en redes de comunicaciones No existe un único árbol reducido de un grafo, pues dependerá del nodo de partida y de la forma de recorrerlo Cuando el grafo es valorado, puede calcularse el árbol de expansión de coste mínimo grafo Árbol de expansión Estructura de Datos

Árbol reducido (anchura) 1 2 3 4 6 7 8 5 10 11 9 13 12 Estructura de Datos

Árbol reducido (profundidad) 1 2 3 4 6 7 8 5 10 11 9 13 12 Estructura de Datos

Árbol reducido: Kruskal Algoritmo de Kruskal Para grafos no dirigidos, valorados, de n vértices El árbol reducido tiene n-1 aristas Obtención: Partir de un grafo G sin aristas y añadir una cada vez, hasta tener n-1 aristas Ir suprimiendo aristas del grafo de forma que no contenga ningún ciclo y siga siendo conexo Seleccionar cada vez la de menor peso Algoritmo: Inicializar arbol(A) para cada vi  G Incluir vértice vi en A mientras Nº aristas(A) < n-1 Seleccionar arista a de G con menos peso; Eliminar arista a de G; si a no forma ciclo en A entonces Incluir arista a en A; Estructura de Datos

Caminos de longitud mínima: Dijkstra Algoritmo de Dijkstra Determina el camino de longitud mínima entre un vértice origen y todos los posibles destinos Válido para grafos dirigidos y no dirigidos Descripción Asigna etiquetas temporales a cada vértice, que son cotas superiores de las distancias mínimas del vértice origen a cada uno de los demás Las etiquetas temporales se van convirtiendo en permanentes en cada iteración, representando entonces la distancia mínima del origen a cada vértice Comienza con etiqueta permanente = 0 para el vértice origen y etiquetas temporales = distancia directa desde el origen al resto Si no existe arco directo desde el origen, su distancia es  Estructura de Datos

Caminos de longitud mínima: Dijkstra Algoritmo: Asignar etiqueta permanente = 0 al vértice origen Asignar etiquetas temporales a los n-1 vértices restantes igual a dij si  conexión directa  si no  conexión directa Hacer permanente la mínima de las etiquetas temporales. Si hay varias, elegir una arbitraria Sea j el vértice que ha recibido la etiqueta permanente en el paso anterior. La nueva etiqueta temporal de cada vértice i será = min(etiquetai, etiquetaj + dij) Hacer permanente la mínima de todas las etiquetas temporales. Si hay varias, elegir una arbitraria. Si la elegida es la del vértice destino, parar. Si no, volver al paso 4. Estructura de Datos