GRAFOS ESTRUCTURAS DE DATOS.

Slides:



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

5. Estructuras no lineales estáticas y dinámicas
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.
GRAFOS: ALGORITMOS FUNDAMENTALES
ÁRBOLES EN C UNIVERSIDAD “ALONSO DE OJEDA” Facultad de Ingeniería
TDA LISTA ESTRUCTURAS DE DATOS.
Unidad 5 Listas Enlazadas Bibliografía: Algoritmos y Estructuras de datos de Aguilar y Martinez. Unidad 9 Autor: Ing Rolando Simon Titiosky.
1 Extensión de un Estructura de Datos Agustín J. González ELO-320: Estructura de Datos y Algoritmos.
Programación y Estructuras de Datos
MATEMÁTICAS DISCRETAS.
Investigación de Operaciones II
Operaciones sobre un árbol
Tema 5 Grafos. Implementación (I)..
Tema 5 Grafos. Recorridos..
Tema 4 Árboles. Árbol sobre matriz.
ESTRUCTURAS DE DATOS AVANZADAS
RafaC - Matemática Discreta - UCM 07/08
Solución de problemas por búsqueda inteligente
Cont. Arbol Binario de Búsqueda

Definiciones: conjuntos, grafos, y árboles
ARBOLES PARCIALMENTE ORDENADOS ESTRUCTURAS DE DATOS.
APLICACIONES DE PILAS Estructuras de Datos.
Teoría de Grafos.
Analisis y Diseño de Algoritmos Tema: Grafos 3ra Parte
AED I. Estructuras de Datos.
Cecilia Laborde González
GRAFOS HUGO ARAYA CARRASCO.
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
Material de apoyo Unidad 4 Estructura de datos
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
ÁRBOLES BINARIOS DE BÚSQUEDA
C++ LISTAS C++ 11/04/2017 Ing. Edgar Ruiz Lizama.
Definiciones: conjuntos, grafos, y árboles
Heaps Mauro Maldonado Abril/2005. Introducción La estructura heap es frecuentemente usada para implementar colas de prioridad. En este tipo de colas,
ARBOLES ESTRUCTURAS DE DATOS.
7.  El TDA Diccionario.
Single-Source Shortest Paths “Camino más corto desde/hacia una fuente”
Estructura de Datos y Algoritmos
Diseño y análisis de algoritmos
Diseño y análisis de algoritmos
Árboles binarios de búsqueda

ARBOLES ESTRUCTURAS DE DATOS.
Agustín J. González ELO-320: Estructura de Datos y Algoritmos

Árboles Recomendado: 1. Nivelación Funciones
Árboles Binarios Estructuras de Datos.
Agustín J. González ELO320: Estructura de Datos y Algoritmos
Estructuras de datos para Grafos
Grafos..
Tópicos I Árboles, montículos y 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)
Unidad 6: Árboles.
Definiciones: conjuntos, grafos, y árboles
Agustín J. González ELO-320: Estructura de Datos Y Algoritmos
Minimum Spanning Tree (Árbol de Expansión Mínima)
Estructura de Datos 4 Grafos Dirigidos
UNIDAD 2 Grafos Árboles abarcadores mínimos Caminos más cortos.
ARBOLES GENERALIZADOS
Matemáticas Discretas MISTI
GRAFOS ESTRUCTURAS DE DATOS.
GRAFOS ESTRUCTURA DE DATOS. INTRODUCCION Los grafos son estructuras de datos Representan relaciones entre objetos Relaciones arbitrarias, es decir No.
Transcripción de la presentación:

GRAFOS ESTRUCTURAS DE DATOS

Componentes conexas: entre ellas son conexas De un grafo no dirigido Se pude saber si es conexo Si no lo es se pueden conocer sus Componentes Conexas Conjunto W, de vértices del grafo En el cual hay camino desde cualquier V1 a cualquier V2 Donde V1 y V2 pertenecen a W Componentes conexas: entre ellas son conexas CONEXO A C B D E A C B D E No CONEXO

