2.3 Grafos ac´ıclicos

Transcripción

2.3 Grafos ac´ıclicos
2.3 Grafos acı́clicos
2.3
Grafos acı́clicos
Hasta ahora hemos buscado caminos y estudiado la conexión de un grafo, sin entrar en el estudio
de los ciclos y la aciclicidad. En esta sección trataremos de ello, introduciéndonos brevemente en el
estudio los grafos acı́clicos.
2.3.1
Grafos acı́clicos no dirigidos: Árboles
Los resultados siguientes, aunque sencillos (casi “simplones”) son básicos en el estudio y ponen de
manifiesto la imbricación entre conexión y ciclos
? Cualquier vértice que esté en un ciclo tiene al menos grado 2 (el recı́proco no es cierto).
? Si un vértice tiene grado 1, la arista incidente no forma parte de ningún ciclo.
? Si dos vértices pertenecen a un mismo ciclo, están conectados al menos por dos caminos distintos.
? Si eliminamos una arista de un ciclo, los vértices extremos siguen estando conectados.
? Si un grafo consta únicamente de un ciclo tiene tantas aristas como vértices.
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
t
Bastan estas gráficas para considerar la validez de los resultados anteriores.
Es notoria la relación entre conexión y ciclos si consideramos el siguiente resultado:
Lema 19.- Si G = (V, A) es un grafo conexo y a es una de sus aristas, entonces:
(V, A − {a}) es un grafo conexo ⇐⇒ a está en un ciclo.
Demostración:
Si la arista a une los vértices x e y , y (V, A − {a}) es conexo hay un camino C uniendo estos dos
vértices que no pasa por a, en consecuencia C ∪ a forma un ciclo en G.
Recı́procamente, si a está en un ciclo y la eliminamos, el grafo resultante sigue siendo conexo,
pues hay otro camino que une los puntos extremos.
Pero también la aciclicidad se caracteriza por la unicidad de los caminos:
Lema 20.- Si dos vértices de un grafo están conectados por dos caminos distintos el grafo tiene al
menos un ciclo.
Demostración:
zi+1
Si x z1 z2 · · · zp y y x w1 w2 · · · wr y son cat
minos distintos, tienen al menos un vértice
zj
zi−1
zi
z1
distinto. Si recorremos los dos caminos empet
t
t
t
ty
x t
w1
wi−1 wi
ws
zando en x, como tienen al menos un vértice
distinto, habrá un vértice zi (que puede ser
t
x) a partir del cual se separan, luego la priwi+1
mera vez que vuelvan a coincidir en un vértice
se forma el ciclo –y deben volver a juntarse pues ambos acaban en y , luego se juntan en y o en otro
anterior–. (Ver la figura de la derecha donde aparece en verde el ciclo formado.)
Proposición 21.- Un grafo no dirigido conexo es acı́clico si y sólo si cada par de vértices está unido
por un único camino.
Matlab 6.1.
30
2.3 Grafos acı́clicos
La veracidad del resultado es clara del lema y el tercero de los resultados “básicos” anteriores (aunque
su prueba requiere algo más de trabajo).
Pero definamos con propiedad los elementos a tratar: tratar:
Definición 22.- A un grafo no dirigido, acı́clico y conexo se le llama árbol. Si no es conexo se
denomina bosque y, cada componente conexa es un árbol.
En un árbol, a los vértices de grado uno se les llama hojas.
En el estudio de los grafos acı́clicos nos limitaremos a los conexos, los árboles, pues para los no
conexos (bosques) basta aplicar los resultados a cada una de las componentes conexas.
Los árboles figuran entre los tipos más importantes de grafos y se presentan en varias aplicaciones:
los árboles genealógicos, los organigramas o las redes de distribución son ejemplos de ellos. Pueden
usarse para presentar, organizar o analizar redes eléctricas, relaciones mercantiles, estructuras de la
programación, etc.
Puede decirse que son la estructura mı́nima de conectividad (máxima conectividad al mı́nimo
coste). Las dos representaciones siguientes ilustran su estructura:
v2
t
@
v4
t
v6
t
@
@
v1 t
ur
@
t
v3
@
@t
v5
t
v7
rr
HH
H
vr
HHsr
@
@
@
@
@rw
@r
r
p
q
@
@
r
r @r
x
y
z
donde se aprecia claramente la aciclicidad y, en el segundo, su imagen arbórea. Los vértices v1 , v3 y
v7 son hojas del primer árbol.
El siguiente resultado nos permite obtener un punto de inicio para implementar un método de
chequeo de la aciclicidad:
Lema 23.- Un árbol finito con al menos una arista (o con más de un vértice) tiene al menos una hoja
(de hecho al menos dos hojas).
Demostración:
Elegimos un vértice cualquiera del grafo, x, y se construye a partir de él un camino hasta que
no podamos seguir, entonces el vértice final del camino es una hoja: por ser acı́clico de él no pueden
salir otras aristas (distintas de la de llegada) a vértices anteriores del camino y si no se puede seguir
tampoco salen aristas a otros vértices, luego la única arista incidente en él es la de llegada por lo que
tiene grado 1.
(Si x tiene grado 1 es la segunda hoja y si tiene grado mayor prolongamos el camino anterior a
partir de x siguiendo otra arista hasta que no podamos más, entonces el vértice final para esta parte
también es una hoja –por la misma razón que antes–.)
Algoritmo de aciclicidad
El algoritmo se basa en los siguientes resultados:
• Si eliminamos un hoja y la arista incidente en ella, el subgrafo que nos queda sigue teniendo los
mismos ciclos que antes (una hoja no puede formar parte de un ciclo).
• Si el grafo es conexo, y elimnamos una hoja el subgrafo resultante sigue siendo conexo.
Luego sobre un grafo conexo, el método del algoritmo es el siguiente:
Si tiene más de un vértice y no tiene una hoja, no es acı́clico. Si tiene una hoja, la
eliminamos del grafo.
Si el subgrafo resultante tiene más de un vértice y no tiene hojas, no es acı́clico y tampoco
lo es el inicial. Si tiene una hoja, la eliminamos.
Sucesivamente, hasta que nos quede un sólo vértice de grado 0, en cuyo caso es acı́clico, o
hasta obtener un subgrafo de más de un vértice y sin hojas, en cuyo caso tiene ciclos.
Matlab 6.1.
31
2.3 Grafos acı́clicos
v2
t
@
@
@
v1 t
t
v3
2.3.1.1
v4
t
@
@
@t
v5
v6
t
t
v7
b
r
r
@
@
r @r
r
b
r
r
b
r
b
r
@
r
r
b
@
@r
r
b
r
r
b
b
r
r
r
b
r
r
b
b
r
b
b
b
b
b
b
b
b
b
b
Ejercicios
3.1 Consideremos los dos grafos siguientes:
x1
t
x2
t
x3
t
x4
t
G1
y1
t
y2
t
y3
t
y4
t
t
y6
t
y7
t
y8
G2
t
x5
t
x6
t
x7
t
x8
t
y5
(a) Hay un único camino en G1 para ir de x5 a x6 y hay un único camino en G2 para ir de
y5 a y6 . ¿Eso quiere decir que los grafos son acı́clicos? ¿Por qué?
(b) Comprobar por inspección gráfica si son conexos y si contienen algún ciclo. ¿Cuáles son
sus hojas?
(c) Comprobar si son o no aciclicos usando el método del algoritmo sobre el dibujo.
(d) Escribir la matiz de adyacencia de G1 y detectar en ella las hojas. Aplicar el algoritmo
sobre la matriz de adyacencia. Hacerlo también para G2 .
(e) Si eliminamos la arista {x6 , x7 } de G1 y la arista {y2 , y6 } de G2 , ambos grafos dejan de
ser conexos. Repetir sobre estos nuevos grafos los apartados (c) y (d) anteriores.
Introducir en el ordenador como M1 y M2 las matrices de adyacencia respectivas de G1 y G2 .
[i] ¿Cuantas hojas tiene G1 ? ¿Cuáles son? ¿Y las de G2 ?
[ii] Elegir la primera hoja que se encuentre en G1 y elimı́nala. Usar un bucle for para
programar el algoritmo de aciclicidad. Si el grafo es acı́clico ¿cómo será la matriz final?
[iii] Repetir el apartado anterior para el grafo G2 , pero usando un bucle while.
[iv] Aplicar los algoritmos anteriores a los grafos no conexos construidos en el apartado (e).
¿Detectan adecuadamente si los grafos son acı́clicos o no? De no hacerlo alguno de ellos,
¿como se modificarı́a el programa para que lo haga?
3.2
(a) Sea G un grafo acı́clico y conexo de n vértices. Aplicando el algoritmo de aciclicidad se
elimina, en cada paso, una hoja y al final del proceso el grafo consta de un único vértice de
grado 0. Entonces, ¿cuántas aristas tenı́a inicialmente G?
(b) Si G es acı́clico, formado por dos componentes conexas, una de k vértices y la otra de n−k
vértices ¿cuántas aristas tiene G?
(c) Si a G acı́clico y conexo de n vértices, le añadimos una nueva arista ¿seguirá siendo
acı́clico?, ¿por qué?
3.3
Construir una función Aciclico que aplique el algoritmo de aciclicidad sobre la matriz de
adyacencia de un grafo no dirigido y devuelva 0 si no es acı́clico y 1 si lo es.
Matlab 6.1.
32
2.3 Grafos acı́clicos
2.3.2
Digrafos acı́clicos.
El conjunto de los digrafos acı́clicos también tiene propiedades muy interesantes. Matemáticamente,
constituyen la estructura más amplia en la que se puede asegurar la existencia de maximales y minimales y, en consecuencia, admiten etiquetados naturalmente ordenados (reordenación natural y sencilla
de los vértices).
En un sentido más usable, permiten reordenar los vérices de manera que sea fácil detectar y
manejar las direcciones de los arcos.
Un uso habitual de esta propiedad es establecer una secuencia lineal (sin dicotomı́as) de instruciones
de montaje, cuando algunas de ellas precisan de la realización previa de otras; secuenciación de
programas informáticos, etc.
Definición 24.- Sea (V, A) un grafo dirigido. El punto x ∈ V es un punto maximal, pozo o sumidero del grafo si no existe y ∈ V tal que (x, y) ∈ A, es decir, si exg(x) = 0. El punto x ∈ V es un
punto minimal o fuente del grafo si no existe y ∈ V tal que (y, x) ∈ A, es decir, si ing(x) = 0.
Proposición 25.- Si (V, A) es un digrafo (finito) acı́clico admite, al menos, un maximal y un minimal.
Demostración:
Si no hubiera maximales todo punto del digrafo serı́a adyacente a algún otro, luego partiendo de
un punto cualquiera x1 podrı́amos construir una trayectoria x1 · · · xp tan larga como quisiéramos.
Ahora bien, como el digrafo es finito, llega un momento en la trayectoria que repetirı́amos vértices, lo
que va en contra de la aciclicidad.
Análogamente para los minimales.
Usando la proposición anterior se obtiene la siguiente caracterización para los digrafos acı́clicos:
Proposición 26.- Si (V, A) es un digrafo con |V | = n, entonces (V, A) es acı́clico si, y sólo si, se puede
etiquetar V en la forma {x1 , x2 , . . . , xn } de modo que si (xi , xj ) ∈ A, entonces i < j . En este caso
diremos que el digrafo está naturalmente ordenado.
Demostración:
=⇒ Por inducción sobre el número de vértices n. Es claramente cierto para n = 1. Supongamos
entonces que los digrafos acı́clicos con menos de n vértices pueden ordenarse naturalmente y sea
(V, A) un digrafo acı́clico con n vértices. Elijamos un vértice minimal x ∈ V y asignémosle la
etiqueta x1 . El subgrafo inducido en V − {x} es acı́clico con n − 1 vértices, por lo que puede
ordenarse naturalmente con {x2 , x3 , . . . , xn } y, en consecuencia, el digrafo (V, A) queda de esta
manera naturalmente ordenado (al ser x minimal sólo tiene arcos salientes que llegan a vértices
con ı́ndice mayor que 1).
⇐= Supongamos que (V, A) posee un ciclo xa xb xc · · · xa . Sea j = mı́n{a, b, c, . . . , a} y sea xi el
anterior a xj en el ciclo. Entonces (xi , xj ) ∈ A y, como j es mı́nimo, i ≥ j ; contra la hipótesis
i < j.
La propia demostración de que todo digrafo acı́clico admite un etiquetado naturalmente ordenado
nos proporciona el método para construir dicho etiquetado.
2.3.2.1
Algoritmo de ordenación natural
Si |V | = n, tomamos un x ∈ V que sea minimal y lo etiquetamos por x1 ; consideramos ahora el
subgrafo (V − {x1 }, A|V −{x1 } ) formado al eliminar ese vértice y todos los arcos que salen de él.
Ahora tomamos en este subgrafo un y ∈ V − {x1 } que sea minimal y que etiquetamos por x2 ;
Sucesivamente, se repite el proceso hasta acabar con todos los vértices.
Matlab 6.1.
33
2.3 Grafos acı́clicos
En el ejemplo siguiente, construimos un etiquetado naturalmente ordenado sobre el digrafo etiquetado por V = {a, b, c, d, e, f, g, h}. A la derecha aparece el digrafo con el etiquetado naturalmente
ordenado, donde hemos colocado todos los vértices en alturas progresivas a fin de que se observe
fácilmente ese hecho (todos los arcos van de abajo a arriba, de ı́ndice menor a ı́ndice mayor).
a
b - rb
1
r
Rrc
6
Rrd
r?
U
R r r
e
h
g
h
g
h
g
b
Rrc
6
r?
rd
U
R r r
e
1
r
b4
h
r?
U
R r b
e
b3
g
2.3.2.2
1
r
b2
f
bb
h
g
b
b
b2
r
r?
U
R r r
e
1
rc
6
bd
h
g
b2
1
b
b
b2
r
r?
b3
U
R r r
e
b2
1
b
b2
b
b4
6
b
b4
6
b
b4
r?
U
Rr
b3
g
b
b3
7
b
b3
f
b
5
Rr
f
rx8
6
]
J
r
* xJ7
6 J
x6 r
J
M
Jrx5
x4r 6
I
@
@r x3
rx2
6
r
bc
f
f
f
f
1
b
b
5
f =8
b
b
x1
5
Ejercicios
3.4 Sea D el digrafo dado por la figura de la derecha:
(a) Hallar el ingrado y el exgrado de los vértices.
(b) Hallar los maximales y minimales de D . Si eliminamos
el vértice 3, ¿alguno de los minimales o máximales ha
dejado de serlo? ¿Cómo se justifica el resultado?
Obtener los maximales y minimales del nuevo digrafo
(c) El digrafo D es conexo. ¿Y si se eliminan los vértices
3 y 5?
-8s
$
@
5s
@
R s
@
- s
s11
7
9
I
@
6
6
@
1s
10s
@s6
$
'
6
6
s?
s? %
&
2@
3
@
R s
@
&
%
4
'
(d) De los caminos que salen del vértice 6 ¿cual es más largo?, ¿y el más corto? ¿Son únicos?
(e) ¿Están los vértices naturalmente ordenados? ¿Es acı́clico?
(f) ¿Pueden reordenarse los vértices para obtener un etiquetado naturalmente ordenado?
Comprobar que M es la matriz de adyacencia de D

