You are on page 1of 30

Tema 6: Estructuras de datos para Grafos

Estructura de Datos Ingeniera de Informtica

Introduccin

Los grafos sirven para representar relaciones arbitrarias (no necesariamente jerrquicas) entre objetos de datos
PLAZA DE CASTILLA

GUZMAN EL BUENO

CUATRO CAMINOS

NUEVOS MINISTERIOS

AVDA. DE AMRICA CANAL GREGORIO MARAN

Estructura de Datos

Grafos - 2

Introduccin: aplicaciones

Circuitos electrnicos
Tarjetas impresas Circuitos integrados

lab-a01

Lab-a02 it.uc3m.es

Redes de transporte
Autopistas Vuelos
inf.uc3m.es

Redes de ordenadores
LANs Internet Web
rediris.net

uc3m.es telefonica.net

Bases de datos
Diagramas entidad/relacin
pablo

otro.net juan david

Estructura de Datos

Grafos - 3

Fundamentos: definiciones

Un grafo consiste en un conjunto de vrtices 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 estn 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 vrtices adyacentes. Un arco tiene, a veces, asociado un factor de peso, en cuyo caso se dice que es un grafo valorado.

Estructura de Datos

Grafos - 4

Fundamentos: grafos dirigidos


b
Grafo no dirigido V(G1) = {a,b,c,d} A(G1) = {(a,b),(a,d),(b,c),(b,d)}

d
a c 3

Grafo dirigido V(G2) = {1,3,5,7,9} A(G2) = {(1,3),(3,1),(9,1), (3,5),(5,7)}

9 1 7

Estructura de Datos

Grafos - 5

Fundamentos

Grado de un nodo
En un grafo no dirigido
Grado de un nodo u = n de aristas que contienen a u

En un grafo dirigido
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 conexo
Estructura de Datos

grafo no conexo con dos componentes conexas


Grafos - 6

Fundamentos: camino

Un camino P de longitud n en el grafo G desde u0 a un es la secuencia de n+1 vrtices P = (u0, u1, ..., un) tal que (ui,ui+1) V son arcos de G para 0 i n a Un camino es simple si todos d los nodos que forman el U P2 camino son distintos, pudiendo c ser iguales los extremos del camino W Ejemplo:
P1 es simple P2 no es simple

P1 X

g
f

Estructura de Datos

Grafos - 7

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 vrtices y arcos son distintos Un arco que va desde un vrtice a s mismo (u,u) se denomina bucle Ejemplo
C1 es un ciclo simple C2 es un ciclo no simple

a U c

V d C2

b X e h C1 g Y Z

W f

Estructura de Datos

Grafos - 8

TAD GRAFO

Composicin:
<grafo> :: = {<vertice>} + {<arista>} <vertice> ::= <<refVertice>> + [<<info>>] <arista> ::= <<refVertice>> + <<refVertice>>
<grafoEtiquetado> :: = {<vertice>} + {<aristaEtiquetada>} <vertice> ::= <<refVertice>> + [<<info>>] <aristaEtiquetada> ::= <<refVertice>> + <<refVertice>> + <<etiqueta>>

Estructura de Datos

Grafos - 9

TAD GRAFO: Operaciones


Creacin del grafo
crearGrafo (grafo) insertarVertice(grafo, vertice) borrarVertice(grafo, referenciaVertice) insertarArista(grafo, vertice1, vertice2)

Inclusin de vrtices
Eliminacin de vrtices Inclusin de aristas

Borrar aristas
Recorrido del grafo

borrarArista(grafo,arista)
recorrer(grafo,tipoRecorrido)

Estructura de Datos

Grafos - 10

TAD GRAFO: Operaciones


Acceso a los vertices
info(referenciaVertice) Informacion grado(referenciaVertice) Entero gradoEntrante(referenciaVertice) Entero gradoSaliente(referenciaVertice) Entero adyacentes(referenciaVertice) {referenciaVertice} incidentes{referenciaVertice) {referenciaVertice} esAdyacente(refenciaVertice1, referenciaVertice2) Boolean asignarInfo(referenciaVertice, valorInformacion)

