You are on page 1of 45

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.

Grafo simple Multigrafo Pseudodigrafo


Formalmente, un grafo (simple) es un par G = (V, E), siendo V un
conjunto finito, llamado conjunto de vértices, y E otro conjunto
finito cuyos elementos son subconjuntos de dos elementos de V, las
aristas.
Ejemplo: a b c
G d

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}

Dibujar el digrafo (V, E), siendo V = {a, b, c, d, e, f, g} y


→ → → → → → → → → →
E = {ac, ad, ae, bc, be, cd, cg, de, ef, eg}.
2. Algunos grafos característicos.
a) Los grafos completos Kn: contienen todas las aristas

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

¿Cuántos vértices tiene Q4? ¿Y aristas?


3. Grado de un vértice.
En un grafo (no dirigido), el grado de un vértice es el número de
aristas que en él confluyen.
a b c gr(a) = 3, gr(b) = 2,
Ejemplo:
d gr(c) = 1, gr(d) = 2,
gr(e) = 2, gr(f) = 3,
e f g gr(g) = 1.

Teorema: La suma de los grados de todos los vértices es igual al


doble del número de aristas.
(El teorema también es válido para multigrafos y pseudografos)

¿Cuántas aristas tiene Kn?


En un grafo dirigido, el grado de entrada de un vértice es el
número de aristas que a él llegan; el grado de salida es el número
de aristas que de él salen.
Ejemplo:
a b gr.ent(a) = 1, gr.sal(a) = 2
gr.ent(b) = 2, gr.sal(b) = 2
gr.ent(c) = 1, gr.sal(c) = 1
c d gr.ent(d) = 2, gr.sal(d) = 1

Teorema: La suma de los grados de entrada de todos los vértices es


igual a la suma de los grados de salida e igual al número de aristas.
(El teorema también es válido para multidigrafos y pseudodigrafos)
4. Subgrafos.
En general, un subgrafo de un grafo G (o digrafo) es un grafo H
obtenido eliminando vértices o aristas de G.
Ejemplos:
a b c a b c
d d

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

G2,3 G3,3 G4,5


5. Matriz de adyacencia.
Sea un grafo (o un digrafo) con n vértices v1, v2, ..., vn. La matriz
de adyacencia del grafo es la matriz cuadrada de orden n cuya

entrada [i,j] es 1 si vjvi (o vjvi) es una arista del grafo; y es 0 si
dicha arista no pertenece al grafo.
Ejemplos: a b c d
a b a 0 0 1 0
b 1 0 0 1
c 0 1 0 0
d 1 1 0 0
c d
¡Se forma por columnas!
a b c d e f g
a b c a 0 1 0 1 1 0 0
d b 1 0 0 0 0 1 0
c 0 0 0 0 0 0 1
e f g
d 1 0 0 0 0 1 0
e 1 0 0 0 0 1 0
f 0 1 0 1 1 0 0
g 0 0 1 0 0 0 0

Si el grafo es no dirigido, la matriz de adyacencia es simétrica; si


es dirigido, no tiene porque serlo.
Sumando las filas o columnas, obtenemos los grados de cada
vértice.
0 1 1 0 0 1
1 0 1 1 1 0
Dibujar el grafo cuya matriz 1 1 0 1 1 1
de adyacencia es la siguiente: 0 1 1 0 1 0
0 1 1 1 0 1
1 0 1 0 1 0

0 1 1 0 0

Dibujar ahora el digrafo 1 0 1 0 1


correspondiente a esta otra 0 0 0 1 1
matriz: 0 1 1 0 1
0 1 0 1 0
6. Isomorfismo de grafos.
Intuitivamente, dos grafos isomorfos son dos representaciones
gráficas del mismo grafo.
Formalmente: dos grafos (o digrafos) G = (V, E) y G' = (V', E') se
dicen isomorfos si existe f : V  V' biyectiva tal que la arista uv∈E
si y sólo si la arista f (u)f (v)∈E' ( uv∈E ⇔ f (u)f (v)∈E' ).
Tal f se dice un isomorfismo.
Ejemplos:
f
a b a' d'
f(a) = a'
f(b) = b'
f(c) = c'
c d f(d) = d' c' b'
b b' c'
f
a c f(x) = x' a'

e d d'

Nótese que dos grafos isomorfos tienen el mismo número de


vértices y aristas, los mismos grados de los vértices, mismas
matrices de incidencia, etc.
Encontrar un isomorfismo entre los siguientes grafos:

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

¿Cuantos caminos de longitud 5 hay de d a c?


¿Cuántos caminos cerrados de longitud 5 pasan por a?
8. Conexión.
En un grafo (no dirigido), un vértice u está conectado con otro
vértice v si hay un camino con origen en u y final en v.

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

Camino euleriano: Grafo euleriano


[13, 32, 24, 41, 15, 52]
Teorema: Sea un grafo (o multigrafo) conexo.
a) Tiene un camino abierto euleriano si y sólo si todos sus
vértices excepto dos tienen grado par.
b) Es euleriano si y sólo si todos sus vértices tienen grado par.

Camino No hay Grafo


euleriano camino euleriano
euleriano
Encontrar un circuito
K5
euleriano en este grafo
El problema de los puentes de Königsberg:

¿Es posible dar un paseo por la ciudad


cruzando cada uno de los siete puentes
del río una única vez y regresando al
punto de partida?

Solución: Representando por un punto


cada orilla del río y trazando una línea
entre estos puntos por cada puente,
tenemos un multigrafo.
Como los grados de los vértices no
son todos pares (de hecho, ninguno es
par), no existe un camino euleriano.
En un grafo conexo, un camino se dice hamiltoniano si contiene
todos sus vértices sin repetir ninguno.
Un grafo se dice hamiltoniano si contiene un ciclo hamiltoniano.

Camino hamiltoniano Grafo hamiltoniano

Teorema de Ore: Sea G = (V, E) un grafo conexo con n vértices.


Si ∀ u,v∈V tales que uv∉E grad(u) +grad(v) ≥n, entonces G es
hamiltoniano.
10. Arboles.
Un árbol es un grafo simple, conexo y sin ciclos.

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.

Ejecutar este algoritmo en el Q3

¿Cómo encontrar v y w de modo eficiente cuando el número de


vértices y aristas es elevado?
a) Búsqueda en profundidad: Este algoritmo hace uso de una pila:
una lista ordenada en la que van entrando y saliendo los vértices
por la cabeza de la pila. En cada paso, el vértice w que está en la
cabeza de la pila ya ha sido añadido al árbol; esto es, w∈V'. Se
busca un vértice v∈V-V' adyacente con w y se agrega a la pila; si tal
no existe, se extrae w de la pila. Se termina cuando la pila queda
vacía.
No es necesario que el grafo sea conexo.
Ejemplo:
a b c d e

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.

El pseudocódigo del algoritmo es muy parecido al de Dijstra:


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) > π(vx) , entonces
δ(x) = π(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
Prim:
3 9 3 2 8 4 9 2
7
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 ∞ ∞ ∞ - 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

Lista ordenada de aristas


ej, hl, cd, gk, ij, ab, be, ei, hk, ae, ch, gh, kl, cg, dh, bf, fj, ef, fg jk, bc

You might also like