[i] Hallar el ingrado y el exgrado de cada vértice.
[ii] Hallar los maximales y minimales.
[iii] Obtener la matriz M3 resultado de eliminar el vértice 3
de D . ¿Tiene maximales y minimales el nuevo digrafo?
¿Cuáles son?
¿Algún vértice que no lo era lo es ahora?, ¿y alguno
que lo era ha dejado de serlo?







M=







0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
1
1
0
0
0
0
0
0
0
0
0
0
0
1
0
1
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
1
0
0
1
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
1
0
















[iv] Eliminar también el vértice 5 y repetir el apartado anterior. Aplicar el algoritmo de
Warsall para comprobar si este digrafo es conexo.
[v] Usando la función Floyd construida para la primera parte de la práctica, obtener la matriz
de alcanze minimo. ¿Puede responderse con esos datos al apartado d)? ¿Por qué?
[vi] Comprueba si el digrafo está o no naturalmente ordenado.
Matlab 6.1.
34
2.3 Grafos acı́clicos
3.5 Considerar el grafo G2 del ejercicio 3.1. Construir un digrafo D , convirtiendo cada arista
{yi , yj }, con i < j , en el arco (yi , yj ) si i + j es par y en el arco (yj , yi ) si i + j impar.
(a) Dibujar el digrafo D . Si G2 era conexo, ¿D también lo es? ¿Por qué?
(b) Aplicar el algoritmo de ordenación natural para comprobar que es acı́clico.
(c) Redibujar el digrafo con la nueva ordenación de manera que se aprecie claramente.
Introducir la matriz D2 del digrafo (¿cómo se obtiene a partir de la de G2?)
[i] Aplicar sobre la matriz el algoritmo de ordenación natural:
• detectar un minimal, guardarlo como el primer elemento de un vector OrdNat y
eliminarlo del digrafo,
• detectar un minimal en el digrafo resultante, guardarlo como el segundo elemento
del vector OrdNat y eliminarlo del digrafo,
• .... hasta terminar los vértices.
[ii] Permutar las filas y columnas de la matriz D2 siguiendo la ordenación natural construida.
¿Que caracterı́stica destacarı́as de la nueva matriz?
? Escribir una función Diaciclico que con un bucle for repita de manera sucesiva las
instruciones del apartado [i] del ejercicio anterior.
3.6
? Modificarla, para adaptarla a un bucle while.
? ¿Que ócurrirá en el proceso si el digrafo no es acı́clico? Añadir una condición para que se
salga del bucle cuando detecte esta situación (ver órdenes continue, break y return).
3.7 Para la realización de un programa informático necesitamos usar 6 procesos informáticos A, B ,
C , D , E y F conocidos. En la estructura del programa deben usarse los procesos de manera
secuencial, sin embargo algunos de estos procesos requieren de la realización previa de otros de
ellos. Ası́, el proceso A debe realizarse con anterioridad a el proceso E (lo denotaremos por
A < E ), también B previo a C y a D (B < C, D ), C < E , D < C y F < A, D .
(a) Modelar con un digrafo la situación de precedencia de unos procesos con otros.
(b) Obtener una secuencia de los procesos de manera que no se realize ninguno más de una vez,
y que siempre que utilicemos un proceso se hayan realizado previamente los necesarios.
Práctica (Segunda y última parte).- Crear una función SinCiclos que tenga como argumento
de entrada la matriz de adyacencia de un grafo o digrafo simple, y tres argumentos de salida (que
denotaremos por sal 1, sal 2, sal 3). Con las siguientes caracterı́sticas:
? que sal 1=[(0)1,(0)1,(0)1] según sea (no) conexo, (no) dirigido y (no) acı́clico
? que sal 2=V OrdNat si el grafo es dirigido y acı́clico; y sal 2=[ ] en otro caso
? que sal 3=M OrdNat si el grafo es dirigido y acı́clico; sal 3=[ ] si es dirigido y no acı́clico; y
sal 3=L ∗ si es no dirigido
? que use los algoritmos de Floyd, de aciclicidad y de ordenación natural (en alguna de sus
versiones) como funciones externas, a las que llamará cuando sean necesarias.
Nota: Por V OrdNat denotamos al vector que contenga la ordenación natural construida.
Por M OrdNat denotamos a la matriz del digrafo una vez reordenada siguiendo la ordenación natural construida.
Por L ∗ denotamos la matriz de alcance mı́nimo y, naturalmente [ ] es la matriz vacı́a.
Matlab 6.1.
35

Documentos relacionados