Professional Documents
Culture Documents
ndice general: 1. Conceptos bsicos sobre Grafos 2. Representacin de un Grafo: Matriz vs Listas de Adyacencia 3. Representacin de un Grafo Ponderado: la clase Adyacente 4. Representacin de un Grafo ponderado y etiquetado: La clase GrafoDEtiquetado. 5. Recorrido en Profundidad (DFS) de un Grafo 6. Recorrido en Amplitud (BFS) de un Grafo
Objetivos
Bibliografa
Estudio de la Representacin de una Relacin Binaria entre los Datos de una Coleccin mediante la estructura Grafo y algunas de sus aplicaciones ms significativas. Reutilizar las Estructuras de Datos empleadas en temas anteriores (Diccionario y Lista con Punto de Inters) y la implementacin de las operaciones de Recorrido y clculo de caminos mnimos sobre l (Modelos Cola y Cola de Prioridad). Implementacin en Java de un Grafo, que supondr el diseo de las clases Adyacente, Vertice, GrafoD, GrafoND y GrafoDEtiquetado (ubicadas en el paquete grafos de estructurasDeDatos).
3
Libro de M.A. Weiss, Estructuras de Datos en Java (AdissonWesley, 2000). Captulo 14, para conceptos sobre Grafos y Grafos Dirigidos Captulo 22, apartado 22.2.3 para el algoritmo de Dijkstra con Montculos de Emparejamiento Aho A.V., Hopcroft J.E., Ullman J.E. Estructuras de datos y Algoritmos. Addison-Wesley, 1988. Captulo 6 para conceptos sobre Grafos y Grafos Dirigidos
Motivacin
Grafo Dirigido
En ocasiones, los elementos de una coleccin tienen una relacin entre ellos que debe ser capturada mediante la Estructura de Datos empleada.
35 10
Ejemplos posibles:
Elementos: Ciudades, Aeropuertos, Computadores de una Red, Puntos de un Plano, etc. Rutas entre ciudades, rutas areas, recorridos tursticos, tareas a realizar en un proyecto, etc.
6
(2,2), (2,4),(2,5),
Se pretende modelar:
Grafo No Dirigido
|V| = 6 |E| = 4
Un Grafo Etiquetado es un grafo G = (V,E) sobre el que se define una funcin f: E A, dnde A es un conjunto cuyas componentes se llaman Etiquetas. Un Grafo Ponderado es un Grafo Etiquetado (sus Aristas) con nmeros Reales. Tambin es posible definir la funcin de etiquetado para los Vrtices, con lo que podemos asignar un nombre a cada Vrtice.
Relaciones de Incidencia
Relaciones de Adyacencia
Sea G = (V,E) un Grafo Dirigido. Si (u,v) E, decimos que Incide Desde u (sale de ..) e Incide En v (llega a ..)
(2, (1, (2, (2, 2) 2) 4) 5) E, E, E, E, incide incide incide incide desde desde desde desde 2 1 2 2 e e e e incide incide incide incide en en en en 2 2 4 5 1 4 2 5 3 6
Sea G = (V,E) un Grafo no Dirigido. Si (u,v) E, decimos que Incide Sobre u y v (1,2) E, (2,1) incide sobre 1 y 2, 2 y 1 (2,5) E, (5,2) incide sobre 2 y 5, 5 y 2 1 4 2 5 3 6
10
Grado de un Vrtice
El Grado de un Vrtice en un Grafo no Dirigido es el nmero de Aristas que Inciden sobre l (Vrtices 1 2 3 Adyacentes).
Un Camino de longitud k desde u a u en un grafo G=(V,E) es una secuencia de Vrtices <v0,v1,..,vk> tal que:
El Grado de 2 es 2
4 5 6
v0 = u y vk = u i : 1..k : (vi-1,vi) E sin pesos es el nmero de Aristas con pesos es la suma de los Pesos de las Aristas del Camino
El nmero de Aristas que salen de l (Grado de Salida) El nmero de Aristas que entran en l (Grado de Entrada) Ejemplos:
2 5
3 6
Ejemplos:
2 5
3 6
11
Un Camino es Simple si todos sus Vrtices intermedios son distintos. Si los extremos son iguales es un Ciclo.
Un Grafo G=(V,E) se puede representar con una Matriz de |V|x|V| boolean. Si (u,v) E, G[u][v] = true; sino G[u][v] = false. 0 1 2 3 4 5
Memoria: O(|V|2) 0 false true false false false false Tiempo de acceso: O(1) 1 false true false true true false
0 1 4 2 5 2 false false false false false false 3 true false false false true false 4 false false false true false false 5 false false true false false false
2 5
3 6
14
Cmo saber si el grafo tiene bucles? Cmo saber el nmero de vrtices? Cmo saber si hay algn vrtice sin adyacentes? Cmo calcular el nmero de adyacentes de un vrtice? Cmo sera la matriz de adyacencia de un grafo no dirigido? Cmo representar un Grafo con aristas ponderadas usando una matriz de adyacencias?
Un Grafo Dirigido G=(V,E) se suele representar con un array de |V| Listas de Vrtices: G[v] es una Lista de los Vrtices Adyacentes a v (v V).
15
16
Un Grafo No Dirigido G=(V,E) se representa con un array de |V| Listas de Vrtices: G[v] es una Lista de los Vrtices Adyacentes a v (v V)
GrafoD
1 5
GrafoDEtiquetado
GrafoND
18
Grafo: Contiene los mtodos comunes a cualquier implementacin de un Grafo. GrafoD: Grafo dirigido con aristas ponderadas. GrafoND: Grafo no dirigido con aristas ponderadas GrafoDEtiquetado: Grafo dirigido con aristas ponderadas y vrtices etiquetados.
17
Sobre la clase Grafo: Su implementacin ir creciendo conforme veamos mtodos de recorrido, clculo de caminos mnimos, etc.
package librerias.estructurasDeDatos.grafos; public abstract class Grafo { public Grafo() { ... } public abstract int numVertices(); public abstract int numAristas(); public abstract boolean existeArista(int i, int j); public abstract double pesoArista(int i, int j);
19
20
de Vrtices sin Etiquetar de Aristas con Pesos, Tripletes de int (origen, destino, coste)
(2,3) |X (2,2) |
La clase Adyacente no se hace pblica puesto que nicamente se utilizar dentro del paquete grafos (acceso friendly nicamente para el resto de clases del paquete).
7 4
21
22
23
1
8
2
9 5
3 6
25
26
de Vrtices con Etiquetas (dato de tipo objeto), i.e. Pares (etiqueta/dato, n vrtice) de Aristas con Pesos
public void insertarArista(int i, int j, int p) { if ( !existeArista(i,j) && i != j) { elArray[i].insertar(new Adyacente(j,p)); elArray[j].insertar(new Adyacente(i,p)); } numA++; } } /* Fin de la clase GrafoND */
27
v1 7 v4
v2
El constructor del Grafo especifica los vrtices de los que va a constar el grafo.
D C 10 A B 12 D B 23 A D 87 E D 43
29
1 2 3 4 6
John (2)
10
Paul (3)
7 3
Jane (1)
Grafo de afinidad ([0..10]) que siente una persona hacia las de su red social.