Tema4 1
Tema4 1
Tema4 1
4. Grafos.
A.E.D.
Tema 4. Grafos.
4.1. Introduccin, notacin y definiciones. 4.2. Representacin de grafos. 4.3. Problemas y algoritmos sobre grafos.
4.3.1. Recorridos sobre grafos. 4.3.2. rboles de expansin mnimos. 4.3.3. Problemas de caminos mnimos. 4.3.4. Algoritmos sobre grafos dirigidos. 4.3.5. Algoritmos sobre grafos no dirigidos. 4.3.6. Otros problemas con grafos.
A.E.D.
Oviedo
45 5 356
304
28 0
Bilbao
32
3 95
Vigo
Zaragoza
296
0 10
Gerona
4
32
25
Valladolid
40 3
Barcelona
34 9
19 1
2 41
335
19 3
Madrid
1
Badajoz Sevilla
12 5
Albacete
0 15
99
Valencia
Jan
2 24 25 6
2 78
Murcia
Cdiz
Granada
A.E.D.
Problemas
Cul es el camino ms corto de Murcia a Badajoz? Existen caminos entre todos los pares de ciudades? Cul es la ciudad ms lejana a Barcelona? Cul es la ciudad ms cntrica? Cuntos caminos distintos existen de Sevilla a Zaragoza? Cmo hacer un tour entre todas las ciudades en el menor tiempo posible?
A.E.D.
A.E.D.
A.E.D.
Aplanar terreno
Comprar piedras
Hacer camino
Cincelar piedras
Pintar pirmide
Colocar piedras
A.E.D.
Problemas
En cuanto tiempo, como mnimo, se puede construir la pirmide? Cundo debe empezar cada tarea en la planificacin ptima? Qu tareas son ms crticas (es decir, no pueden sufrir retrasos)? Cunta gente necesitamos para acabar las obras?
A.E.D.
Escena
1 1 3 3 4 4 7 7
Modelo 2
a a
b b e e
c c
d d
A.E.D.
Problemas
Cuntos grupos hay en la escena? Qu objetos estn visibles en la escena y en qu posiciones? Qu correspondencia hay entre puntos del modelo y de la escena observada? Qu objetos son isomorfos?
A.E.D.
Oviedo
45 5 356
304
28 0
Bilbao Zaragoza
296
0 10
395
Vigo
Gerona
b a
Valladolid
3 40
5 32
4 32
Barcelona
Madrid
335
25 1
34 9
3 19
inicio
191
241
b a
Badajoz
Albacete
150
Valencia
12 5
42 Sevilla 2 25 6
Jan
99
278
Murcia
Cdiz
Granada
G|3
A.E.D.
4.1. Introduccin y definiciones. Un grafo G es una tupla G= (V, A), donde V es un conjunto no vaco de vrtices o nodos y A es un conjunto de aristas o arcos. Cada arista es un par (v, w), donde v, w V.
Tipos de grafos v Grafo no dirigido. Las aristas no estn ordenadas: (v, w) = (w, v) Grafos dirigidos (o digrafos). v Las aristas son pares ordenados: <v, w> <w, v> <v, w> w = cabeza de la arista, v = cola.
A.E.D.
4.1.2. Terminologa de grafos. Nodos adyacentes a un nodo v: todos los nodos unidos a v mediante una arista. En grafos dirigidos:
Nodos adyacentes a v: todos los w con <v, w> A. Nodos adyacentes de v: todos los u con <u, v> A.
Un grafo est etiquetado si cada arista tiene asociada una etiqueta o valor de cierto tipo. Grafo con pesos: grafo etiquetado con valores numricos.
Grafo etiquetado: G= (V, A, W), con W: A TipoEtiq
A.E.D.
4.1.2. Terminologa de grafos. Camino de un vrtice w1 a wq: es una secuencia w1, w2, ..., wq V, tal que todas las aristas (w1, w2), (w2, w3), ..., (wq-1, wq) A. Longitud de un camino: nmero de aristas del camino = n de nodos -1. Camino simple: aquel en el que todos los vrtices son distintos (excepto el primero y el ltimo que pueden ser iguales). Ciclo: es un camino en el cual el primer y el ltimo vrtice son iguales. En grafos no dirigidos las aristas deben ser diferentes. Se llama ciclo simple si el camino es simple.
A.E.D.
4.1.2. Terminologa de grafos. Un subgrafo de G=(V, A) es un grafo G=(V, A) tal que VV y AA. Dados dos vrtices v, w, se dice que estn conectados si existe un camino de v a w. Un grafo es conexo (o conectado) si hay un camino entre cualquier par de vrtices. Si es un grafo dirigido, se llama fuertemente conexo. Un componente (fuertemente) conexo de un grafo G es un subgrafo maximal (fuertemente) conexo.
A.E.D.
4.1.2. Terminologa de grafos. Un grafo es completo si existe una arista entre cualquier par de vrtices. Para n nodos, cuntas aristas tendr un grafo completo (dirigido o no dirigido)? Grado de un vrtice v: nmero de arcos que inciden en l. Para grafos dirigidos: Grado de entrada de v: n de aristas con <x, v> Grado de salida de v: n de aristas con <v, x>
A.E.D.
4.1.3. Operaciones elementales con grafos. Crear un grafo vaco (o con n vrtices). Insertar un nodo o una arista. Eliminar un nodo o arista. Consultar si existe una arista (obtener la etiqueta). Iteradores sobre las aristas de un nodo: para todo nodo w adyacente a v hacer accin sobre w para todo nodo w adyacente de v hacer accin sobre w
A.E.D.
Representacin de grafos:
Representacin del conjunto de nodos, V. Representacin del conjunto de aristas, A.
1 3 4 5 2
1 3 4
+ +t
A.E.D.
4.2.1. Matrices de adyacencia. tipo GrafoNoEtiq= array [1..n, 1..n] de booleano Sea M de tipo GrafoNoEtiq, G= (V, A). M[v, w] = cierto (v, w) A
M 1 3 4 5 2
1 2 3 4 5 T T 1 T T 2 T T T T T T T T 3 4 T T 5
Grafo no dirigido Matriz simtrica: M[i, j] = M[j, i]. Resultado: se desperdicia la mitad de la memoria.
A.E.D.
4.2.1. Matrices de adyacencia. Grafos etiquetados: tipo GrafoEtiq[E]= array [1..n, 1..n] de E El tipo E tiene un valor NULO, para el caso de no existir arista.
1 M
1 2 3 1 2 3 4
3 2 4 2 2 4
3 2 0 4 2
Cmo seran los iteradores: para todo adyacente a, y adyacente de? Y contar nmero de aristas? Cunto es el tiempo de ejecucin?
A.E.D.
Uso de memoria
k2 bytes/etiqueta
Ventajas
Representacin y operaciones muy sencillas. Eficiente para el acceso a una arista dada.
Inconvenientes
El nmero de nodos del grafo no puede cambiar. Si hay muchos nodos y pocas aristas (a<<n2) se desperdicia mucha memoria (matriz escasa).
A.E.D.
4.2.2. Listas de adyacencia. tipo Nodo= entero (1..n) tipo GrafoNoEtiq= array [1..n] de Lista[Nodo] Sea R de tipo GrafoNoEtiq, G= (V, A). La lista R[v] contiene los w tal que (v, w) A.
1 1 1 2 1 2 2 2 4 3 4 5 4 3 5
1 3 4
2 3 4
Grafo no dirigido Las aristas estn repetidas. Resultado: tambin se desperdicia memoria.
A.E.D.
4.2.2. Listas de adyacencia. Grafos etiquetados: tipo GrafoEtiq[E]= array [1..n] de Lista[Nodo,E]
1 a b 4 2 d c 3 a
1 2 3 4
2 a 4 b 1 a 2 c 4 d
Cmo seran los iteradores: para todo adyacente a, y adyacente de? Y contar nmero de aristas? Cunto es el orden de complejidad? Se suponen: n nodos y a aristas.
A.E.D.
Uso de memoria
k1 bytes/puntero, k2 bytes/etiqueta o nodo Memoria usada: k1(n+a) + 2k2a Con matrices de adyacencia: k2n2 Cul usa menos memoria?
Ventajas
Ms adecuada cuando a<<n2.
Inconvenientes
Representacin ms compleja. Es ineficiente para encontrar las aristas que llegan a un nodo.
A.E.D.
b c e registros de aristas 2
a b
d e
sig_ent valor sig_sal
A.E.D.
4.3.1. Recorridos sobre grafos. 4.3.2. rboles de expansin mnimos. 4.3.3. Problemas de caminos mnimos. 4.3.4. Algoritmos sobre grafos dirigidos. 4.3.5. Algoritmos sobre grafos no dirigidos. 4.3.6. Otros problemas con grafos.
A.E.D.
4.3.1. Recorridos sobre grafos. Idea similar al recorrido en un rbol. Se parte de un nodo dado y se visitan los vrtices del grafo de manera ordenada y sistemtica, movindose por las aristas. Tipos de recorridos:
Bsqueda primero en profundidad. Equivalente a un recorrido en preorden de un rbol. + Bsqueda primero en amplitud o anchura. Equivalente a recorrer un rbol por niveles.
Los recorridos son una herramienta til para resolver muchos problemas sobre grafos.
A.E.D.
4.3.1. Recorridos sobre grafos. El recorrido puede ser tanto para grafos dirigidos como no dirigidos. Es necesario llevar una cuenta de los nodos visitados y no visitados. var marca: array [1, ..., n] de (visitado, noVisitado) operacin BorraMarcas para i:= 1, ..., n hacer marca[i]:= noVisitado
A.E.D.
operacin bpp (v: nodo) marca[v]:= visitado para cada nodo w adyacente a v hacer si marca[w] == noVisitado entonces bpp(w) finpara operacin BsquedaPrimeroEnProfundidad BorraMarcas para v:= 1, ..., n hacer si marca[v] == noVisitado entonces bpp(v) finpara
A.E.D.
2 7 6 8
9 5
A.E.D.
4 5
7 8
9
4 5
Arcos no del rbol: si marca[v] == noVisitado ... se detectan cuando la condicin es falsa. +
A.E.D.
Bosque de expansin
1
b c d e
e a
Arco de avance
Cunto es el tiempo de ejecucin de la BPP? Imposible predecir las llamadas en cada ejecucin. Solucin: medir el trabajo total realizado. A.E.D.
4.3.1.2. Bsqueda primero en anchura (o amplitud). operacin bpa (v: Nodo) var C: Cola[Nodo] x, y: Nodo marca[v]:= visitado InsertaCola (v, C) mientras NOT EsVacaCola (C) hacer x:= FrenteCola (C) SuprimirCola (C) para cada nodo y adyacente a x hacer si marca[y] == noVisitado entonces marca[y]:= visitado InsertaCola (y, C) finsi finpara finmientras
A.E.D.
2 6 7 8
4 9 5
4 3
3
5 7
5
Arcos de cruce
A.E.D.
Bosque de expansin
1
b c
3
e a
Cunto es el tiempo de ejecucin de la BPA? Cmo comprobar si un arco es de avance, cruce, etc.? Solucin: Construir el bosque explcitamente.
A.E.D.
4.3.1. Recorridos sobre grafos. Construccin explcita del bosque de expansin: Usamos una estructura de punteros al padre. marca: array [1, ..., n] de entero marca[v] vale: -1 si v no est visitado 0 si est visitado y es raz de un rbol En otro caso indicar cual es el padre de v
Problema 2: Prueba de aciclicidad. Dado un grafo (dirigido o no dirigido) comprobar si tiene algn ciclo o no.
A.E.D.
Prueba de aciclicidad.
Grafo no dirigido. Hacer una BPP (o BPA). Existe algn ciclo si y slo si aparece algn arco que no es del rbol de expansin. Grafo dirigido. Hacer una BPP (o BPA). Existe un ciclo si y slo si aparece algn arco de retroceso.
Orden de complejidad de la prueba de aciclicidad: igual que los recorridos. Con matrices de adyacencia: O(n2). Con listas de adyacencia: O(a+n).
A.E.D.
4.3.2. rboles de expansin mnimos. Definicin: Un rbol de expansin de un grafo G=(V, A) no dirigido y conexo es un subgrafo G=(V, A) conexo y sin ciclos. Ejemplo: los rboles de expansin en profundidad y en anchura de un grafo conexo. En grafos con pesos, el coste del rbol de expansin es la suma de los costes de las aristas. Problema del rbol de expansin de coste mnimo: Dado un grafo ponderado no dirigido, encontrar el rbol de expansin de menor coste.
A.E.D.
Problema: Conectar todos los ordenadores con el menor coste total. Solucin: Algoritmos clsicos de Prim y Kruskal. + A.E.D.
Esquema:
1. Empezar en un vrtice cualquiera v. El rbol consta inicialmente slo del nodo v. 2. Del resto de vrtices, buscar el que est ms prximo a v (es decir, con la arista (v, w) de coste mnimo). Aadir w y la arista (v, w) al rbol. 3. Buscar el vrtice ms prximo a cualquiera de estos dos. Aadir ese vrtice y la arista al rbol de expansin. 4. Repetir sucesivamente hasta aadir los n vrtices.
+ A.E.D.
3 3
A.E.D.
4.3.2.1. Algoritmo de Prim. La solucin se construye poco a poco, empezando con una solucin vaca. Implcitamente, el algoritmo maneja los conjuntos:
V: Vrtices del grafo. U: Vrtices aadidos a la solucin. V-U: Vrtices que quedan por aadir.
Cmo implementar eficientemente la bsqueda: encontrar el vrtice de V-U ms prximo a alguno de los de U?
A.E.D.
Se usan dos arrays: MAS_CERCANO: Para cada vrtice de V-U indica el vrtice de U que se encuentra ms prximo. MENOR_COSTE: Indica el coste de la arista ms cercana.
Dnde est almacenado el resultado del algoritmo? Cul es el orden de complejidad del algoritmo?
A.E.D.
Esquema: G= (V, A)
1. Empezar con un grafo sin aristas: G= (V, ) 2. Seleccionar la arista de menor coste de A. 3. Si la arista seleccionada forma un ciclo en G, eliminarla. Si no, aadirla a G. 4. Repetir los dos pasos anteriores hasta tener n-1 aristas. Cmo saber si una arista (v, w) provocar un ciclo en el grafo G?
A.E.D.
A.E.D.
A.E.D.
Mostrar la ejecucin sobre el grafo de ejemplo. Cul es el orden de complejidad del algoritmo?
A.E.D.
Conclusiones Ambos algoritmos (Prim y Kruskal) encuentran siempre la solucin ptima. La solucin obtenida ser la misma, o no... La estructura de los dos algoritmos es muy parecida:
Empezar con una solucin vaca. Aadir en cada paso un elemento a la solucin (Prim: un nodo; Kruskal: una arista). Una vez aadido un elemento a la solucin, no se quita (no se deshacen las decisiones tomadas).
A.E.D.
4.3.3. Problemas de caminos mnimos. Coste de un camino: suma de los costes de las aristas por las que pasa. Problemas de caminos mnimos:
Camino mnimo entre dos nodos, v y w. Caminos mnimos entre un nodo v y todos los dems. Caminos mnimos entre todos los pares de nodos.
Corua
17 1
Oviedo
45
356
304
Bilbao
4 32
395
Vigo
28 0
Zaragoza
2 96
0 10
Gerona
Valladolid
40 3
25
Barcelona
34 9
191
241
335
3 19
Madrid
25 1
Valencia
Albacete
15 0
99
25 6
2 78
Murcia
Cdiz
Granada
A.E.D.
4.3.3.1. Caminos mnimos desde un origen. Algoritmo de Dijkstra Supongamos un grafo G, con pesos positivos y un nodo origen v. El algoritmo trabaja con dos conjuntos de nodos: Escogidos: S. Nodos para los cuales se conoce ya el camino mnimo desde el origen. Candidatos: T. Nodos pendientes de calcular el camino mnimo, aunque conocemos los caminos mnimos desde el origen pasando por nodos de S.
A.E.D.
4.3.3.1. Caminos mnimos desde un origen. Camino especial: camino desde el origen hasta un nodo, que pasa slo por nodos escogidos, S. S
1 2 6 3 8 7 5 4
T
9
Idea: En cada paso, coger el nodo de T con menor distancia al origen. Aadirlo a S. Recalcular los caminos mnimos de los dems candidatos, pudiendo pasar por el nodo cogido.
A.E.D.
4.3.3.1. Caminos mnimos desde un origen. Algoritmo de Dijkstra Inicializacin: S= {1}, T= {2, ..., n}, caminos especiales mnimos = caminos directos. Repetir n-1 veces: Seleccionar el nodo v de T con el camino especial ms corto. Proposicin: el camino mnimo para este nodo v, coincide con su camino especial. Recalcular los caminos especiales para los nodos de T, pudiendo pasar por v.
A.E.D.
4.3.3.1. Caminos mnimos desde un origen. Implementacin del algoritmo de Dijkstra Suponemos que el origen es el nodo 1. D: array [2..n] de real. D[v] almacena el coste del camino especial mnimo para el nodo v. P: array [2..n] de entero. P[v] almacena el ltimo nodo en el camino especial mnimo de v. Inicializacin: D[v]:= C[1, v], P[v]:= 1 Nodo seleccionado: nodo de T con mnimo D[v] Actualizacin: para todos los w de T hacer si D[v] + C[v, w] < D[w] entonces D[w]:= D[v] + C[v, w] P[w]:= v finsi
A.E.D.
D[v]
1
v w
T C[v, w]
D[w]
Camino especial para w:
Sin pasar por v: D[w] Pasando por v: D[v] + C[v,w] Nos quedamos con el menor.
Si el menor es pasando por v entonces: P[w]= v. Camino especial para w: 1 ... P[P[P[w]]] P[P[w]] P[w] w
A.E.D.
Salida:
D: array [2..n] de real Costes de caminos mnimos P: array [2..n] de entero Nodos de paso
+
A.E.D.
4.3.3.1. Caminos mnimos desde un origen. Ejemplo: Mostrar la ejecucin del algoritmo de Dijkstra sobre el siguiente grafo.
1 1 2 3 8 1 5 4 1 7 2 2 6 2 3 3 8 4 1
Nodo
2 3 4 5 6 7
S F T F T F T F T F T F T
D 1 12 5 4 5 4 2
P 1 1 5 1 7 1 7 1 7 1 2
A partir de las tablas, cmo calcular cul es el camino mnimo para un nodo v?
A.E.D.
A.E.D.
4.3.3.2. Caminos mnimos entre todos los pares. Problema: Calcular los caminos mnimos entre todos los pares de nodos del grafo.
Posibilidades
Aplicar el algoritmo de Dijkstra n veces, una por cada posible nodo origen: Con matrices de adyacencia: O(n3) Con listas de adyacencia: O(anlog n) Aplicar el algoritmo de Floyd: Con listas o matrices: O(n3) Pero ms sencillo de programar...
A.E.D.
4.3.3.2. Caminos mnimos entre todos los pares. Entrada: C: array [1..n, 1..n] de real Matriz de costes Salida:
D: array [1..n, 1..n] de real Costes caminos mnimos
Algoritmo de Floyd
D:= C para k:= 1, ..., n hacer para i:= 1, ..., n hacer para j:= 1, ..., n hacer D[i, j]:= min ( D[i, j] , D[i, k] + D[k, j] )
A.E.D.
4.3.3.2. Caminos mnimos entre todos los pares. En qu se basa el algoritmo de Floyd? En cada paso k, la matriz D almacena los caminos mnimos entre todos los pares pudiendo pasar por los k primeros nodos. Inicializacin: D almacena los caminos directos. Paso 1: Caminos mnimos pudiendo pasar por el 1. ... Paso n: Caminos mnimos pudiendo pasar por cualquier nodo Lo que buscamos. En el paso k, el nodo k acta de pivote.
A.E.D.
D[i, k]
i
D[k, j]
j
D[i, j]
Ojo: Falta indicar cules son los caminos mnimos. P: array [1..n, 1..n] de entero. P[i, j] indica un nodo intermedio en el camino de i a j. i ... P[i, j] ... j
A.E.D.
Algoritmo de Floyd
D:= C P:= 0 para k:= 1, ..., n hacer para i:= 1, ..., n hacer para j:= 1, ..., n hacer si D[i, k] + D[k, j] < D[i, j] entonces D[i, j]:= D[i, k] + D[k, j] P[i, j]:= k finsi Cunto es el orden de complejidad del algoritmo?
A.E.D.
4.3.3.2. Caminos mnimos entre todos los pares. El algoritmo de Floyd se basa en una descomposicin recurrente del problema:
Dk(i, j):= C[i, j] min(Dk-1(i, j), Dk-1(i, k) + Dk-1(k, j)) Si k=0 Si k>0
Como la fila y columna k no cambian en el paso k, se usa una sola matriz D. Cmo recuperar el camino?
operacin camino (i, j: entero) k:= P[i, j] si k 0 entonces camino (i, k) escribe (k) camino (k, j) finsi A.E.D.
4.3.3.2. Caminos mnimos entre todos los pares. Ejemplo: Aplicar el algoritmo de Floyd al siguiente grafo dirigido.
8 3
2
2 2 5
D 1 2 3 P 1 2 3
A.E.D.
1 0 3 6 5 1 0 0 0 2 2 0 3 0 0
2 8 4 0 2 3 0 0 1 0
3 2 5 0
1
6
4.3.3.3. Cierre transitivo de un grafo. Problema: Dada una matriz de adyacencia M (de boolenos) encontrar otra matriz A, tal que A[i, j] es cierto si y slo si existe un camino entre i y j.
Algoritmo de Warshall
Es una simple adaptacin del algoritmo de Floyd a valores booleanos. A:= M para k:= 1, ..., n hacer para i:= 1, ..., n hacer para j:= 1, ..., n hacer A[i, j]:= A[i, j] OR (A[i, k] AND A[k, j])
A.E.D.
Conclusiones
Caminos mnimos: Problema fundamental en grafos. Diferentes problemas, con diversas aplicaciones. Desde un origen hasta todos los dems nodos Algoritmo de Dijkstra. Idea: Nodos escogidos y candidatos. Entre todos los pares Algoritmo de Floyd. Idea: Pivotar sobre cada nodo. Ambos algoritmos pueden modificarse para resolver otros problemas relacionados.
A.E.D.
Definicin: Un componente conexo de un grafo G es un subgrafo maximal y conexo de G. En grafos dirigidos: Componente fuertemente conexo. Existen caminos entre todos los pares de nodos y en los dos sentidos. Problema: Dado un grafo, calcular sus componentes (fuertemente) conexos.
A.E.D.
Solucin trivial: Aplicar una BPP. Cada rbol es un componente conexo. Componentes fuertemente conexos en grafos dirigidos. Funciona una 1 4 2 3 simple BPP?
A.E.D.
4.3.4.1. Componentes fuertemente conexos. La BPP no funciona, pero... Y si hubiramos empezado la BPP de mayor a menor nmero...?
4 3 2 1
Idea: Hacer dos bsquedas en profundidad. En la primera se calcula un orden para la segunda. En la segunda se recorre el grafo (invertido), segn ese orden. Orden posterior de un grafo: npost[v] = orden de terminacin de la llamada recursiva de v en la BPP.
A.E.D.
4.3.4.1. Componentes fuertemente conexos. Algoritmo para calcular los Componentes Fuertemente Conexos de un grafo G = (V, A)
1. Realizar una BPP de G, numerando los vrtices en orden posterior. npost: array [1..n] de entero. 2. Construir el grafo invertido G = (V, A). Para toda arista <v, w> A, tenemos <w, v> A. 3. Realizar una BPP en G empezando en el nodo con mayor npost. Si no se visitan todos los nodos, continuar con el nodo no visitado con mayor npost. 4. Cada rbol del bosque resultante del paso 3 es un componente fuertemente conexo de G.
A.E.D.
4.3.4.1. Componentes fuertemente conexos. Ejemplo: Encontrar los componentes fuertemente conexos del siguiente grafo.
B A C E D
A.E.D.
4.3.4.2. Grafos dirigidos acclicos. Definicin: Un grafo dirigido acclico (GDA) es un grafo dirigido y sin ciclos.
Ejemplos: Grafo de planificacin de tareas, expresiones aritmticas (con subexpresiones comunes), grafo de prerrequisitos, etc. Licencia
* + A B D + *
Aplanar terreno de obras
Comprar piedras
Hacer camino
Cincelar piedras
(A+B)*(D+D*(A+B))
Pintar pirmide
Colocar piedras
A.E.D.
{ 1, 3 } {2} { }
{ 2, 3 } {3}
A.E.D.
2 4 7
Aplanar terreno
Comprar piedras
Hacer camino
Cincelar piedras
Pintar pirmide
Colocar piedras
Existen otras ordenaciones topolgicas vlidas. Disear un algoritmo para calcular una ordenacin topolgica.
A.E.D.
A.E.D.
4.3.4.2. Grafos dirigidos acclicos. Otra posibilidad: Usar la numeracin en orden posterior (orden de terminacin de las llamadas recursivas en el procedimiento BPP). Proposicin: Si npost[v] es una numeracin posterior de un GDA, entonces ntop[n]:= n-npost[v] es una numeracin topolgica vlida del GDA. Por qu? 1 2 Ejemplo: Aplicar los dos algoritmos 3 4 5 al siguiente grafo.
6 A.E.D. 7
Definicin: Un punto de articulacin de un grafo no dirigido, G, es un nodo v tal que cuando es eliminado de G (junto con las aristas incidentes en l) se divide un componente conexo de G en dos o ms componentes conexos. Definicin: Un grafo no dirigido se dice que es biconexo si no tiene puntos de articulacin. Definicin: Un componente biconexo de un grafo G es un subgrafo biconexo y maximal de G.
A.E.D.
5 7
11
10
Qu jugador, o jugadores, desconectan al equipo si los eliminamos? Escribir un algoritmo que lo calcule. +
A.E.D.
Definicin: Un grafo G tiene conectividad k si la eliminacin de k-1 nodos cualesquiera (con sus aristas) no desconecta el grafo. Por lo tanto, un grafo es biconexo si y slo si tiene conectividad 2 o ms.
1 3 7 8 2 4 6
Posible algoritmo: Eliminar los nodos uno a uno. Para cada uno, comprobar si el grafo sigue siendo conexo.
A.E.D.
Otro algoritmo mejor. Idea: Calcular los caminos alternativos que hay para cada nodo en una BPP.
1. Realizar una BPP, numerando los nodos en el orden de recorrido en profundidad: nbpp[1..N]. 2. Al terminar la llamada recursiva de un nodo v, calcular el valor bajo[v] (camino alternativo), segn la frmula: bajo[v]:= mnimo { nbpp[v], nbpp[z] | siendo (v, z) un arco de retroceso, bajo[y] | siendo y hijo de v en el rbol } 3. La raz es un punto de articulacin si y slo si tiene dos o ms hijos en el rbol. 4. Un nodo v es un punto de articulacin si y slo si tiene algn hijo w en el rbol tal que bajo[w] nbpp[v]. A.E.D.
Ejemplo.
2, 1 3 3, 3 9
1 4, 1 7
nbpp[1]= 1, bajo[1]= 1
5, 1 8 7, 6 4
2 6, 6 6 9, 6
8, 8
Fundamento del algoritmo: bajo[v] indica el menor valor de nbpp alcanzable desde v hasta cualquier descendiente y luego hacia arriba a travs de un arco de retroceso. Si se cumple la condicin de 4 (bajo[w] nbpp[v]), al eliminar v entonces w y sus descendientes no pueden alcanzar los nodos antecesores de v. A.E.D.
1 2 5 7 4
3 6
Pregunta: Es posible dibujar estas figuras con un bolgrafo, pintando cada lnea una sola vez, sin levantar el bolgrafo y acabando donde se empez? A.E.D.
4.3.5.2. Caminos y circuitos de Euler. El problema se transforma en un problema de grafos. Circuito de Euler: Es un ciclo (no necesariamente simple) que visita todas las aristas exactamente una vez. Si puede empezar y acabar en nodos distintos: Camino de Euler. 1
2 5 7 3 4 6
Condiciones necesarias y suficientes para que exista un circuito de Euler: El grafo debe ser conexo. Todos los nodos deben tener grado par, ya que el camino entra y sale de los nodos. Y para los caminos de Euler? A.E.D.
Si existe un circuito de Euler, cmo calcularlo? Algoritmo para encontrar un circuito de Euler en un grafo G, partiendo de un nodo v.
1. Buscar un ciclo cualquiera en G empezando por v. 2. Si quedan aristas por visitar, seleccionar el primer nodo, w, del ciclo que tenga una arista sin visitar. Buscar otro ciclo partiendo de w que pase por aristas no visitadas. 3. Unir el ciclo del paso 1 con el obtenido en el paso 2. 4. Repetir sucesivamente los pasos 2 y 3 hasta que no queden aristas por visitar.
Cmo encontrar un ciclo en el grafo, que pase por aristas no visitadas (pasos 1 y 2)?
A.E.D.
A.E.D.
4.3.4. y 4.3.5. Algoritmos sobre grafos dirigidos y no dirigidos. Conclusiones Podemos utilizar grafos para modelar problemas de la vida real.
Problema de inters Problema con grafos Algoritmo genrico con grafos Algoritmo para el problema de inters
Importancia del estudio de problemas genricos sobre grafos. La bsqueda primero en profundidad es una herramienta bsica, subyacente en muchos de los algoritmos estudiados.
A.E.D.
Problemas genricos y clsicos sobre grafos: Problemas de flujo en redes: Los grafos representan canales de flujo de informacin, de lquidos, mercancas, coches, etc. Problema del viajante: Optimizacin de rutas en mapas de carreteras. Coloracin de grafos: Los grafos representan relaciones de incompatibilidad. Comparacin, isomorfismo y subisomorfismo: Representacin de informacin semntica, bsqueda de patrones, inteligencia artificial.
A.E.D.
Problemas de flujo en redes Supongamos un grafo dirigido G= (V, A) con pesos. Los nodos representan puntos de una red. Las aristas representan canales de comunicacin existentes entre dos puntos. Los pesos de cada arista C(v, w) representan el nmero mximo de unidades que pueden fluir desde el nodo v al w. Problema: Encontrar el mximo volumen que se puede enviar entre dos puntos.
A.E.D.
Restricciones:
Dado un nodo origen s y un nodo destino t en un grafo dirigido con pesos, G, encontrar la cantidad mxima de flujo que puede pasar de s a t.
La suma de las entradas de cada nodo interior debe ser igual a la suma de sus salidas. Los valores de flujo en cada arista (v, w) no pueden superar los valores mximos, dados por C(v, w).
5 s 3
b 1 a 4
3 t
A.E.D.
G
s
b 1
2 4 2
3 t
F
s
b 0
2 1 2
3 t
Aunque el problema es muy parecido al del circuito de Euler, no se conoce ningn algoritmo eficiente para resolverlo, en tiempo polinomial. El problema del ciclo hamiltoniano pertenece a un conjunto de problemas de difcil solucin, llamados problemas NP-completos. Las soluciones conocidas requieren bsicamente evaluar todas las posibilidades, dando lugar a rdenes de complejidad exponenciales o factoriales. Otra alternativa es usar mtodos heursticos: soluciones aproximadas que pueden funcionar en algunos casos y en otros no.
A.E.D.
10
2
55
20
25
40
25
5
50
30
15
Ejemplo: Un cartero tiene que repartir cartas por todo el pueblo. Qu ruta debe seguir para que el coste de desplazamiento sea mnimo? A.E.D.
10
2
55
TOTAL 140 2
0
1
45
10
TOTAL 135 2 2
55
0
25
40
25
40
25
25
5
50
30
15
5
50
30
15
El problema del viajante es un problema NP-completo, equivalente (reducible) al problema del ciclo hamiltoniano. No se conoce una solucin con tiempo polinmico. Las soluciones conocidas tienen complejidad exponencial. Podemos aplicar heursticas, tcnicas probabilistas, algoritmos genticos, computacin con ADN, etc., obteniendo aproximaciones.
A.E.D.
Coloracin de grafos
Un grafo no dirigido G representa ciertos elementos. Una arista (v, w) representa una incompatibilidad entre los elementos v y w. La coloracin de un grafo consiste en asignar un color (o etiqueta) a cada nodo, de forma que dos nodos incompatibles no tengan el mismo color. Problema de coloracin de grafos: Realizar una coloracin del grafo utilizando un nmero mnimo de colores.
A.E.D.
4.3.6. Otros problemas con grafos. Ejemplo: Con cuntos colores, como mnimo, se puede pintar un mapa? Dos regiones adyacentes no pueden tener el mismo color.
A.E.D.
4.3.6. Otros problemas con grafos. Modelado del problema: Nodos del grafo: Regiones del mapa. Aristas del grafo: Hay una arista (v, w) si las regiones v y w tienen una frontera comn. Solucin: Encontrar la coloracin mnima del grafo.
ARNOR ERIADOR COMARCA GONDOR ROHAN MORDOR RHUN
Isomorfismo
Definicin: Dos grafos G= (VG, AG) y F= (VF, AF) se dice que son isomorfos si existe una asignacin de los nodos de VG con los nodos de VF tal que se respetan las aristas. Isomorfismo entre grafos. El isomorfismo es una funcin:
El isomorfismo de grafos es tambin un problema NPcompleto. La solucin consistira, bsicamente, en comprobar todas las posibles asignaciones. A.E.D.
Conclusiones
4. Grafos.
Existen muchos algoritmos clsicos para resolver diferentes problemas sobre grafos. Nuestro trabajo: Saber modelar los problemas de inters usando grafos y encontrar el algoritmo adecuado para la aplicacin que se requiera. Problemas NP-completos sobre grafos: Disear un algoritmo ptimo con alto coste, o un algoritmo heurstico, aproximado pero rpido. Continuar...
A.E.D.
A.E.D.