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

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

Transcript of Estructuras de datos para Grafos Estructura de Datos Facultad de Ciencias de la computación BUAP....

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

Estructuras de datos para Grafos

Estructura de DatosFacultad de Ciencias de la computación BUAP.

Verano 2005

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

Estructura de Datos Grafos - 2

Introducción Los grafos sirven para representar relaciones

arbitrarias (no necesariamente jerárquicas) entre objetos de datos

PLAZA DECASTILLA

NUEVOSMINISTERIOS

GREGORIOMARAÑÓN

CANAL

GUZMAN EL BUENO

CUATROCAMINOS

AVDA. DEAMÉRICA

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

Estructura de Datos Grafos - 3

juan

davidpablo

uc3m.es

otro.net

inf.uc3m.es

rediris.nettelefonica.net

it.uc3m.es

Lab-a02lab-a01

Introducción: aplicaciones

Circuitos electrónicosTarjetas impresasCircuitos integrados

Redes de transporteAutopistasVuelos

Redes de ordenadoresLANsInternetWeb

Bases de datosDiagramas entidad/relación

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

Estructura de Datos Grafos - 4

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.

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

Estructura de Datos Grafos - 5

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

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

Estructura de Datos Grafos - 6

Fundamentos: grafos dirigidos

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

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

(3,5),(5,7)}

a

b

d

c

1

3

5

7

9

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

Estructura de Datos Grafos - 7

Fundamentos Grado de un nodo

En un grafo 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 conexosUn grafo no dirigido es conexo si existe un camino entre cualquier par de nodos que forman el grafoEjemplos:

grafo conexografo no conexo con dos componentes conexas

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

Estructura de Datos Grafos - 8

Fundamentos: camino 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

XU

V

W

Z

Y

a

c

b

e

d

f

g

hP2

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

Estructura de Datos Grafos - 9

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

EjemploC1 es un ciclo simple

C2 es un ciclo no simple

C1

XU

V

W

Z

Y

a

c

b

e

d

f

g

hC2

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

Estructura de Datos Grafos - 10

TAD GRAFO: Operaciones

recorrer(grafo,tipoRecorrido)Recorrido del grafo

borrarArista(grafo,arista)

borrarVertice(grafo, referenciaVertice) Eliminación de vértices

insertarVertice(grafo, vertice)

crearGrafo (grafo)Creación del grafo

Inclusión de vértices

Borrar aristas

insertarArista(grafo, vertice1, vertice2)Inclusión de aristas

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

Estructura de Datos Grafos - 11

TAD GRAFO: Operaciones

asignarInfo(referenciaVertice, valorInformacion)

Modificación de vertices

info(referenciaVertice) Informaciongrado(referenciaVertice) EnterogradoEntrante(referenciaVertice) EnterogradoSaliente(referenciaVertice) Enteroadyacentes(referenciaVertice) {referenciaVertice}incidentes{referenciaVertice) {referenciaVertice}esAdyacente(refenciaVertice1, referenciaVertice2) Boolean

Acceso a los vertices

asignarEtiqueta(referenciaArista, valorEtiqueta)

Modificación de aristas

vertices(referenciaArista) (refVertice, refVertice)

destino(referenciaArista) refVerticeorigen(referenciaArista) refVerticeetiqueta((referenciaArista) etiqueta

Acceso a las aristas

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

Estructura de Datos Grafos - 12

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)

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

Estructura de Datos Grafos - 13

Representación: matriz de adyacencia

2

1

4

3

2

3

5

4

1

0 1 1 11 0 0 11 0 0 01 1 0 0

0 1 0 0 00 0 1 0 00 1 0 0 10 0 0 0 00 0 0 1 0

2

3

5

4

1

1

2

6

2

1

0 1 0 0 00 0 2 0 00 6 0 0 20 0 0 0 00 0 0 1 0

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

Estructura de Datos Grafos - 14

Representación Matriz de adyacencia

Poco eficiente si el nº de vértices varía a lo largo del tiempo de vida del grafoPuede darse el caso de que el nº de vértices sea mayor del previsto inicialmentePoco eficiente cuando el grafo tiene pocos arcos (la matriz es “dispersa”)

Listas de adyacenciaRepresentar una lista de todos los vérticesCada objeto vértice guarda una lista de adyacencia con un objeto arista para cada vértice alcanzable desde él

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

Estructura de Datos Grafos - 15

Representación: listas de adyacencia Ejemplo