Modificacin de vertices

Acceso a las aristas

vertices(referenciaArista) (refVertice, refVertice) destino(referenciaArista) refVertice origen(referenciaArista) refVertice etiqueta((referenciaArista) etiqueta asignarEtiqueta(referenciaArista, valorEtiqueta)

Modificacin de aristas
Estructura de Datos

Grafos - 11

Representacin: matriz de adyacencia

Matriz de adyacencias Sea G = (V,A) un grafo de n nodos, suponemos que los nodos V = {u1,...,un} estn ordenados y podemos representarlos por sus ordinales {1,2,...,n}. La representacin 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) Optimizacin Usar la diagonal principal de la matriz de adyacencia para representar la existencia de un vrtice

Estructura de Datos

Grafos - 12

Representacin: matriz de adyacencia


3 1 2 4
0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 1 0 0 1 0 0
0 1 1 1 1 0 0 1

1 5 2 3
1 0 0 0 1 1 0 0

3 4
1

1 2

2 6 1

4
0 0 0 0 0 1 0 6 0 0 0 2 0 0 0 0 0 0 0 1 0 0 2 0 0

Estructura de Datos

Grafos - 13

Representacin

Matriz de adyacencia
Poco eficiente si el n de vrtices vara a lo largo del tiempo de vida del grafo Puede darse el caso de que el n de vrtices 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 vrtices Cada objeto vrtice guarda una lista de adyacencia con un objeto arista para cada vrtice alcanzable desde l

Estructura de Datos

Grafos - 14

Representacin: listas de adyacencia

Ejemplo 3 2

1 2 3

3 3 1

5
4

4 5 1 2 4

Estructura de Datos

Grafos - 15

Recorridos

Primero en profundidad
Visitar vrtice inicial vi Visitar vrtice adyacente a vi ... proceder as hasta encontrar uno ya visitado... Volver atrs hasta llegar a un vrtice con adyacentes sin visitar El recorrido termina cuando volviendo atrs llegamos al vrtice innicial vi y no quedan adyacentes por recorrer

Primero en anchura
Visitar vrtice inicial vi Visitar todos los vrtices adyacentes a vi Al terminar, comenzar a visitar los adyacentes a los adyacentes a vi ... proceder as hasta que no queden vrtices por visitar

Estructura de Datos

Grafos - 16

Recorridos

Profundidad

Anchura

RPP(vi) { marcar vi como visitado para cada vk adyacente a v si vk no visitado entonces RPP(vk) }

