Está en la página 1de 9

10/08/2011

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

Karim Guevara Puente de la Vega

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?

Algunos ejemplo de problemas prcticos:


Ayudar a motores de bsqueda a localizar informacin relevante en la Web Descubrir cul es la ruta ms corta para visitar las principales ciudades de una regin turstica

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

P.e.: red de computadores

Los vrtices se representan como puntos y las aristas como lneas entre vrtices Ejemplo:

G = (V,E) V = {a,b,c,d } E = {{a,b}, {b,c}, {a,c}, {a,d}, {d,b} }

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

Si el orden influye en la aristas se habla de grafos dirigidos:

En este caso a las aristas se les llama arcos y se representan como pares para indicar el orden:

Dos representaciones del mismo grafo


G = ({a,b,c,d,e,f},{{a,b},{a,e},{a,f}{e,f},{b,c},{c,d},{e,d},{d,f}})

V = { a,b,c,d,e} A ={(e,a), (a,b), (b,a), (d,a), (c,d), (d,c),(b,c),(c,b) }

Tipos de grafos
9
10 10

Tipos de grafos

Puede existir aristas de un vrtice para el mismo llamadas de self-loops.

Si se permite que haya ms de una arista se habla de multigrafos:

En un grafo no dirigido no se permiten los self-loops

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

Al valor numrico asociado se le llama coste de la arista

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)

Propiedad 1: Sea G=(V,A) un grafo. Entonces: deg(v) = 2|A|


v V

P.e.:

cada arista es contada dos veces

Propiedad 2: en un grafo no dirigido sin ciclos y aristas no mltiples

cada vrtice tiene grado al menos (n-1)


n =4 m=6 deg(v) = 3

deg(a)+deg(b)+deg(c)+deg(d)+deg(e)+deg(f) = 3+4+5+2+4+4 = 22 2|A| = 2 ____ = _____

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

Nota: A menudo slo se consideran ciclos para n3

Pregunta: Cuntas aristas tiene en general Kn?

10/08/2011

Conceptos bsicos
19 19 20 20

Conceptos bsicos

Ruta o camino:

Ciclo

Secuencia de vrtices y aristas alternativamente

Secuencia circular de vrtices y aristas alternativamente Es aquel tal que todos sus vrtices y aristas son distintos

Camino simple:

ciclo simple:

Camino tal que todos sus vertices y aristas son distintos

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

TAD Graph: Principales mtodos


21 21

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.

Matriz de Estructuras de Adyacencia

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

Matriz de Estructuras de Adyacencia

La matriz de adyacencia tambin permite representar grafos valorados

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

Lista de Estructuras de Adyacencia


Lista de Estructura de arista Secuencia de incidencia para cada vrtice:

Matriz de Estructuras de Adyacencia


Lista de estructura de arista Objetos vrtices

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

Anteriormente, 1 si hay arista y 0 si no lo hay

Bsqueda en Profundidad Primero DFS


27 27 28 28

Bsqueda en Profundidad Primero DFS

Subgrafos

Subgrafos

Sea G=(V,A). G=(V,A) se dice subgrafo de G si:


1. 2. 3.

P.e.:

V V A A (V,A) es un grafo

Resultado fcil de comprobar:


Si G=(V,A) es subgrafo de G, para todo v G se cumple deg(G,v) deg(G,v) G1 y G2 son subgrafos de G

Bsqueda en Profundidad Primero DFS


29 29 30 30

Bsqueda en Profundidad Primero DFS

Subgrafos

Subgrafos
Un grafo se dice cclico cuando contiene algn ciclo como subgrafo P.e.:

Un subgrafo expandido de G es un subgrafo que contiene todos los vrtices de G.

Contiene dos ciclos de long. 3: {a,e,f,a} y {_, _, _, _} Contiene un ciclo de longitud 6: {_,_,_,_,_,_,_} Contiene algn ciclo ms? ___

10/08/2011

Bsqueda en Profundidad Primero DFS


31 31 32 32

Bsqueda en Profundidad Primero DFS

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.

Un grafo no dirigido es conectado si l tiene exactamente un componente conectado.

Grafo no conectado con dos componentes conectadas

Bsqueda en Profundidad Primero DFS


33 33 34 34

Bsqueda en Profundidad Primero DFS

rboles y Forestas

Un rbol es un grafo no dirigido T tal que:


T es conectado T no tiene ciclos

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

Bsqueda en Profundidad Primero DFS


35 35 36 36

Bsqueda en Profundidad Primero DFS

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

El algoritmo DFS es similar a una clsica estrategia para explorara un laberinto


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

El algoritmo usa un mecanismo de etiquetas para los vrtices y aristas

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

Bsqueda en Profundidad Primero DFS

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

Encontrar una ruta Path Finding


41 41 42 42

Encontrar un ciclo Cycle Finding


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

Bsqueda en Amplitud Primero (BFS)


43 43 44 44

Algoritmo BFS

Es una tecnica general para recorrer un grafo

El algoritmo usa etiquetas en las aristas y vrtices

El recorrido BFS de un grafo G:


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

DFS vs. BFS


49 49 50 50

DFS vs. BFS

También podría gustarte