1

3

2

5

4

1

2

5

4

3

3 4

3

1

1 2 4

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

Estructura de Datos Grafos - 16

Representación de Grafos

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

Estructura de Datos Grafos - 17

Recorridos Primero en profundidad

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 visitarEl recorrido termina cuando volviendo atrás llegamos al vértice innicial vi y no quedan adyacentes por recorrer

Primero en anchuraVisitar 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

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

Estructura de Datos Grafos - 18

Recorridos Profundidad

RPP(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

}

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

Estructura de Datos Grafos - 19

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 adyacentesCon matrices de adyacencia: recorrer la fila correspondiente al vértice, buscando columnas a TRUECon listas de adyacencia: recorrer la lista

Cola de vértices visitados en anchuraOperaciones del TAD Cola

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

Estructura de Datos Grafos - 20

Recorrido primero en profundidad

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

1

2

3

4

6

7

8

5

10

11

9

13

12

1

10

2

11

6

8

3

9

7

4

5

12

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

Estructura de Datos Grafos - 21

Recorrido primero en profundidad

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 01 0 0 1 0 1 1 0 0 0 0 0 01 1 1 0 0 1 1 1 0 0 0 0 00 1 0 0 0 0 0 1 1 0 0 0 00 0 1 1 0 0 0 0 0 1 0 0 00 0 1 1 0 0 0 0 0 1 0 0 00 0 0 1 1 0 0 0 0 0 1 0 00 0 0 0 1 0 0 0 0 0 1 1 00 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 10 0 0 0 0 0 0 0 1 0 0 0 10 0 0 0 0 0 0 0 0 1 1 1 0

12436

107

11859

1213

123456789

10111213

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

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

Estructura de Datos Grafos - 22

Recorrido primero en anchura

1

2

3

4

6

7

8

5

10

11

9

13

12

1

2

3

4

5

6

7

8

9

10

11

12

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

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

Estructura de Datos Grafos - 23

Recorrido primero en anchura

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 01 0 0 1 0 1 1 0 0 0 0 0 01 1 1 0 0 1 1 1 0 0 0 0 00 1 0 0 0 0 0 1 1 0 0 0 00 0 1 1 0 0 0 0 0 1 0 0 00 0 1 1 0 0 0 0 0 1 0 0 00 0 0 1 1 0 0 0 0 0 1 0 00 0 0 0 1 0 0 0 0 0 1 1 00 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 0 0 0 0 1 1 1 0 0 10 0 0 0 0 0 0 0 1 0 0 0 10 0 0 0 0 0 0 0 0 1 1 1 0

123456789

10111213

123456789

10111213

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

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

Estructura de Datos Grafos - 24

Á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

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

Estructura de Datos Grafos - 25

Árbol reducido (anchura)

1

2

3

4

6

7

8

5

10

11

9

13

12

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

Estructura de Datos Grafos - 26

Árbol reducido (profundidad)

1

2

3

4

6

7

8

5

10

11

9

13

12

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

Estructura de Datos Grafos - 27

Árbol reducido: Kruskal Algoritmo de Kruskal

Para grafos no dirigidos, valorados, de n vérticesEl á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 aristasIr suprimiendo aristas del grafo de forma que no contenga ningún ciclo y siga siendo conexoSeleccionar cada vez la de menor peso

Algoritmo:Inicializar arbol(A)para cada vi G

Incluir vértice vi en Amientras Nº aristas(A) < n-1

Seleccionar arista a de G con menos peso;Eliminar arista a de G;si a no forma ciclo en Aentonces

Incluir arista a en A;

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

Estructura de Datos Grafos - 28

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 destinosVálido para grafos dirigidos y no dirigidos

DescripciónAsigna 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ásLas etiquetas temporales se van convirtiendo en permanentes en cada iteración, representando entonces la distancia mínima del origen a cada vérticeComienza con etiqueta permanente = 0 para el vértice origen y etiquetas temporales = distancia directa desde el origen al restoSi no existe arco directo desde el origen, su distancia es

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

Estructura de Datos Grafos - 29

Caminos de longitud mínima: Dijkstra Algoritmo:

1. Asignar etiqueta permanente = 0 al vértice origen2. Asignar etiquetas temporales a los n-1 vértices

restantes igual adij si conexión directa si no conexión directa

3. Hacer permanente la mínima de las etiquetas temporales. Si hay varias, elegir una arbitraria

4. 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)

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