Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Estructura de Datos I
2
Agenda
GRAFOS
Introduccin Aplicaciones Tipos de grafos Conceptos bsicos TAD Graph Representacin de grafos Bsqueda en Profundidad Primero (DFS) Algoritmo DFS Path Finding Cycle Finding Bsqueda en Amplitud Primero (BFS) Ejercicios
UNSA - 2011
Introduccin
3 4
Aplicaciones
Muchas aplicaciones en computacin necesitan considerar conjunto de conexiones entre pares de objetos
Existe un camino para ir de un objeto a otro siguiendo las conexiones? Cul es la menor distancia entre un objeto y otro? Cuntos objetos pueden ser alcanzados a partir de un determinado objeto?
Existe un tipo abstracto llamado grafo que es usado para modelar tales situaciones.
Tipos de grafos
5 6
Tipos de grafos
Un grafo G es un par (V,E) donde: V ={v1,,vn} es un conjunto de vrtices E = {e1,,em} es un conjunto de aristas,
con cada ek {vi, vj}, con vi, vj V, vi vj
Los vrtices se representan como puntos y las aristas como lneas entre vrtices Ejemplo:
10/08/2011
Tipos de grafos
7 8
Tipos de grafos
Es importante recordar que un mismo grafo puede tener diferentes representaciones grficas P.e.:
En este caso a las aristas se les llama arcos y se representan como pares para indicar el orden:
Tipos de grafos
9
10 10
Tipos de grafos
Tipos de grafos
11 11 12 12
Tipos de grafos
Cuando las aristas tienen un valor numrico asociado se llama de grafos valorados:
Los tipos anteriores pueden combinarse, dando lugar por ejemplo a multigrafos valorados, o grafos dirigidos valorados, etc. En el resto del tema cuando no se diga lo contrario G representar un grafo o multigrafo no dirigido
10/08/2011
Conceptos bsicos
13 13 14 14
Conceptos bsicos
Dos vrtices se dicen adyacentes si existe una arista que los une. Los vrtices que forman una arista son los extremos de la arista. Si v es un extremo de una arista a, se dice que a es incidente con v El grado de un vrtice v, deg(v) es el nmero de aristas incidentes en v. Si hace falta indicar el grafo en el que est v escribiremos deg(G,v)
P.e.:
deg(6)= _______
deg(1) = ________
Conceptos bsicos
15 15 16 16
Conceptos bsicos
Notacin n nmero de vrtices A nmero de aristas (m)
P.e.:
Conceptos bsicos
17 17 18 18
Conceptos bsicos
Para cada n1 se llama grafo completo de orden n, y se representa por Kn, al grafo de n vrtices conectados de todas las formas posibles:
Se llama ciclo de grado n, y se denota Cn, a G=({v1,,vn}, {{v1, v2}, {v2, v3},, {vn-1, vn}, {vn, v1}} )
10/08/2011
Conceptos bsicos
19 19 20 20
Conceptos bsicos
Ruta o camino:
Ciclo
Secuencia circular de vrtices y aristas alternativamente Es aquel tal que todos sus vrtices y aristas son distintos
Camino simple:
ciclo simple:
P.e.:
P1 =(V,b,X,h,Z) es un camino simple P2 =(U,c,W,e,X,g,Y,f,W,d,V) es un camino no simple
P.e.:
C1 =(V,b,X,g,Y,f,W,c,U,a,) es un ciclo simple C2 =(U,c,W,e,X,g,Y,f,W,d,V,a,) es un ciclo no simple
Representacin de grafos
22 22
Mtodos de acceso endVertices(e): un arreglo de dos vrtices finales de e. opposite(v,e): el vrtice opositor de v en e. areAdjacent(v,w): es true ssi v y w son adyacentes replace(v,x): reemplaza el elemento del vrtice v por x. replace(e,x): reemplaza el elemento de la arista e por x. Mtodos de actualizacin insertVertex(o): inserta un vrtice que almacena el elemento o.
En el caso de un grafo no dirigido la matriz ser simtrica. No ocurre lo mismo para grafos dirigidos:
insertEgde(v,w,o): inserta una arista (v,w) que almacena el elemento o. removeVertex(v): elimina el vrtice v (y sus aristas incidentes). removeEdge(e): elimina la arista e.
Mtodos iterators incidentEdges(v): aristas incidentes a v. vertices(): todos los vrtices en el grafo edges(): todas las aristas en el grafo
Se supone que la fila representa el vrtice origen, y la columna el vrtice destino del arco
Representacin de grafos
23 23 24 24
Representacin de grafos
Lista de Estructuras Arista Objeto vrtice Elemento Referencia a la posicin en la secuencia de vrtices. Objeto Arista Elemento Vrtice origen Vrtice destino Referencia a la posicin en la secuencia de aristas Secuencia de vrtices Arreglo de objetos vrtices Secuencia de aristas Arreglo de objetos aristas
El valor guardado es el coste de la arista/arco En lugar de 0, a menudo se emplea un valor especial para indicar que dos vrtices no estn conectados
10/08/2011
Representacin de grafos
25 25 26 26
Representacin de grafos
Secuencia de referencias a objetos arista de las aristas incidentes Referencias a las posiciones asociadas a las secuencias de incidentes de los vrtices finales
Clave entera (ndice) asociada con el vrtice Referencia a objeto arista para vrtices adyacentes NULL para vrtices no adyacentes
Arreglo de adyacencia de 2D
Objeto Arista
Subgrafos
Subgrafos
P.e.:
V V A A (V,A) es un grafo
Subgrafos
Subgrafos
Un grafo se dice cclico cuando contiene algn ciclo como subgrafo P.e.:
Contiene dos ciclos de long. 3: {a,e,f,a} y {_, _, _, _} Contiene un ciclo de longitud 6: {_,_,_,_,_,_,_} Contiene algn ciclo ms? ___
10/08/2011
Conectividad
Un grafo es conectado si hay un camino entre cada par de vrtices Un componente conectado de un grafo G es un subgrafo maximo conectado de G
Conectividad
Un grafo dirigido G = (V, A) es fuertemente conectado si cada 0 1 par de vrtices cualquiera son alcanzables a partir uno del 4 otro Los componentes fuertemente conectados de G son conjuntos de vrtices bajo la relacin son mutuamente alcanzables. 3 2 Un grafo dirigido fuertemente conectado tiene apenas un 5 componente fuerte conectado.
{0,1,2,3}, {4} y {5} son componentes fuertemente conectados, pero no {4,5}
Los componentes conectados son las porciones conectadas de Grafo conectado un grafo.
rboles y Forestas
Bsqueda en profundidad (Depth First Search) es una tcnica general para recorrer un grafo. Un DFS transversal de un grafo G
Visita todos los vrtices y aristas de G Determina si G es conectado Calcula los componentes conectados de G Calcula una foresta expandida de G
Una foresta es un grafo no dirigido sin ciclos rbol Los componentes conectados de una foresta son rboles
Foresta
DFS en un grafo con n vrtices y m aristas es de O(n+m) de tiempo. DFS puede ser ademas extendido para resolver otros problemas de grafos:
Encontrar una ruta entre dos vrtices dados Encontrar un ciclo en un grafo
Marcar cada interseccin o esquina (vrtice) visitado. Marcar cada corredor (arista) atravesado No perder de vista el camino de regreso a la entrada por medio de una cuerda (recursin-pila) .
10/08/2011
Algoritmo DFS
37 37 38 38
Algoritmo DFS
Algorithm DFS(G) Input graph G Output labeling of the edges of G as discovery edges and back edges for all n G.vertices() setLabel(u, UNEXPLORED) for all e G.edges() setLabel(e, UNEXPLORED) for all v G.vertices() if getLabel(v) = UNEXPLORED DFS(G,v)
Algorithm DFS(G, v) Input graph G and a start vertex v of G Output labeling of the edges of G in the connected component of v as discovery edges and back edges setLabel(v, VISITED) for all e G.incidentEdges(v) if getLabel(e) = UNEXPLORED w opposite(v,e) if gerLabel(w) = UNEXPLORED setLabel(e, DISCOVERY) DFS(G,w) else setLabel(e, BACK)
Algoritmo DFS
39 39 40 40
Propiedad 1
DFS(G, v) visita todos los vrtices y aristas en el componente conexo de v Las aristas etiquetadas como descubiertas forman un rbol expandido del componente conexo de v
Propiedad 2
Especializacin del algoritmo DFS para encontrar una ruta entre dos vrtices Invocar DFS(G, u) con u como vrtice inicial Usar una pila S para seguir la pista de las rutas entre el vrtice inicial y el vrtice actual Tan pronto como el vrtice destino z es encontrado, retornar el camino que se tiene en la pila
Especializacin del algoritmo DFS para encontrar un ciclo simple Usar una pila S para seguir la pista del camino entre el vrtice inicial y el actual. Tan pronot como una arista etiquetada como BACK (v,w) es encontrada, retornar el ciclo como la parte que se tiene en la pila de la cima hasta el vrtice w.
10/08/2011
Algoritmo BFS
Visita todos los vertices y aristas de G. Dtermina si G es conexo. Halla los componentes conexos de G Halla una foresta expandida (spanning) a partir de G
El tiempo que toma BFS es O(n+m), m nmero de aristas y n de vrtices Puede ser utilizado para:
Haller una ruta con el mnimo nmero de aristas entre dos vertices dados. Encontrar un ciclo simple, si hay alguno
Algoritmo DFS
45 45 46 46
Algoritmo DFS
Algoritmo DFS
47 47 48 48
Propiedades
Notacin:
Gs: componente conexo de s Li : lista i BFS(G,s) visita todos los vrtices y aristas de Gs. Las aristas etiquetas como descubiertas por BFS(G,s) forman un rbol expandido Ts de Gs. Para cada vrtice v en Li
Propiedad 1:
Propiedad 2:
Propiedad 3:
La ruta en Ts desde s a v tiene i aristas Para toda ruta desde s a v en Gs tiene al menos i aristas
10/08/2011