You are on page 1of 11

10) Nuñez, Ana. (2010).

“Introducción a la Teoría de Grafos” en Matemática computacional,


pp. 1-11.

Introducción a la Teorı́a de Grafos


Ana Núñez
http://www.cie.uva.es/algebra/ana/matcom.html
16 de febrero de 2010

1. Introducción
El trabajo que vamos a desarrollar tiene como marco la Teorı́a de Grafos. La Teorı́a
de Grafos es parte de la Matemática Discreta, y tiene ya varios siglos de antigüedad.
Sin embargo, el creciente uso de los ordenadores ha conducido a un enorme crecimiento
del estudio de los aspectos computacionales de las diferentes disciplinas. Las aplicaciones
de la Teorı́a de Grafos se extienden a una enorme variedad de campos: Matemáticas,
Informática, Fı́sica, Quı́mica, Biologı́a, Ingenierı́a, Sociologı́a, Comercio...
Como consecuencia se ha producido una revitalización del interés que la Teorı́a de
Grafos despierta, centrado en gran medida en el diseño y análisis de Algoritmos.
La ciudad de Könisberg, hoy Kaliningrado (ciudad natal de Immanuel Kant), en la
antigua Prusia, está situada a las orillas del rı́o Pregel. Este rı́o rodea la isla de Kneiphof, y
en el siglo XVIII habı́a siete puentes uniendo las cuatro zonas de tierra en que se distribuı́a
la ciudad:

Se cuenta que era un entretenimiento para los habitantes de Könisberg el plantearse si


se podı́an recorrer los siete puentes y volver al punto de partida sin pasar más que una vez
por cada uno. El problema llegó a oı́dos de Leonhard Euler, quien observó que se trataba
de un problema de naturaleza diferente de los de la geometrı́a tradicional. De hecho, él
amplió el problema al caso de un número arbitrario de islas, orillas y puentes, y encontró la
solución, que fue publicada en 1736 en el artı́culo “Solutio problematis ad geometriam situs
pertinentis”, en Commetarii Academiae Scientiarum Imperialis Petropolitanae.
¿Cómo generalizó el problema? ¿cómo lo resolvió?
Obviamente el problema de los puentes no tiene nada que ver con medidas o ángulos.
El punto clave está en conocer si las islas y orillas están conectadas o no por puentes, y
por cuántos. Esta situación es fácilmente representada en un esquema de puntos y lı́neas:

x sH
HH
HH
H
y s s w
H




z s

2. Conceptos básicos
Definición 1 Un grafo G con n vértices y m lados consiste en:

Un conjunto de vértices, V (G) = {v1 , . . . , vn }.

Un conjunto de aristas, A(G) = {a1 , . . . , am }.

Una relación que asigna a cada arista dos vértices (quizá iguales), que se llaman
sus extremos.

2.1. Algunos términos:

Existe también el concepto de grafo dirigido (digrafo), similar salvo que


la relación asigna a cada arista un par ordenado de vértices (quizá iguales),
que se llaman su extremo inicial (el primer vértice del par) y su extremo
final (el segundo).

Un lazo es una arista cuyos extremos son iguales.

Lados paralelos o múltiples son lados con los mismos extremos.

Un grafo simple es un grafo sin lazos ni lados múltiples.

2.2. Dibujo de un grafo:


Los grafos se representan dibujando un punto por cada vértice y para cada arista una
curva que una los puntos que representan sus extremos. Por ejemplo:

2
a6 a4
x3r a5 r x4 x3r r x4
H a3
H a
H
a2 H a3 7 a4 a1 a2
H 
H
H al a6
r a1 HH
r  r5 r
x1 x2 a x1 x2
 8

2.3. Dibujo de un digrafo:


En un digrafo, la elección de los extremos inicial y final asigna una “dirección” a la
arista, que en el dibujo se ilustra mediante una flecha.

u
r

6

 ]
JJ
y r
J
Y
H HH
J
H

H J

HH rx J

* H J

 H
H J
wr 

H- Jrv
H

No hay que confundir el dibujo con el grafo, un mismo grafo puede tener dos dibujos
distintos, pues lo importante es la relación entre vértices y aristas, no la forma en que se
representan:

u
u v u uw

J @

J @
y u
J @
HHH
J @
H

H J @

HHux J @

 H J @

 H
H J @ x
u
w

 HH Juv u u @u uy

2.4. Caminos en grafos


Definición 2 Sea G un grafo.

Un camino (walk) en G es una sucesión de vértices y aristas

v0 , a1 , v1 , a2 , v2 , . . . , vs−1 , as , vs

tal que ai tiene por extremos vi−1 y vi .

Su longitud es s.

3
Se dice que el camino es un ciclo si vs = v0 .

Por ejemplo:

