Está en la página 1de 15

Curso de doctorado Problemas de optimizaci on sobre grafos

Departament de Matem`atica
Conexion en grafos y digrafos
Recorridos en un grafo (digrafo): deniciones
Sea G = (V, E) un grafo y sean u y v dos vertices de G.
Un u v recorrido (walk) en el grafo G es una secuencia nita de vertices, que empieza en u
y acaba en v, en la cual cada par de vertices consecutivos son adyacentes entre si; es decir,
u = u
0
, u
1
, . . . u
l1
, u
l
= v, donde u
i1
u
i
E para cada i = 1, 2, . . . , l.
El valor l (numero de pasos o aristas utilizadas) representa la longitud del recorrido.
Un u v recorrido es abierto (respectivamente, cerrado) si u = v (resp., u = v).
Un solo vertice se considera un recorrido de longitud 0 (recorrido trivial).
Un sendero (trail ) es un recorrido en el cual no se repite ninguna arista. Un circuito es un
sendero cerrado no trivial.
Un camino (path) es un recorrido en el cual no se repite ningun vertice. Un ciclo es un circuito
(de longitud l 3) donde todos los vertices, excepto el primero y el ultimo, son distintos.
Las deniciones anteriores se extienden de manera natural para el caso de un grafo dirigido (en
cada paso se utiliza un arco en el mismo sentido de avance del recorrido).
Recorridos en un grafo: ejemplos y propiedades
a,b,c,b,d a-d recorrido de longitud 4
a,b,d a-d camino de longitud 2
a,d,c,b,d,e a-e sendero de longitud 5
a,d,e,g,f,c,d,b,a a-a circuito de longitud 8
a,d,b,a a-a ciclo de longitud 3
Proposici on 1. Todo u v recorrido en un grafo (digrafo) contiene un u v camino.
Recorridos y matriz de adyacencia: ejemplo (I)
A
2
= A A =
_
_
_
_
_
_
_
_
_
_
_
0 1 0 1 1
1 0 0 1 0
0 1 0 0 0
0 0 1 0 1
1 0 1 0 0
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
0 1 0 1 1
1 0 0 1 0
0 1 0 0 0
0 0 1 0 1
1 0 1 0 0
_
_
_
_
_
_
_
_
_
_
_
=
_
_
_
_
_
_
_
_
_
_
_
2 0 2 1 1
0 1 1 1 2
1 0 0 1 0
1 1 1 0 0
0 2 0 1 1
_
_
_
_
_
_
_
_
_
_
_
a
(2)
11
= 0 0 + 1 1 + 0 0 + 1 0 + 1 1
Recorridos y matriz de adyacencia: ejemplo (II)
A
3
= A
2
A =
_
_
_
_
_
_
_
_
_
_
_
2 0 2 1 1
0 1 1 1 2
1 0 0 1 0
1 1 1 0 0
0 2 0 1 1
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
0 1 0 1 1
1 0 0 1 0
0 1 0 0 0
0 0 1 0 1
1 0 1 0 0
_
_
_
_
_
_
_
_
_
_
_
=
_
_
_
_
_
_
_
_
_
_
_
1 4 2 2 3
3 1 3 1 1
0 1 1 1 2
1 2 0 2 1
3 0 2 2 1
_
_
_
_
_
_
_
_
_
_
_
a
(3)
12
= 2 1 + 0 0 + 2 1 + 1 0 + 1 0
Recorridos y matriz de adyacencia: relacion
Teorema 1. Sea G = (V, E) un digrafo (grafo) con conjunto de vertices V = {v
1
, v
2
, . . . , v
n
}
y sea A = (a
ij
) la matriz de adyacencia de G. Entonces, el coeciente (i, j) de la matriu A
k
es
el numero total de v
i
v
j
recorridos en G de longitud k, para todo k N.
Observaciones:
Si P = (p
ij
) es una matriz estocastica (matriz no negativa tal que

n
j=1
p
ij
= 1, para cada
la i = 1, . . . , n) sus coecientes representan probabilidades de transici on entre los
respectivos estados. Entonces, el coeciente (i, j) de la matriz P
k
nos da la probabilidad de
transici on del estado S
i
al estado S
j
en k pasos.
La matriz de accesibilidad R = (r
ij
) de un digrafo (grafo) G = (V, E) de orden n, que viene
denida por
r
ij
=
_
_
_
1, si existe un v
i
v
j
recorrido en G
0, en caso contrario,
puede calcularse directamente a partir de las sucesivas potencias de la matriz de adyacencia:
R = I + A + + A
n1
, cuando las operaciones elementales utilizadas son las booleanas.
Matriz de accesibilidad: algoritmo de computo (I)
Algoritmo 1.
Precondici on: A es la matriz de adyacencia de un digrafo G de orden n.
algoritmo matrizAccesibilidad(A, n) es
var
R: matriz(n);
fvar
R := I + A;
para k := 2 a n 1 hacer
R := I + A R;
fpara
falgoritmo
Postcondicion: R = I + A + + A
n1
.
R es la matriz de accesibilidad, si las operaciones elementales son las booleanas.
Complejidad: O(n
4
).
Matriz de accesibilidad: algoritmo de computo (II)
Algoritmo 2 (Warshall).
algoritmo Warshall(A, n) es
R := I + A;
para k := 1 a n hacer
para i := 1 a n hacer
para j := 1 a n hacer
si r
ij
= 0 entonces r
ij
:= r
ik
r
kj
;
fsi
fpara
fpara
fpara
falgoritmo
Idea: Los coecientes de la matriz resultante en el paso k nos indican si hay acceso entre los
respectivos vertices utilizando como vertices de paso {v
1
, . . . , v
k
}.
Complejidad: O(n
3
).
Matriz de accesibilidad de un digrafo: ejemplo
A =
_
_
_
_
_
_
_
_
_
_
_
0 1 0 1 1
1 0 0 1 0
0 1 0 0 0
0 0 1 0 1
1 0 1 0 0
_
_
_
_
_
_
_
_
_
_
_
Paso 1 Paso 2 Paso 3 Paso 4
Algoritmo 1
_
_
_
_
_
_
_
_
_
_
1 1 0 1 1
1 1 0 1 0
0 1 1 0 0
0 0 1 1 1
1 0 1 0 1
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
1 1 1 1 1
1 1 1 1 1
1 1 1 1 0
1 1 1 1 1
1 1 1 1 1
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
_
_
_
_
_
_
_
_
_
_
Algoritmo de Warshall
_
_
_
_
_
_
_
_
_
_
1 1 0 1 1
1 1 0 1 1
0 1 1 0 0
0 0 1 1 1
1 1 1 1 1
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
1 1 0 1 1
1 1 0 1 1
1 1 1 1 1
0 0 1 1 1
1 1 1 1 1
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
1 1 0 1 1
1 1 0 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
_
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
_
_
_
_
_
_
_
_
_
_
Conexion en grafos: denicion y ejemplo
Un grafo G = (V, E) es conexo si para cada par de vertices u y v de G hay un u v camino en
G.
Un componente conexo de un grafo G es un subgrafo conexo de G que es maximal respecto a
dicha propiedad (no esta contenido en ningun otro subgrafo conexo de G).
Observaciones: :
Un grafo G es conexo si y solo si tiene un unico componente conexo. Equivalentemente, dado
un vertice v de G, el componente conexo de G que contiene a v tambien debe incluir a todos
los demas vertices de G.
Un grafo es conexo si y solo si su matriz de accesibilidad es la matriz toda de unos.
Todo grafo no conexo se descompone en uni on de grafos conexos (sus componentes conexos).
Un arbol es un grafo conexo sin ciclos. Un arbol generador de un grafo G es un subgrafo
generador de G que ademas es un arbol.
Test de conexion: algoritmo DFS
El algoritmo DFS se basa en la estrategia de busqueda en profundidad prioritaria (Depth First
Search).
Dado un grafo G = (V, E) y un vertice v de G la estrategia que se emplea es la siguiente:
En cada paso nos movemos, si es posible, a nuevo vertice (vertice aun no visitado); es decir,
priorizamos la exploracion de una nueva va hasta el nal:
v = v
0
, v
1
, . . . , v
k1
, v
k
.
Cuando nos encontramos en un vertice (v
k
) cuyos vecinos ya han sido todos visitados,
entonces retrocedemos al vertice (v
k1
) que nos ha llevado a el y volvemos a reanudar la
busqueda de una nueva va.
El procedimiento naliza cuando hayamos regresado al vertice inicial v y hayamos
comprobado que no quedan vertices adyacentes al mismo por visitar.
De este modo nos aseguramos haber visitado todos aquellos vertices que son accesibles desde el
vertice v, es decir, que forman parte de su mismo componente conexo.
Algoritmo DFS: formulaci on y coste
Entrada: G = (V, E) es un grafo y v es un vertice de G.
Salida: lv es la lista de vertices del componente conexo de G que contiene a v y la es la lista de aristas de un
arbol generador de dicho componente.
algoritmo DFS(G, v) es
var
l
aux
: lista de vertices; p: pila de vertices; v
a
, w: vertices;
fvar
l
aux
:= V \ {v
0
}; p := {v
0
};
lv := {v}; la = {};
mientras p = hacer
v
act
:= cima(pila);
si v
act
es adyacente a un vertice w L entonces
p := empilar(p, w); L := eliminar(L, w);
lv := inserir(lv, v); la := inserir(la, v
act
w);
sin o p := desempilar(p);
fmientras
falgoritmo
Coste: O(m), donde m es la medida de G, utilizando como estructura de datos la lista de listas de adyacencia y
marcando en cada sublista los vertices ya visitados.
Algoritmo DFS: ejemplo
Inicializacion (tomando v = a):
p = {a}, l
aux
= {b, c, d, e, f, g}
lv = {a}, la = {}.
p l
aux
v
act
:= cima(p) w accion lv la
a {b, c, d, e, f, g} a b empilar(p,b) {a, b} {ab}
ab {c, d, e, f, g} b c empilar(p, c) {a, b, c} {ab, bc}
abc {d, e, f, g} c d empilar(p,d) {a, b, c, d} {ab, bc, cd}
abcd {e, f, g} d desempilar(p) {a, b, c, d} {ab, bc, cd}
abc {e, f, g} c e empilar(p,e) {a, b, c, d, e} {ab, bc, cd, ce}
abce {f, g} e desempilar(e) {a, b, c, d, e} {ab, bc, cd, ce}
abc {f, g} c desempilar(c) {a, b, c, d, e} {ab, bc, cd, ce}
ab {f, g} b desempilar(b) {a, b, c, d, e} {ab, bc, cd, ce}
a {f, g} a desempilar(a) {a, b, c, d, e} {ab, bc, cd, ce}
{a, b, c, d, e} {ab, bc, cd, ce}
Un applet del algoritmo DFS: http://griho.udl.es/josepma/eines/graphalgor.html
Algoritmo DFS: correccion
Teorema 2. Sea G = (V, E) un grafo y sea v un vertice de G. Sean lv y la el conjunto de
vertices y aristas de G obtenidos mediante el algoritmo DFS(G, v). Entonces, el subgrafo
H = (lv, la) es un arbol generador del componente conexo de G que contiene a v.
Corolario 1. Sea G = (V, E) un grafo de orden n y medida m. Si G es conexo entonces
m n 1.
Observaciones:
El recproco del corolario anterior no es cierto (p.e. el grafo resultante de la union de un grafo
ciclo de orden n y un grafo nulo de orden 1 no es conexo y sin embargo su medida es igual al
orden menos una unidad).
Los arboles son precisamente los grafos conexos cuya medida es la mnima posible
(m = n 1).
Conexion en digrafos: deniciones y ejemplos
Un digrafo G = (V, E) es fuertemente conexo si para cada par de vertices u y v de G hay un
u v camino en G.
Un digrafo G = (V, E) es unilateralmente conexo si para cada par de vertices u y v de G hay
o bien un u v camino o bien un v u camino.
Un digrafo G = (V, E) es debilmente conexo si el grafo subyacente es conexo. (El grafo
subyacente

G de G tiene el mismo conjunto de vertices y sus adyacencias vienen denidas
por: {u, v} es una arista de

G si y solo si (u, v) o (v, u) es un arco de G).
El digrafo G
1
es debilmente conexo, el digrafo G
3
es unilateralmente conexo y el digrafo G
2
es
fuertemente conexo.
Hay algoritmos ecientes (p.e. algoritmo de Tarjan de coste O(m)) para determinar los
componentes fuertemente conexos de un digrafo (vease: D. Jungnickel, Graphs, Networks and
Algorithms).

También podría gustarte