Professional Documents
Culture Documents
Grafos
Grafos
Contenidos:
1. Concepto de grafo 10. Árboles
2. Algunos grafos 11. Árboles enraizados
característicos
12. Árboles generadores
3. Grado de un vértice
13. Grafos pesados. Caminos
4. Subgrafos mínimos
5. Matriz de adyacencia 14. Árboles generadores
6. Isormorfismo de grafos minimales
7. Caminos en un grafo
8. Conexión
9. Grafos eulerianos y
hamiltonianos
Bibliografia:
1. Rosen: Secciones 8.1, 8.2, 8.3, 8.4, 8.5, 8.6, 9.1, 9.4, 9.5
2. Johnsonbaugh: Secciones 8.1, 8.2, 8.3, 8.4, 8.5, 8.6,
9.1, 9.2, 9.3, 9.4
3. Epp: Capítulo 10
1. Concepto de grafo.
Intuitivamente, un grafo es una configuración de puntos del plano,
llamados vértices, y líneas que los unen, llamadas aristas.
Si hay más de una arista entre dos vértices, el grafo se dice
multigrafo. Si las aristas tienen una orientación, el grafo se dice
dirigido o digrafo. Si hay lazos (aristas que unen un mismo vértice),
se dice pseudografo.
e f g
V = {a, b, c, d, e, f, g}
E = {{a, b}, {a, d}, {a, e}, {b, f}, {c, g}, {d, f}, {e, f}}
O, abreviadamente, E = {ab, ad, ae, bf, cg, df, ef}.
Dibujar el grafo (V, E), siendo V = {a, b, c, d, e, f, g, h} y
E = {ac, ad, ae, bc, be, bh, cd, cg, de, dh, ef, eh, gh}.
Similarmente, un digrafo es un par G = (V, E), siendo como antes
V y E conjuntos finitos, los vértices y las aristas, respectivamente;
pero ahora las aristas son pares ordenados de elementos distintos
de V.
Ejemplo: a b
G
c d
V = {a, b, c, d}
E = {(a, b), (a, d), (b, c), (b, d), (c, a), (d, b)}
→ → → → → →
O, abreviadamente, E = {ab, ad, bc, bd, ca, db}
K4
K4 K5
K5 K6
K6
b) Los ciclos Cn
C4 C5
C3 C4 C5
c) Completos bipartitos Kn,m
K2,3 K2,5
K2,3 K3,3 K2,5
d) Redes Gn,m:
G2,3
G2,3 G3,3
G3,3 GG4,5
4,5
e) Los n-cubos Qn: Sus vértices son las secuencias de n bits.
Dos vértices son adyacentes si sus secuencias se diferencian
en un bit exactamente.
001
010
00
00 01 000
000 011
011
01 010
001
100
110
110
101 111
01 100 111
10 11
11 110101
Q Q3
Q
Q22 3
e f g e f
a b a b
c d c d
¿Es K2,3 un subgrafo de Q3?
001
010
000
000 011
011
010
001
100
110
110
101 111
100 111
K2,3 110101
Q3
Q 3
¿Y G4,2?
G4,2
0 1 1 0 0
e d d'
a b 1
e 5 2
d c 4 3
7. Caminos en un grafo.
En un grafo (o digrafo), un camino es una secuencia finita de
→
aristas del grafo de la forma [v0v1, v1v2 , v2v3, ..., vn-1vn] (vivi+1, si el
grafo es dirigido). El entero n es la longitud del camino, v0 es el
origen del camino y vn el final.
En lugar de las aristas, también puede considerarse la sucesión de
los vértices [v0, v1, v2 , ..., vn-1, vn].
Ejemplo:
a b → → → → → →
[ ad, db, bc, ca, ab, bd ]
o
[ a, d, b, c, a, b, d ]
c d
Si el origen del camino coincide con el final, el camino se dice
cerrado. En otro caso se dice abierto.
Un camino (abierto) se dice simple, si en la sucesión de vértices no
se repite ninguno. Un circuito es un camino cerrado que no repite
aristas. Un ciclo es un circuito con todos los vértices distintos,
excepto el primero y el último.
Ejemplo: 2
1
3
5
4
Circuito: [12, 23, 34, 42, 25, 51] = [1, 2, 3, 4, 2, 5, 1]
Ciclo: [12, 23, 34, 45, 51] = [1, 2, 3, 4, 5, 1].
Teorema: Sea un grafo (o un digrafo) con n vértices v 1, v2, ..., vn y
matriz de adyacencia A. El número de caminos de longitud k del
vértice vi al vértice vj es Ak[j,i].
Ejemplo: a b c d
a b a 1 1 1 1
A5 : b 3 2 2 2
c 2 2 1 1
c d d 3 3 2 1
b
a c
En este grafo, a está conectado con f ,
d
pero no lo está con c.
e g
f
b
a c
d En este otro grafo, todos los vértices
están conectados.
e g
f
La relación “estar conectado” es una relación de equivalencia en el
conjunto de vértices. En cada clase de equivalencia están todos los
vértices conectados entre sí. Todas ellas constituyen una partición
del conjunto de vértices.
El grafo inducido por cada clase de equivalencia se denomina
componente conexa del grafo.
Un grafo se dice conexo si tiene una sola componente.
b b
a c a c
d d
e g e g
f f
Dos componentes Grafo conexo
En un digrafo, dos vértices u y v están conectados si hay sendos
caminos que nos llevan de u a v y de v a u.
De nuevo, esta relación “estar conectado” es de equivalencia.
Ahora, el grafo inducido por cada clase de equivalencia se
denomina componente fuertemente conexa del digrafo.
Un digrafo se dice fuertemente conexo si tiene una sola componente
fuertemente conexa.
b c b c
a a
d d
Fuertemente conexo ¿Es fuertemente conexo?
9. Grafos eulerianos y hamiltonianos.
En un grafo conexo, un camino se dice euleriano si contiene todas
sus aristas sin repetir ninguna.
Un grafo se dice euleriano si contiene un circuito euleriano.
3
1
4
2
5
PROPIEDADES:
1. El número de vértices es igual al de aristas más 1.
2. Si se quita una arista, el grafo resultante no es conexo.
3. Si se añade una arista, aparece un ciclo.
4. Cada par de vértices están conectados por un único camino
simple.
11. Arboles enraizados.
Un árbol enraizado es un árbol en el que se ha destacado un vértice,
la raíz.
r
a b c d e f g
k
r g h l
f i b c h
a j
d e m
j k l m n
i
n
Fijada la raíz r, sea v otro vértice y [v0 = r, v1, v2 , ..., vn-1, vn = v] el
único camino simple de r a v. El entero n llama nivel de v. Los
vértices r, v1, v2 , ..., vn-1 son los ascendientes de v, siendo vn-1 el
padre de v. Los descendientes de v son los vértices que tienen a v
como ascendiente. Así, los hijos de v, son los vértices que tienen a
v como padre.
r Si v = e :
g Nivel: 3
f k Ascendientes: r, g, h
l Padre: h
b c h
a j Descendientes: i, n
d e m Hijos: i
i
Si la raíz fuese i, ¿cuantós
n descendientes tendría e?
El mayor de los niveles de los vértices del árbol es su altura.
Un vértice sin hijos se llama hoja. Los vértices con hijos se
denominan vértices internos.
Si cada vértice interno tiene a lo sumo n hijos, el árbol se dice
n−ario. Si tiene exactamente n hijos, completamente n−ario.
r
Arbol cuaternario.
f g
k Altura: 5.
l
b c h Vértices internos: r, f, g, c, h, e, i.
a j
d e Hojas: k, a, j, b, l, d, m, n.
m
i
¿Y si la raíz fuese i ?
n
12. Arboles generadores.
Fijado un grafo conexo, un árbol generador es un árbol contenido
en el grafo y conteniendo todos los vértices del grafo.
Arboles generadores de los grafos K5 y G4,3 :
Teorema: Todo grafo conexo tiene árboles generadores.
Algoritmo para calcular un árbol generador:
Sea G=(V, E) un grafo conexo y r∈V.
1. V' = {r}, E' = ∅.
2. Mientras que V-V' ≠ ∅:
2.1 Encontrar v∈V-V' y w∈V' tal que vw∈E
2.2 Agregar v a V' y vw a E'.
Al finalizar el bucle, A=(V, E' ) es árbol generador de G.
g Ejecutar este
f h i j algoritmo en el Q3
k l
b) Búsqueda en anchura: Este otro algoritmo hace uso de una cola:
una lista ordenada en la que entran los vértices por un extremo y
salen por el otro. En cada paso, el vértice w que está al comienzo de
la cola ya ha sido añadido al árbol; esto es, w∈V'. Se consideran
todos los vértices de V-V' adyacentes con w y se agregan al final de
la cola; a continuación, w sale de la cola. Se termina cuando la cola
queda vacía.
No es necesario que el grafo sea conexo.
Ejemplo:
a b c d e
Ejecutar este
f g h i j algoritmo en el Q3
k l
13. Grafos pesados. Caminos mínimos.
Un grafo (o digrafo) se dice pesado o etiquetado si todas las aristas
tienen asignado un número positivo: su peso.
En un grafo pesado, la longitud de un camino es la suma de los
pesos de las aristas del camino. Si u y v son vértices del grafo, la
distancia de u a v es el mínimo de las longitudes de los caminos con
origen en u y extremo en v (¥, si no existe ningún camino).
a 12 b 18 c 9 d
d(a,h) = 44
14 11 Camino de longitud mínima:
3 6
6 5 19 [a, e, f, g, c, d, h]
e f g h
d(b,h) = ?
Algoritmo de Dijkstra: Dado G=(V, E) un grafo conexo pesado y
a∈V, el algoritmo calcula un árbol generador A con raíz a, de modo
que el único camino simple de a a v en A es el camino de distancia
mínima de a a v en G.
En el siguiente pseudocódigo, π(vx) es el peso de la arista vx; δ(x)
es la distancia de a a x en A y ρ(x) el padre de v en A.
1. V' ={a}, E' = ∅, v = a, δ(a) = 0 y, para x∈V-V' : δ(x) = ∞.
2. Mientras que V-V' ≠ ∅:
2.1 Para x∈V-V' :
Si vx∈E y δ(x) > δ(v)+π(vx) , entonces
δ(x) = δ(v)+π(vx), ρ(x) = v.
2.2 Encontrar w∈V-V' con δ(w) minimo.
2.3 Agregar w a V' y ρ(w)w a E'.
2.4 v←w.
a 7 b 6 c 5 d 5 e
Dijkstra:
3 9 3 2 8 4 9 2
6
f 5 g 8 3 8 j
h i
V' δ ρ b c d e f g h i j
a 0 - 7,a ∞ ∞ ∞ 3,a 9,a ∞ ∞ ∞
f 3 a 7,a ∞ ∞ ∞ - 8,f ∞ ∞ ∞
b 7 a - 13,b ∞ ∞ - 8,f ∞ ∞ ∞
g 8 f - 13,b ∞ ∞ - - 16,g ∞ ∞
c 13 b - - 18,c ∞ - - 15,c 21,c ∞
h 15 c - - 18,c ∞ - - - 18,h ∞
d 18 c - - - 23,d - - - 18,h ∞
i 18 h - - - 23,d - - - - 26,i
e 23 d - - - - - - - - 25,e
j 25 e - - - - - - - - -
14. Arboles generadores minimales.
Dado un grafo conexo y pesado, un árbol generador minimal es un
árbol generador tal que la suma de los pesos de las aristas del árbol
es la mínima posible.
Ejemplo: Arbol generador minimal del K5:
8
7
8
6 6
6 5
5 6 5
9
9
5 ¿Algún otro ? 5
Algoritmo de Prim: Dado un grafo conexo pesado G=(V, E) y a∈V,
este algoritmo calcula un árbol generador minimal con raíz a
añadiendo en cada paso una arista de peso mínimo que une un
vértice ya agregado con otro no agregado.
V' δ ρ b c d e f g h i j
a 0 - 7,a ∞ ∞ ∞ 3,a 9,a ∞ ∞ ∞
f 3 a 7,a ∞ ∞ ∞ - 5,f ∞ ∞ ∞
g 5 f 3,g 7,g ∞ ∞ - - 8,g ∞ ∞
b 3 g - 6,b ∞ ∞ - - 8,g ∞ ∞
c 6 b - - 5,c ∞ - - 2,c 8,c ∞
h 2 c - - 5,c ∞ - - - 3,h ∞
i 3 h - - 4,i 9,i - - - - 8,i
d 4 i - - - 5,d - - - - 8,i
e 5 d - - - - - - - - 2,e
j 2 e - - - - - - - - -
Algoritmo de Kruskal: En este algoritmo, el árbol generador
minimal se obtiene añadiendo en cada paso una arista de peso
mínimo sin que forme ciclos con las anteriormente añadidas.
Para hacerlo de modo eficiente, se ordenan primero las aristas del
grafo por su peso, en forma creciente. Después se parte el conjunto
de vértices en conjuntos unitarios. Seguidamente, se va recorriendo
la lista ordenada de las aristas. Si la arista une dos vértices del
mismo conjunto, se descarta. Si son de dos conjuntos distintos, se
añade la arista y se unen los dos conjuntos. El proceso concluye
cuando se ha completado el árbol generador, tras agregar |V| -1
aristas.
Kruskal:
a 4 b 10 c 3 d a b c d
4 3
5 4 7 6 5 6 4 7 5
e 8 f 9 g 5 h e f 9 g h
4 2 7 3 4 2 2 3 4 2
i 3 j 9 k 5 l i 3 j k l