ALGORTIMO: DETERMINAR CONEXIÓN Si entre todos los vértices, hay camino Un recorrido desde cualquier vértice Visitara a TODOS los vértices del grafo Si no Tendremos una componente conexa Conjunto de vértices recorrido Para descubrir otras Repetir recorrido desde un vértice no visitado Hasta que todos los vértices hayan sido visitados

EJEMPLO A B E A B E C D C D Componente Conexa W1 Recorrido desde E Recorrido desde B Conjunto recorridos = Conjunto de Vertices Es CONEXO B A

Las componentes forman una Lista de Listas IMPLEMENTACION No olvidar: Luego de recorrer, obtendremos un conjunto de vertices LRecorrido bool ComponentesConexas(Grafo G, LSE *LComponentes){ Vertice *V; LSE *LRecorrido; while(TRUE){ V = BuscarVerticeNoVisitado(G); if(!V) break; LRecorrido = RecorrerAnchura(G,*V); LSE_InsertarNodoFin(LComponentes, LSE_CrearNodo(LRecorrido)); } if(LComponentes->header == LComponentes->last) return TRUE; return FALSE; Las componentes forman una Lista de Listas

COMPONENTES FUERTEMENTE CONEXAS De un grafo DIRIGIDO Se puede saber si es FUERTEMENTE CONEXO Si no lo es se pueden conocer sus Componentes Fuertemente Conexas Conjunto W, de vertices del grafo En el cual hay camino desde cualquier V1 a cualquier V2 Donde V1 y V2 pertenecen a W No CONEXO 4 5 6 8 C F H B S Componentes CONEXO

ALGORITMO Dado un Vo, se desea conocer Los vertices a los que se puede llegar (D) Los vertices que llegan a Vo (A) Si D interseccion A = V entonces Hay camino entre cualquier par de vertices Fuertemente conexo Si no Tendremos una componente conexa Conjunto de vertices recorrido Para descubrir otras Repetir recorrido desde vertice que no sea elemento de una C.F.C. Hasta que todos los vertices esten en C.F.C

EJEMPLO C B H F S W = D  A C B W1 = {B, C, S} W2 = {H} W3 = {F} H W <> V, Componente F.C. F S 1) Recorrer desde B (Descendientes) 1) Recorrer desde H (Descendientes) 1) Recorrer desde F (Descendientes) D = B S C D = H F C B S D = F C B S 2) Invertir Direcciones 3) Recorrer desde B (Ascendientes) 3) Recorrer desde H (Ascendientes) 3) Recorrer desde F (Ascendientes) A = B C F H S A = H A = F H

PUNTOS DE ARTICULACION En un grafo no dirigido conexo Existen vertices que si se eliminan “Desconectan” al Grafo Lo dividen en componentes conexas Estos vertices “clave” Son puntos de articulacion Si un grafo no tiene P.A. Es biconexo La conectividad de un grafo Es el numero de nodos que se necesitan eliminar Para dejar a un grafo “desconectado”

EJEMPLO A D C B E F Puntos de Articulacion

ARBOL DE EXPANSION Para poder calcular los P.A. de un grafo Hay que obtener el arbol de expansion Este se obtiene A partir del Recorrido en Profundidad Ejemplo A C D F A B E C E Arco en Retroceso: Cuando se quiere visitar un nodo que ya ha sido visitado y no es el padre D B F

COMO REPRESENTAR EL ARBOL DE EXPANSION Un arbol en expansion No es un arbol binario Cada Vertice puede tener 0, 1 o n hijos Si sabemos que CADA VERTICESOLO TIENE UN PADRE Si no tomamos en cuenta los Arcos en Retroceso La representacion depende del Grafo Matriz de Ady -> Usar un arreglo o Lista de Ady -> Una lista La representacion mostrará Quien es el padre de cada nodo

ARBOL DE EXPANSION CON MATRIZ DE ADY. Los vertices del grafo Se encuentran en un arreglo Cada indice del arreglo Representa un vertice Ej: A – 0, B – 1, etc Al representar el arbol de expansion El padre(indice) de cada nodo Puede almacenarse en un arreglo Que tambien represente a los vertices A B C E D F 4 5 2 A 1 B 2 C 3 D 4 E 5 F typedef struct TVertices{ Generico V[MAX]; int Padres[MAX]; int nvertices; }Vertices;