a6
x3 a5
s s x4
HH
H a7
HH x3 , a5 , x4 , a5 , x3 , a2 , x1 , a1 , x2 , a8 , x2
a2 H a4
HaH
3 x1 , a6 , x4 , a7 , x3 , a2 , x1
H
a1 HH
s Hs
x1 x2
a8


3. Grafos Eulerianos
Volvamos al problema inicial propuesto por Euler, que ahora se traduce en lo siguiente:

Problema: Dado un grafo, ¿cuándo existe un ciclo que pasa una y sólo una vez por
todas sus aristas?

Tal ciclo recibe el nombre de ciclo euleriano.

Un grafo en el que existe un ciclo euleriano recibe el nombre de grafo euleriano.

¿Es el grafo de los puentes de Könisberg euleriano? En general, ¿cómo saber si un


grafo lo es?
Al recorrer un camino en un grafo, cada vez que se llega a un vértice, si no se ha
completado el recorrido, se vuelve a salir.
Es claro por lo tanto que si un ciclo recorre todas las aristas, y cada arista sólo se
recorre una vez, entonces el vértice es extremo de un número par de aristas.
Por otra parte, un ciclo euleriano pasa a la fuerza por todos los vértices del grafo que
sean extremo de alguna arista, es decir, todos los vértices están conectados por el ciclo.
Esta condiciones necesarias son también suficientes.

3.1. Grado de un vértice. Grafo conexo:


Definición 3 El grado de un vértice en un grafo es el número de aristas que
tienen a ese vértice por extremo, contando los lazos dos veces.

Un vértice es aislado si tiene grado 0.

Definición 4 Un grafo es conexo si cada par de vértices se puede unir por un camino.

4
3.2. Caracterización de grafos eulerianos:
Teorema 5 Un grafo es euleriano si y sólo si al quitar sus puntos aislados es conexo y
todos sus vértices tienen grado par.

3 r
HH
El grafo de Könisberg no es euleriano: HH
5 r H
r 3


3 r

La demostración del teorema pasa por el uso de un algoritmo de construcción del ciclo
euleriano, algoritmo intuitivo basado en la más pura lógica.

3.3. Algoritmo:

Se comienza por un vértice no aislado cualquiera y se van recorriendo desde


allı́ aristas incidentes; a medida que se pasa por una arista, se elimina del
grafo.

Este proceso continúa hasta que no se puede seguir, en cuyo caso, dada la
hipótesis sobre los grados pares, se ha vuelto al punto de partida, esto es,
se tiene un ciclo.

Si después de esto todavı́a quedan aristas sin recorrer, la conexión del grafo
implica que alguna de ellas tiene por extremo uno de los vértices por los
que ya se pasó. Se repite el proceso anterior desde este vértice (sin tener
en cuenta las aristas ya eliminadas), con lo que se construye otro ciclo.
Posteriormente, este nuevo ciclo se “une” al anterior.

Se repite este proceso hasta que se terminan las aristas.

3.4. Ejemplo:
Partimos de siguiente grafo, que es euleriano por tener todos sus vértices grado par:

s s s s
@@ @@
@ @
@ @
@s @s
@@ @
@ @
@ @
s @s s @
@s

5
Partimos del vértice superior izquierda, y recorremos las aristas marcadas, llegando
de nuevo al mismo vértice y sin posibilidad de seguir (los números representan el orden
en que se recorren las aristas):

s 1 s s s
@@ @@
@3 2 @
@ @
@s @s
@@ @
@ @
@ @
s @s s @
@s

Eliminamos las aristas recorridas y buscamos un vértice que sea extremo de alguna de
ellas y a la vez de alguna de las no recorridas (por ejemplo, el segundo de la fila superior).
Empezamos de nuevo en ese vértice, hasta que volvemos a cerrar el circuito sin posibilidad
de seguir:

s 1 s 1 s 2 s
@@ @@
@3 2 @4
@ @ 3
@s 10 5 @s
@@ @
@ @7
@ 6 @
s @s s @
@s
9 8

Y ahora “unimos” el circuito anterior al recién construido, por medio del vértice de
contacto; el orden de recorrido de las aristas cambia de la forma lógica:

s 1 s 2 s 3 s
@@ @@
@ 13 12 @5
@ @ 4
@s 11 6 @s
@
@ @
@ @8
@ 7 @
s @s s @
@s
10 9

Se elige ahora otro vértice de contacto con las aristas restantes, el primero de la fila
del medio, y se repite el proceso, con lo que se termina finalmente de recorrer todas las
aristas, es decir, ya tenemos nuestro circuito euleriano:

6
s 1 s 2 s 3 s
@@ @@
@ 16 12 @5
@ @ 4
@s 11 6 @s
@@ @
15 13 @8
@
@ 7 @
s @s s @
@s
14 10 9