RPA(vi) { marcar vi como visitado meter vi en cola q mientras cola q no vaca 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

Grafos - 17

Recorridos: operaciones auxiliares

Marcar vrtice como visitado


Si los vrtices estn identificados por algn tipo ordinal, emplear un conjunto que contenga los identificadores de los vrtices visitados

Encontrar los vrtices adyacentes


Con matrices de adyacencia: recorrer la fila correspondiente al vrtice, buscando columnas a TRUE Con listas de adyacencia: recorrer la lista

Cola de vrtices visitados en anchura


Operaciones del TAD Cola

Estructura de Datos

Grafos - 18

Recorrido primero en profundidad


2 1

6
10

1
4
9 11

7
12

10
4

11
5

8
8

13

12

1, 3, 6, 10, 13, 12, 9, 5, 2, 4, 7, 8, 11


Estructura de Datos Grafos - 19

Recorrido primero en profundidad


1 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 2 1 0 0 1 1 0 0 0 0 0 0 0 0 3 1 0 0 1 0 1 1 0 0 0 0 0 0 4 1 1 1 0 0 1 1 1 0 0 0 0 0 5 0 1 0 0 0 0 0 1 1 0 0 0 0 6 0 0 1 1 0 0 0 0 0 1 0 0 0 7 0 0 1 1 0 0 0 0 0 1 0 0 0 8 0 0 0 1 1 0 0 0 0 0 1 0 0 9 10 11 12 13 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

1 2 4 3 6 10 7 11 8 5 9 12 13
Grafos - 20

Estructura de Datos

Bsqueda primero en profundidad

Animacin
a c d a c d e d e b d a c e d b a c e b d a c e b a c e b b

Recorrido primero en anchura


4 1

3
2

1
3

7
4
6 9

10
11

11

8 2
7

13

10

12

12

1, 3, 4, 2, 6, 7, 8, 5, 10, 11, 9, 13, 12


Estructura de Datos Grafos - 22

Bsqueda primero en anchura

Animacin
0 a
c b 0 a 1 c 1 b

d 0
a

1d 1 b
1 c

1d

Recorrido primero en anchura


1 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 2 1 0 0 1 1 0 0 0 0 0 0 0 0 3 1 0 0 1 0 1 1 0 0 0 0 0 0 4 1 1 1 0 0 1 1 1 0 0 0 0 0 5 0 1 0 0 0 0 0 1 1 0 0 0 0 6 0 0 1 1 0 0 0 0 0 1 0 0 0 7 0 0 1 1 0 0 0 0 0 1 0 0 0 8 0 0 0 1 1 0 0 0 0 0 1 0 0 9 10 11 12 13 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

1 2 3 4 5 6 7 8 9 10 11 12 13
Grafos - 24

Estructura de Datos

rbol reducido/de expansin

Un rbol puede verse como un caso particular de un grafo: un grafo conexo acclico Para obtener el rbol reducido de un grafo hay que eliminar todas las aristas que producen ciclos, pero mantenindolo conexo
Aplicacin: encaminamiento en redes de comunicaciones

grafo

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 expansin de coste mnimo

rbol de expansin

Estructura de Datos

Grafos - 25

rbol reducido (anchura)


3 1 4 8 2 5 9

6
7 10

11

13

12

Estructura de Datos

Grafos - 26

rbol reducido (profundidad)


3 1 4 8 2 5 9 6 7 10

11

13

12

Estructura de Datos

Grafos - 27

rbol reducido: Kruskal

Algoritmo de Kruskal
Para grafos no dirigidos, valorados, de n vrtices El rbol reducido tiene n1 aristas

Algoritmo:
Inicializar arbol(A) para cada vi G Incluir vrtice 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;

Obtencin:
Partir de un grafo G sin aristas y aadir una cada vez, hasta tener n-1 aristas Ir suprimiendo aristas del grafo de forma que no contenga ningn ciclo y siga siendo conexo Seleccionar cada vez la de menor peso

Estructura de Datos

Grafos - 28

Caminos de longitud mnima: Dijkstra

Algoritmo de Dijkstra
Determina el camino de longitud mnima entre un vrtice origen y todos los posibles destinos Vlido para grafos dirigidos y no dirigidos

Descripcin
Asigna etiquetas temporales a cada vrtice, que son cotas superiores de las distancias mnimas del vrtice origen a cada uno de los dems Las etiquetas temporales se van convirtiendo en permanentes en cada iteracin, representando entonces la distancia mnima del origen a cada vrtice Comienza con etiqueta permanente = 0 para el vrtice 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

Grafos - 29

Caminos de longitud mnima: Dijkstra

Algoritmo:
1. Asignar etiqueta permanente = 0 al vrtice origen 2. Asignar etiquetas temporales a los n-1 vrtices

restantes igual a

dij si conexin directa si no conexin directa 3. Hacer permanente la mnima de las etiquetas

temporales. Si hay varias, elegir una arbitraria 4. Sea j el vrtice que ha recibido la etiqueta permanente en el paso anterior. La nueva etiqueta temporal de cada vrtice i ser = min(etiquetai, etiquetaj + dij) 5. Hacer permanente la mnima de todas las etiquetas temporales. Si hay varias, elegir una arbitraria. Si la elegida es la del vrtice destino, parar. Si no, volver al paso 4.

Estructura de Datos

Grafos - 30

You might also like