ARBOL DE EXP. CON LISTA DE ADYACENCIA Los vertices del grafo Se encuentran en una lista Cada nodo Representa un vertice Al representar el arbol de expansion De cada nodo de esta lista Solo nos interesa conocer al padre Se puede añadir un dato al nodo vertice Un enlace con el padre D F A B C D E F typedef struct Vertice{ Generico Informacion; Vertice *padre; Lista *LArcos; }Vertice;

ALGORITMO: ENCONTRAR P.A. Num(v) se calcula a medida que se genera el Arbol de Expansion Para calcular Bajo(v), se necesita bajar hasta conocer los Bajos(hijos de v) A cada vertice numerarlo De acuerdo al recorrido Se obtiene Num(v) A c/vertice, calcular Bajo(v) Minimo entre Num(v) Num(arco_retroceso de v) Bajo(hijos de v) P.A. son La raiz si tiene >= 2 hijos Vertices para los cuales Algun Bajo(hijo de v) >= Num(v) 1 ,1 Min(1, --, 2) A es P.A. A C es P.A. 2 ,2 3 ,3 D C Min(3, --, 3) F 4 ,3 Min(2, --, --) Min(4, ---, 3) E 5 ,3 B Min(5, ---, 3) 6 ,3 Min(6, 3, ----)

CAMBIOS EN EL ARBOL Tanto Num(v) como Bajo(v) Deben ser parte ahora de la estructura Del arbol typedef struct TVertices{ Generico V[MAX]; int Padres[MAX]; int Num[MAX]; int Bajo[MAX]; int nvertices; }Vertices; typedef struct Vertice{ Generico Informacion; int Num, Bajo; Vertice *padre; Lista *LArcos; }Vertice;

COMO IMPLEMENTAR?? Primero Luego Que representacion se usara? Si es M.A. Usar Arbol de Expansion como un tipo aparte Si es L.A. Usar Grafo para trabajar con Arbol de Exp. Luego Recorrer el grafo Para llenar Num y enlazar a los padres Calcular Bajo Y con esta informacion decidir cual es punto de art.

IMPLEMENTACION CALCULAR NUM y PADRES //Al recorrer, llenar Num y enlazar con los padres void RecorrerParaArbol(Grafo G, Vertice *V, int *vez){ int i; LSE_nodo *p; V->visitado = TRUE; *vez++; ((Vertice *)(p->G))->Num = *vez; for(p = V->LA->header; p!=NULL; p= p->sig){ if(!((Vertice *)(p->G))->Visitado){ RecorrerParaArbol(G, p->G, vez); ((Vertice *)p->G)->padre = V; } Al vertice de origen, marcar como vistado y contarlo, hay que llevar rastreo del aumento del contador

IMPLEMENTACION CALCULAR BAJO //Para calcular el Bajo de Vorigen, calcular Bajo de los hijos(en recorrido9 //Es decir, recorrer otra vez el grafo para poder “bajar” x el mismo void CalcularBajo(Grafo G, Vertice *V ){ int i; LSE_nodo *p; Vertice *Ad; V->visitado = TRUE; V->Bajo = V->Num; for(p = V->LA->header; p!=NULL; p= p->sig){ Ad = Generico_ObtenerVertice(p->G); if(!Ad->Visitado){ CalcularBajo(G, Ad); if(Ad->Bajo < V->Bajo) V->Bajo = A->Bajo; }else if(V->padre!=Ad) if(Ad->Num < V->Bajo) V->Bajo = Ad->Num; } Antes de llamar a esta funcion, el grafo debe de volver a quedar como si no se hubiese recorrido antes Calcular el bajo del hijo, si es menor que el actual, cambiarlo Si ya fue visitado y no es el padre: arco en retroceso

EJERCICIO Escriba una funcion que dado un Grafo permita conocer los puntos de Articulacion del mismo Recuerde que los P.A. son vertices