4. Optimización: caminos de longitud mı́nima


4.1. Grafos pesados
El problema que planteamos ahora necesita un nuevo concepto:

Definición 6 Un grafo pesado (o ponderado) es un grafo en el que cada arista a tiene


asignado un número real no negativo, w(a).

Tal grafo puede representar, por ejemplo, una red de carreteras, siendo los pesos la
longitud de las mismas (o el coste de recorrerlas).

Definición 7 El peso de un camino en un grafo pesado es la suma de los pesos de las


aristas del mismo.

4.2. Algoritmo de Dijkstra:


Problema: Encontrar el camino de peso mı́nimo (distancia mı́nima) entre dos vértices
fijos.

También se plantea para digrafos, siendo la solución prácticamente la misma.

El algoritmo que lo resuelve es el algoritmo de Dijkstra, que resulta ser de nuevo


un algoritmo intuitivo y fácil de comprender. Se aplica en grafos simples, lo cual,
evidentemente, no es restrictivo, ya que basta con quedarse con las aristas de menor
peso y eliminar los nodos.

La idea es, dado un vértice A, ir encontrando progresivamente aquellos caminos que


sin duda son mı́nimos, utilizando en cada caso la información ya obtenida. Para
ello, vamos a ir poniendo a cada vértice una blueetiqueta temporal, que se puede
interpretar como la mejor aproximación de la que se dispone en ese momento de la
distancia mı́nima de A al vértice.

Y en cada etapa, una de estas etiquetas temporales se va a convertir en bluedefinitiva,


pues podremos asegurar que sin duda esa es la distancia mı́nima correcta. En el
proceso también se construyen los caminos óptimos.

7
4.3. Ejemplo

El algoritmo de Dijkstra, que se aplica a grafos simples (dirigidos o no), consiste en


ir etiquetando los vértices con “distancias provisionales” (temporales) (longitud de los
caminos a los puntos ya alcanzados) convirtiendo en cada etapa la menor de ellas en
definitiva.

Vamos a ver el proceso con el siguiente grafo, fijando como punto de partida el punto
A:

Bt 2 Dt 2 Gt 6 Jt
@ @
3 @ 4 1 5 @ 5
@ @
9 @E 2 Ht 9 @
At @t @tL
@ @
@
2 6 1 @
6 3
@ @
@ 9 2 2@
@t t t @t
C F I K

En una primera etapa, alcanzamos todos los vértices posibles desde A, fijando como
distancias provisionales (etiquetas temporales) las longitudes de los caminos marcados
desde A:

Bt 2 Dt 2 Gt 6 Jt
@ @
3 @ 4 1 5 @ 5
@ @
9 @E 2 Ht 9 @
At @t @tL
@ @
@
2 6 1 @
6 3
@ @
@ 9 2 2@
@t t t @t
C F I K

La mı́nima de estas etiquetas temporales (que resulta ser la de C) pasa a definitiva,


ası́ como el camino marcado. Y desde este vértice con etiqueta definitiva se llega ahora
a otros dos vértices (E y F ). Como a E ya se habı́a llegado, se compara la distancia
provisional, que era 9, con la suma de la etiqueta definitiva de C (que es 2) y el peso
de la arista de C a E (6) (es decir, se compara la distancia de A a E por el camino
que se tenı́a y por el nuevo que se ha formado, que pasa por C). Como la menor es la
última, cambiamos la etiqueta provisional por esta nueva distancia, que es el peso del
nuevo camino (obsérvese en cada etapa que hay un único camino marcado del vértice A
a los vértices que ya han sido alcanzados):

8
Bt 2 Dt 2 Gt 6 Jt
@ @
3 @ 4 1 5 @ 5
@ @
9 @E 2 Ht 9 @
At @t @tL
@ @
@
2 6 1 @
6 3
@ @
@ 9 2 2@
@t t t @t
C F I K

De nuevo buscamos la distancia provisional mı́nima (la de B), que pasa a definitiva, y
miramos a qué vértices se llega desde B. Se repite la situación anterior para E: se puede
alcanzar por el camino que se tenı́a y por el camino que va primero hasta B y después
de B a E; este último es de peso menor, ası́ que se cambia el camino provisional (y por
tanto la distancia provisional) a E, pasando ahora por B:

Bt 2 Dt 2 Gt 6 Jt
@ @
3 @ 4 1 5 @ 5
@ @
9 @E 2 Ht 9 @
At @t @tL
@ @
@
2 6 1 @
6 3
@ @
@ 9 2 2@
@t t t @t
C F I K

La distancia mı́nima, que se convierte en definitiva, corresponde a D, desde el que se


alcanza G:

