Sistema de Minería de Datos basado en Grafos Etiquetados ...
Estructuras de datos para Grafos Estructura de Datos Facultad de Ciencias de la computación BUAP....
-
Upload
pia-negrete -
Category
Documents
-
view
218 -
download
0
Transcript of Estructuras de datos para Grafos Estructura de Datos Facultad de Ciencias de la computación BUAP....
Estructuras de datos para Grafos
Estructura de DatosFacultad 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
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
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.
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).
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
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
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
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
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
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
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)
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
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
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
Estructura de Datos Grafos - 16
Representación de Grafos
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
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
}
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
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
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
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
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
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
Estructura de Datos Grafos - 25
Árbol reducido (anchura)
1
2
3
4
6
7
8
5
10
11
9
13
12
Estructura de Datos Grafos - 26
Árbol reducido (profundidad)
1
2
3
4
6
7
8
5
10
11
9
13
12
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;
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
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.