Bt 2 Dt 2 Gt 6 Jt
@ @
3 @ 4 1 5 @ 5
@ @
9 @E 2 Ht 9 @
At @t @tL
@ @
@
2 6 1 @
6 3
@ @
@ 9 2 2@
@t t t @t
C F I K

Ahora hay dos mı́nimos: las distancias provisionales a E y G, que coinciden. Se elije
uno cualquiera de ellos para convertirla en definitiva (al otro le tocará en la siguiente
etapa), por ejemplo E:

9
Bt 2 Dt 2 Gt 6 Jt
@ @
3 @ 4 1 5 @ 5
@ @
9 @E 2 Ht 9 @
At @t @tL
@ @
@
2 6 1 @
6 3
@ @
@ 9 2 2@
@t t t @t
C F I K

El proceso continua:

B
r 2 D r 2 G
r 6 Jr B
r 2 D r 2 G
r 6 Jr
@ @ @ @
3 @4 1 5 @5 3 @4 1 5 @5
Ar 9 @ E
@r 2 H
r 9 @ @rL @ E H @
Ar 9 @r 2 r 9 @rL
@ @ @ @
2
@ 6 1 6
@ 3 2
@ 6 1 6
@ 3
@
@r 9 r 2 r 2@@r @ @
@r 9 r 2 r 2 @r
C F I K C F I K

B
r 2 D r 2 G
r 6 Jr B
r 2 D r 2 G
r 6 Jr
@ @ @ @
3 @4 1 5 @5 3 @4 1 5 @5
@ E H @ @ @
Ar 9 @r 2 r 9 @rL Ar 9 @Er 2 Hr 9 @rL
@ @ @ @
2
@ 6 1 @6 3 2
@ 6 1 6
@ 3
@
@r 9 r 2 @
r 2 @r @ @
@r 9 r 2 r 2 @r
C F I K C F I K

B
r 2 D r 2 G
r 6 Jr B
r 2 D r 2 G
r 6 Jr
@ @ @ @
3 @4 1 5 @5 3 @4 1 5 @5
Ar 9 @ E
@r 2 H
r 9 @ @rL @ E H @
Ar 9 @r 2 r 9 @rL
@ @ @ @
2
@ 6 1 6
@ 3 2
@ 6 1 6
@ 3
@
@r 9 r 2 r 2@@r @ @
@r 9 r 2 r 2 @r
C F I K C F I K

Finalmente se obtienen todos los caminos de peso mı́nimo desde A:

10
Bt 2 Dt 2 Gt 6 Jt
@ @
3 @ 4 1 5 @ 5
@ @
9 @E 2 Ht 9 @
At @t @tL
@ @
@
2 6 1 @
6 3
@ @
@ 9 2 2@
@t t t @t
C F I K

Ası́, en la primera etapa hay una etiqueta definitiva d(A) = 0, y todas las demás son
provisionales, p1 (v) = w(A, v), donde w(A, v) es el peso de la arista de A a v, si existe,
e ∞ si no existe. En nuestro ejemplo anterior, los vértices con etiqueta temporal ∞ eran
los vértices marcados en gris.
Si ya se han realizado i etapas, se van a tener i vértices con etiqueta definitiva,
d(v1 ), . . . , d(vi ), siendo v1 = A y vi el vértice al que se le puso etiqueta definitiva en
la etapa i. La etapa i + 1 consiste en elegir un vértice vi+1 con etiqueta temporal (es
decir, un vértice ya alcanzado) que sea lo más pequeña posible, y convertir esta etiqueta
en permanente. Ahora revisamos las demás etiquetas temporales, quedándonos para cada
vértice v con el mı́nimo entre su etiqueta temporal anterior y la suma d(vi+1 ) + w(vi+1 , v)
(corresponde a la eliminación de aristas que dan distancias más largas).
El proceso puede continuar hasta que se etiquetan definitivamente todos los vértices
conectados a A por un camino. Las etiquetas definitivas son la distancia de A a cada
vértice. Del mismo proceso se deduce la forma en la que se pueden construir los caminos
mı́nimos.

Para finalizar con el algoritmo de Dijkstra sólo queda añadir que para grafos (simples)
dirigidos pesados funciona exactamente igual, sólo hay que tener cuidado de respetar el
sentido de las aristas. Ahora w(vi , vj ) va a representar el peso de la (única) arista que
empieza en vi y termina en vj (que puede ser distinto de w(vj , vi )). Con esta precisión,
el algoritmo sigue el mismo proceso, comparando para el vértice v la etiqueta temporal
anterior con d(vi+1 ) + w(vi+1 , v) y quedándonos con el menor de ambos números.

Bibliografı́a:
West, D.: Introduction to Graph Theory (second edition). Prentice-Hall, 2001 (first
edition 1996).
Gross, J. and Yellen, J.: Graph Theory and its Applications. CRC, 1999.

11

You might also like