Grafos

Anuncio
Capítulo 1
Grafos
1.1. Conjuntos y relaciones
Consideraremos un conjunto como una colección cualquiera de objetos. Un conjunto queda definido por los objetos que a él pertenecen; dichos objetos son los elementos o miembros del mismo. Si x es un miembro del conjunto A, escribimos x ∈ A
y decimos que x pertenece a A; en caso contrario, escribimos x 6∈ A y decimos, análogamente, que x no pertenece a A.
Si cada elemento x de un conjunto A es también miembro de otro conjunto B,
decimos que A es un subconjunto de B, o que A está incluído en B, y escribimos
A ⊂ B. Dos conjuntos A y B son iguales si y solamente si A ⊂ B y B ⊂ A; es decir,
si constan exactamente de los mismos elementos. En ese caso, escribimos A = B.
A veces se emplea también la notación A ⊆ B para la relación de inclusión, y el
símbolo ⊂ se reserva para la inclusión propia, que ocurre cuando A ⊆ B pero A 6= B.
En general, la relación de inclusión propia aparece con menos frecuencia, y usaremos
el símbolo más sencillo para la relación más frecuente, de modo que “⊂” significará
siempre para nosotros “está incluido en o es igual a”.
En lo sucesivo nos ocuparemos predominantemente de conjuntos finitos, que pueden denotarse convenientemente enumerando todos sus elementos. El número de elementos de un conjunto finito A se denomina también a veces su cardinal, y se escribe |A|.
1.1.1. Producto cartesiano
El producto cartesiano de dos conjuntos A y B se define como el conjunto formado
por todos los pares ordenados posibles cuyo primer elemento es un miembro de A y
cuyo segundo elemento es un miembro de B. En notación conjuntista
A × B = {(a, b) | a ∈ A, b ∈ B}
Si los conjuntos involucrados son finitos, es evidente que |A × B| = |A| · |B|.
Por ejemplo, si A es el conjunto de todos los hombres y B el de todas las mujeres,
A× B es el conjunto de todas las parejas (heterosexuales) posibles que pueden formarse
entre ellos. En particular, si no existiesen hombres, A × B sería vacío, y todo bastante
aburrido.
1
Siguiendo con el ejemplo, el producto cartesiano A × B contiene todas las parejas
concebibles, no necesariamente las que existen en la realidad. Consideremos solamente
aquellas parejas hombre-mujer que constituyan un matrimonio. El conjunto R de pares
hombre-mujer (h, m) donde h es un hombre, m es una mujer y h está casado con m
es un subconjunto de A × B. Además, la inclusión R ⊂ A × B es casi seguramente
propia, excepto en una sociedad polígama y extremadamente promiscua. En cualquier
caso, R contiene toda la información que necesitamos sobre el matrimonio en general:
nos dice exactamente quién está casado con quién.
1.1.2. Relaciones
Definimos una relación entre dos conjuntos A y B como un subconjunto R del
producto cartesiano A × B; en símbolos, R ⊂ A × B. El hecho de que (a, b) ∈ R se
suele expresar diciendo que a está relacionado con b, y, de forma abreviada, se suele
escribir como a R b. La negación de a R b se escribe a 6 R b
Una relación binaria en un conjunto A se define como un subconjunto R del producto A × A. El conjunto en el que se establece R suele denominarse dominio de la
relación.
Algunos ejemplos de relaciones binarias son los siguientes:
La relación de igualdad = entre números reales.
La relación “ser hermano de” en el conjunto de los seres humanos.
La relación de orden ≤ entre números reales.
La relación “ser progenitor de” en el conjunto de los seres humanos. Esta relación
contendría todas las parejas ( p, h) de personas cuyo segundo elemento fuese hijo
del primero.
La relación “ser hijo de” en el conjunto de los seres humanos. Esta relación contendría todas las parejas (h, p) de personas cuyo segundo elemento fuese padre
del primero. Es evidente que esta relación se obtiene de la anterior invirtiendo el
orden de todos los pares: se dice que son inversas.
La relación “ser divisor de” entre números naturales, que suele denotarse por el
símbolo |. Por ejemplo, 6 | 24, pero 6 6 | 31. La relación inversa de ésta también
tiene un nombre común: “ser múltiplo de”.
1.1.3. Propiedades de las relaciones
Hay cuatro propiedades de una relación que nos van a interesar especialmente: que
sea reflexiva, simétrica, transitiva o antisimétrica. Discutiremos primero el significado
de las definiciones y daremos al final un resumen formal de las mismas.
Decimos que una relación R es reflexiva si a R a para todo miembro a del dominio
de R. Por ejemplo, la igualdad = y el orden ≤ son relaciones reflexivas. También lo es
la relación “vivir en el mismo domicilio”.
Una relación R es simétrica si para todo par de elementos a, b del dominio de R
se verifica que, si a R b, entonces b R a. Por ejemplo, “ser hermano de” es una
relación simétrica (es muy difícil ser hermano de alguien sin que éste sea hermano de
uno), lo mismo que “estar casado con”. También la igualdad = entre números reales
es una relación simétrica; sin embargo, el orden ≤ no lo es. De modo más interesante,
2
“x ama a y” (comoquiera que se defina) no es una relación simétrica: un amor no tiene
por qué ser correspondido (aunque puede serlo). Basta con que haya un solo amor no
correspondido para que esta relación deje de ser simétrica.
Tampoco es simétrica la paternidad entre seres humanos: x es padre de y no implica
que y sea padre de x (de hecho, en general, lo impide). Notemos la diferencia entre la
paternidad y el amor: mientras que “x ama a y” no implica el recíproco, no lo impide (y
puede amar a x). En cambio, la paternidad difícilmente puede ser recíproca en ningún
caso: si x es padre de y, no es posible que y sea padre de x. Decimos que una relación R
es antisimétrica si, para cualquier par de miembros a, b del dominio, a R b y b R a se
dan simultáneamente sólo cuando a = b.
Por último, otra propiedad muy importante es la transitividad. Decimos que R
es transitiva si para cualquier terna a, b, c de miembros del dominio, las relaciones
a R b y b R c obligan necesariamente a que a R c. Por ejemplo, si R es la relación
de amistad entre seres humanos, es bastante evidente que no es transitiva: a puede ser
amigo de b y b puede serlo de c, mientras que a puede considerar a c muy poco recomendable. Si R fuese transitiva, sería cierto el refrán “los amigos de mis amigos son
mis amigos”.
Sí es transitiva, en cambio, la relación “ser antepasado de”: los antepasados de mis
antepasados son mis antepasados. En cambio, la paternidad no lo es: si x es el padre de
y e y es el padre de z, esto no obliga en absoluto a que x sea el padre de z.
Resumiendo, si R es una relación binaria en el conjunto A, decimos que R es
reflexiva si a R a, para todo a ∈ A
simétrica si a R b → b R a, para todos a, b ∈ A
transitiva si a R b y b R c → a R c, para todos a, b, c ∈ A
antisimétrica si a R b y b R a → a = b, para todos a, b ∈ A
Una relación R se dice que es una relación de equivalencia si es reflexiva, simétrica
y transitiva. El ejemplo por excelencia es la igualdad, pero existen otros ejemplos significativos. Por ejemplo, la relación “ser hermano de” es una relación de equivalencia,
si admitimos el hecho de que uno es hermano de sí mismo.
Dado un elemento a ∈ A del dominio de una relación de equivalencia R, se define
su clase de equivalencia como el conjunto [a] = {x ∈ A | a R x}, es decir, el
conjunto de los elementos relacionados con a en virtud de R. En el ejemplo anterior,
R = “ser hermano de”, la clase de equivalencia de un individuo es el conjunto de todos
sus hermanos (incluyéndolo a él mismo). Obsérvese que las clases de equivalencia de
esta relación son las progenies de cada familia, y toda la humanidad está dividida en
clases disjuntas de hermanos. Este hecho no es casual.
La propiedad más importante de las relaciones de equivalencia la proporciona el
siguiente
Teorema 1 Sea R una relación de equivalencia en un conjunto A. Las clases de equivalencia de R forman una partición de A, es decir, A es la unión de dichas clases de
equivalencia, y dos clases de equivalencia son o iguales o disjuntas.
D EMOSTRACIÓN Obviamente, cada elemento a ∈ A es miembro de una clase de equivalencia: la suya propia. Ello es así porque la relación es reflexiva, de modo que a R a
y, por tanto, a ∈ [a]. Se deduce que A ⊂ ∪a∈A [a], es decir, A es unión de clases de
equivalencia.
3
Por otro lado, sean [x] e [y] dos clases de equivalencia. Si no son disjuntas, existe
un elemento común a ∈ [x] ∩ [y]. Se deduce que
a R x y que a R y
x R aya R y
(pertenencia a [x] e [y])
(simetría)
x Ry
(transitividad)
Por tanto, si z ∈ [x]
x Rzyx R y
(definición de [x])
z Rxyx R y
z R y, o sea, y R z
(simetría)
(transitividad y simetría)
z ∈ [y]
(definición de [y])
y se concluye que [x] ⊂ [y]. Se prueba del mismo modo que [y] ⊂ [x], y por tanto,
que [x] = [y].
Otro tipo de relación de especial interés es la relación de orden (parcial). Se llama
así a una relación que es reflexiva, antisimétrica y transitiva. Como ejemplos típicos
de relaciones de orden tenemos la relación ≤ entre números reales, o la relación de
divisibilidad entre números naturales (“ser divisor de”, denotada por |). Esta última es
relación de orden, puesto que
para todo entero a, se verifica que a|a (reflexividad)
para todo par de enteros a, b, se verifica que si a|b y b|a, entonces existen números k y l con a = kb = kla y kl = 1, de forma que a = b (antisimetría)
para todo trío de enteros a, b, c, si se dan las relaciones a|b y b|c, existen ciertos
naturales k y l que cumplen c = kb = kla, de modo que a|c (transitividad)
La divisibilidad es un buen ejemplo de una relación de orden parcial. En un orden
parcial R no es preciso que una de las dos relaciones a R b o bien b R a se dé. Por
ejemplo, ni 7|69 ni 69|7. Se dice que los elementos en cuestión no son comparables.
Una relación de orden en la que para todo par de elementos a, b del dominio se verifica
que a R b o bien b R a (o ambas) se dice que es de orden total. La relación de orden
habitual entre números, ≤, es un ejemplo de orden total.
Una representación muy conveniente de las relaciones de orden en conjuntos finitos
es su diagrama de Hasse, que definiremos en la sección 1.4.
1.1.4. Clausura transitiva
Vimos en la sección 1.1.3 que la relación “ser ancestro de” es transitiva, pero la paternidad no lo es: el padre de mi padre no es mi padre (suele denominarse abuelo mío).
Sin embargo, existe una vinculación interesante entre la paternidad y la ancestralidad:
los antepasados se obtienen, por lo general, remontándose hacia atrás una o más veces
en la relación de paternidad (un ancestro mío es, o bien mi padre, o bien el padre de mi
padre, o el padre de mi padre de mi padre, etc.)
Del mismo modo, la relación “ser sucesor de” definida sobre el conjunto de los
enteros no es transitiva: 5 es el sucesor de 4, y 6 es el sucesor de 5, pero 6 no es sucesor
de 4. Como mucho, es mayor que cuatro, y esta relación de orden sí que es transitiva.
4
La relación transitiva que se obtiene por repetición a partir de otra aparece con
frencuencia, lo que motiva la siguiente definición.
Sea R una relación en un conjunto A. Definimos la clausura transitiva de R (a
veces denotada por R ∗ ) como la menor relación transitiva que contiene a R. Más explícitamente,
a) R ⊂ R ∗ ⊂ A × A (es decir, R ∗ es una relación binaria en A).
b) R ∗ es transitiva.
c) Si R ⊂ S ⊂ R ∗ ⊂ A × A y además S es transitiva, entonces S = R ∗ .
Esta definición es muy poco intuitiva, y generalmente utilizaremos esta otra: diremos que a R ∗ b si existe una sucesión {ai } de elementos de A que verifica
a R a 1 R a2 R a3 R · · · R a n R b
es decir, si a está relacionado con un elemento, que está relacionado con otro, que. . . y
así sucesivamente hasta llegar a b. Por ejemplo, la clausura transitiva de la relación de
paternidad es “ser antepasado de”.
1.2. Grafos
1.2.1. Grafo dirigido y no dirigido
Un grafo (específicamente, grafo simple no dirigido) es un par G = (V, E) =
(V (G), V (E)), donde V es un conjunto finito no vacío de elementos llamados vértices
y E es un conjunto de pares desordenados de elementos distintos de V llamados aristas.
Es decir, una arista e ∈ E tiene la forma {u, v}, donde u, v ∈ V y u 6= v.
La terminología en teoría de grafos varía muchísimo: prácticamente no hay dos
textos que adopten la misma. En paticular, los vértices de un grafo también reciben a
veces el nombre de nodos, y las aristas arcos, ejes o líneas.
Obsérvese que, en un grafo no dirigido conforme con esta definición, los bucles
están excluídos. Por convenio, en grafos no dirigidos designaremos las aristas con la
notación (u, v) que usamos para los pares ordenados de vértices; se sobreentiende que
en las aristas de grafos no dirigidos no importa el orden, es decir, (u, v) = (v, u).
Un grafo se representa por medio de puntos o círculos, que designan los vértices, y
líneas que los unen, que representan las aristas. Por ejemplo, en la figura 1.1(b) tenemos
un ejemplo de grafo no dirigido con conjunto de vértices V = {1, 2, 3, 4, 5, 6} y aristas
E = {(1, 2), (2, 5), (1, 5), (3, 6)}.
Un grafo dirigido o digrafo G es un par (V, E), donde V es un conjunto finito no
vacío y E es una relación binaria en V , es decir, un conjunto de pares ordenados de
elementos de V . Los elementos de V reciben el nombre de vértices. El conjunto E es
el conjunto de aristas de G.
Por ejemplo, en la figura 1.1(a) tenemos un grafo dirigido que, de acuerdo con
la definición, tiene seis vértices (V = {1, 2, 3, 4, 5, 6}) y ocho aristas (E = {(1, 2),
(2, 2), (2, 4), (2, 5), (4, 1), (4, 5), (5, 4), (3, 6)}). Las flechas apuntan del primer elemento de cada par al segundo.
Obsérvese que es posible que una arista puede partir de un vértice y llegar a él de
nuevo. Una arista de esta clase, es decir, de la forma e = (v, v), recibe el nombre de
bucle o lazo.
5
E
F
G
H
I
J
3
+
∗
5
+
6
12 1
χ(K 5 ) = 5
χ(K 3,3 ) = 2
χ(C7 ) = 3
χ(esto) = 4
χ(esto otro) = 4 4
E
F
G
H
I
J
3
+
∗
5
+
6
12
3
1
2
χ(K 5 ) = 5
χ(K 3,3 ) = 2
χ(C7 ) = 3
χ(esto) = 4
5 χ(esto 6otro) = 4 4
(a)
2
3
5
6
(b)
Figura 1.1: Ejemplos de (a) grafo dirigido, y (b) no dirigido
Tipo de grafo
Grafo
Multigrafo
Pseudografo
Grafo dirigido (digrafo)
Multigrafo dirigido
Dirigido
No
No
No
Sí
Sí
Simple
Sí
No
No
Sí
No
Lazos
No
No
Sí
Sí
Sí
Cuadro 1.1: Cadro resumen de los diferentes tipos de grafos
Cuando el sentido de las flechas no nos interesa (o, dicho de forma más técnica, la
relación que el grafo representa es simétrica), es más conveniente el concepto de grafo
no dirigido.
Existen numerosas variantes de las definiciones que acabamos de dar. Por ejemplo, un multigrafo es un grafo no dirigido en el que permitimos la existencia de varias
aristas conectando los mismo vértices y la aparición de bucles. Específicamente, un
multigrafo queda definido por medio de una tríada G = (V, E, f ), donde V y E
son conjuntos y f : E → V × V asigna a cada arista e ∈ E un par desordenado f (e) = {u, v} de vértices diferentes de V (los vértices extremos de la arista e).
Un multigrafo dirigido se define de forma exactamente igual, excepto que el recorrido de f está formado por pares ordenados de vértices. Por último, si permitimos la
existencia de bucles o lazos en un grafo no dirigido, tenemos un pseudografo: se trata
de una terna G = (V, E, f ), donde f : E → V × V asigna a cada arista un par no
ordenado de vértices (posiblemente iguales).
Dado que esta terminología no es estándar, siempre es conveniente en cada caso
especificar claramente si el grafo objeto de nuestra consideración es dirigido o no; si se
admiten múltiples aristas entre un par cualquiera de vértices (es decir, si el grafo es o
no simple); y si se admiten bucles o lazos. En el cuadro resumen 1.1 se esquematizan
los valores de estos parámetros para las definiciones recién dadas.
1.2.2. Incidencia y grado
Si (u, v) es una arista de un grafo dirigido, decimos que incide desde o sale de el
vértice u, que será su vértice inicial, y que incide hacia o entra en el vértice v, que será
su vértice final. Si estamos en un grafo no dirigido, decimos que (u, v) simplemente
incide en los vértices u y v, que serán sus vértices extremos.
Por ejemplo, en la figura 1.1(a), hay tres aristas que salen del vértice 2: son (2, 2),
6
(2, 4) y (2, 5). En el grafo no dirigido de la figura 1.1(b), la arista (3, 6) incide en los
vértices 3 y 6.
Si (u, v) es una arista de un grafo, decimos que el vértice v es adyacente al vértice u. En un grafo no dirigido, la relación de adyacencia es simétrica; no es así necesariamente en un digrafo. Por ejemplo, en la figura 1.1(a), el vértice 5 es adyacente al 2
(pero el 2 no es adyacente al 5). En cambio, en el grafo de la figura 1.1(b), los vértices
1 y 2 son adyacentes entre sí.
El grado de un vértice en un grafo no dirigido es número de aristas incidentes con
él. Por ejemplo, el vértice 5 de la figura 1.1(b) tiene grado 2. En un digrafo, el grado
de salida de un vértice es el número de aristas que salen de él, y el grado de entrada
es el número de aristas que entran en él. El grado es la suma de los grados de salida
y entrada. En el grafo dirigido de la figura 1.1(a), el vértice 2 tiene grado de salida 3,
grado de entrada 2 y grado 5.
1.2.3. Representación como estructuras de datos
Nuestro interés en los grafos radica en su aplicación a la informática, y exige que
podamos representarlos en nuestros programas como estructuras de datos que podamos
manejar, crear, modificar y consultar. Existen tres representaciones usuales de los grafos que permiten su manipulación como objetos en nuestros programas: las representaciones por medio de matrices de adyacencia, de listas de adyacencia y de matrices
de incidencia.
En la representación por matrices de adyacencia, un grafo G = (V, E) cuyo conjunto de vértices sea V = {a1 , a2 , . . . , an } se representa por una matriz booleana M,
cuadrada, de dimensión igual al número de vértices n, y cuyos elementos se definen
por
(
1 si (ai , a j ) es una arista de G
Mi j =
0 en caso contrario
Es decir, la matriz M representa la relación de adyacencia. Habrá un uno en la fila i ,
columna j , si hay una arista que va del vértice ai al vértice a j .
Obsérvese que la matriz no será simétrica, en general, si el grafo es dirigido. En
cambio, la matriz de adyacencia de un grafo no dirigido siempre será simétrica. Las
aristas múltiples no quedan bien representadas en la matriz de adyacencia, pero sí los
bucles o lazos, que provocan la presencia de unos en la diagonal principal.
Para el grafo de la figura 1.1(a), la matriz de adyacencia se representa en la figura 1.2(a).
La representación por matrices de adyacencia tiene un inconveniente serio para
grafos grandes: el tamaño de la matriz es proporcional al cuadrado del número de
vértices. Si el número de aristas |E E| es comparativamente pequeño en relación a |V | 2 ,
se desperdicia una cantidad enorme de espacio. La mayoría de los grafos se encuentra
en este caso: son grafos dispersos, donde |E| |V |2 .
La representación por listas de adyacencia es mucho más conveniente en esta mayoría de casos. Un grafo G = (V, E) se representará por un vector de listas. El vector
tiene |V | posiciones, una por cada vértice; en la posición i -ésima se almacena la lista
de los vértices adyacentes a ai . En la figura 1.2(b) representamos el grafo de la figura 1.1(a) por medio de listas de adyacencia.
Podemos ver que el tamaño de esta representación es proporcional al número |E|
de aristas del grafo. Esto lo hace mucho más conveniente en casi todos los casos. Sola-
7

0
0

0
M =
1

0
0
1
1
0
0
0
0
0
0
0
0
0
1
0
1
0
0
1
0
0
1
0
1
0
0

0
0

0

0

0
0
Vértice
1
2
3
4
5
6
Adj(V )
{2}
{2, 4, 5}
{}
{1, 5}
{4}
{3}
(b)
(a)
Figura 1.2: Representación del grafo de la figura 1.1(a) por medio de a) matriz de
adyacencia b) listas de adyacencia
mente en el caso de grafos densos (en los que |E| y |V |2 son comparables) es razonable
considerar la matriz de adyacencia como representación alternativa.
La matriz de incidencia de un grafo G = (V, E), donde |V | = n y |E| = m se
define como una matriz booleana n × m en la que
(
1 si la arista j incide en el vértice i
(Minc )i j =
0 en caso contrario
Esta representación es solamente válida para grafos no dirigidos, puesto que el sentido de las aristas no puede ser representado de esta forma. Puede resultar útil para
representar multigrafos, pero su interés fundamental es más bien teórico.
1.2.4. Caminos y ciclos
Un camino de longitud k entre el vértice u y el vértice u 0 del grafo G = (V, E) es
una sucesión de aristas {e1 , e2 , . . . , ek } tales que ei = (vi−1 , vi ) para i = 2, 3, . . . , k,
con lo que cada arista tiene por vértice inicial el vértice final de la anterior. Para hacer
explícito este hecho, a veces un camino se denota también con los vértices intercalados: C = {v0 , e1 , v1 , . . . , en , vn }. Si no hay ambigüedad, un camino puede denotarse
exclusivamente por la sucesión de vértices que visita: C = {v0 , v1 , . . . , vk }. Esto puede
hacerse, por ejemplo, cuando los grafos con los que trabajamos son simples.
La longitud del camino, según la definición dada arriba, es el número de aristas que
lo constituyen. El vértice inicial de C = {v0 , e1 , . . . , ek , vk } es v0 , y el vértice final es
vk .
Un camino es simple si todas sus aristas son distintas. En ocasiones se llama simple
a un camino que no visita dos veces el mismo vértice. La segunda definición es más
restrictiva que la primera, puesto que un camino puede pasar dos veces por un mismo
vértice sin visitar ninguna arista más de una vez.
Un camino (v0 , e1 , v1 , . . . , ek , vk ) forma un ciclo si v0 = vk y el camino contiene
al menos una arista. El ciclo es simple si, además, las aristas que lo forman son todas
distintas. Por ejemplo, un lazo es un ciclo de longitud unidad.
8
1.3. Accesibilidad y conexión
Decimos que un vértice u 0 de un grafo es accesible (o alcanzable) desde otro vértice u si existe un camino de u a u 0 .
Es fácil ver que la relación de accesibilidad es transitiva: si w es accesible desde v
y v es accesible desde u, es evidente que w es accesible desde u. Además, todo nodo
es accesible desde sí mismo (por medio de un camino de longitud cero). En un grafo
no dirigido, la relación también es simétrica; en un digrafo ya no tiene por qué ser así
(en la figura 1.1(a), el vértice 3 es accesible desde 6, pero no al contrario).
Un grafo no dirigido es conexo si cada par de vértices está conectado por un camino
(es decir, todos los vértices son mutuamente accesibles). Las componentes conexas de
un grafo son las clases de equivalencia de los vértices bajo la relación de accesibilidad.
El grafo de la figura 1.1(b) no es conexo, ya que, por ejemplo, 6 es inaccesible desde 1.
Hay tres componentes conexas en el grafo: {1, 2, 5}, {3, 6} y {4}.
En una componente conexa, todos los vértices son mutuamente accesibles; es evidente, por tanto, que un grafo es conexo si y solamente si tiene una única componente
conexa. Intuitivamente, las componentes son los diferentes “trozos” conexos en que el
grafo se descompone.
Un grafo dirigido es fuertemente conexo si cualquier vértice es accesible desde
cualquier otro. Las componentes fuertemente conexas de un digrafo son las clases de
equivalencia de los vértices bajo la relación “ser mutuamente accesibles”.
Es algo menos intuitivo visualmente el extraer las componentes fuertemente conexas de un digrafo. Por ejemplo, en el grafo de la figura 1.1(a), tenemos tres componentes: {1, 2, 4, 5}, {3} y {6}. Los cuatro vértices que residen en la primera componente
son mutuamente accesibles entre sí (basta usar el ciclo (1, 2, 5, 4) para desplazarse de
un vértice a otro); pero 3 y 6 no son mutuamente accesibles (solamente 3 es accesible
desde 6, pero no a la inversa), y por consiguiente residen en componentes distintas.
1.4. Relaciones y grafos
Existe una conexión muy íntima entre las relaciones binarias en un conjunto y los
grafos. De hecho, hemos definido un grafo dirigido como una relación, y el uso que
hacemos de los grafos en informática es para representar relaciones.
Sea A un conjunto finito y R una relación binaria de dominio A. Al ser A finito,
podremos enumerar sus elementos:
A = {a1 , a2 , a3 , . . . , an }
Definimos el grafo asociado a R (o grafo que representa R) como un grafo cuyos
vértices son los elementos de A, siendo (ai , a j ) una arista del grafo si y solamente
si ai R a j . De hecho, según la definición de digrafo que dimos en la sección 1.1(b), la
propia relación es un grafo.
Como ejemplo, consideremos la relación binaria R definida entre números enteros
como sigue
a R b si y solamente si b = pa con p primo
y estudiemos su restricción al conjunto A = {1, 2, 3, 4, 6, 9, 12, 18, 36} formado por
los divisores de 36. El grafo asociado a la relación será el que se muestra en la figura 1.3(a). En cambio, el grafo de la relación ≤ entre los números {3, 4, 6, 9} puede
verse en la figura 1.3(b).
9
Zapatero
Zorrilla
A
B
C
D
E
F
G
H
I
J
3
+
∗
5
+
64
12
χ(K 5 ) = 5
χ(K 3,3 ) = 2
χ(C7 ) = 3
χ(esto) = 4
χ(esto otro) = 4
Zapatero
Zorrilla
A
B
C
D
E
F
G
H
I
J
36
3
+
12
18
∗
5
+
6
6
9
12
χ(K 5 ) = 5
χ(K
3 3,3 ) = 2
2
χ(C7 ) = 3
χ(esto) = 4 3
1χ(esto otro) = 4
(a)
6
4
9
(b)
Figura 1.3: (a) Retículo de divisores de 36 y (b) Relación de orden entre 3, 4, 6, 9
Algunas propiedades de estas relaciones son directamente observables a partir del
grafo. Por ejemplo, en ninguna de las figuras encontramos flechas dirigidas en sentidos
contrarios entre ningún par de nodos. Esto se debe a que las relaciones representadas
son antisimétricas. La relación de orden de la figura 1.3(b) es, además, obviamente
reflexiva: la presencia de un bucle o lazo en todos y cada uno de los nodos lo prueba.
Observemos que 2 R 6 y que 6 R 12, pero que, sin embargo, 2 6 R 12. Esto se debe
a que la relación R no es transitiva. En cambio, ≤ sí es una relación transitiva; veremos
enseguida en qué se traduce esto en términos de grafos.
Un ejemplo de grafo que se vincula a una relación de manera algo diferente es
el diagrama de Hasse de una relación de orden. El diagrama de Hasse se obtiene
representando la relación por un grafo, y suprimiendo
todos los lazos
todas las aristas que se puedan deducir por transitividad de otras dos
En la figura 1.3(a) tenemos un ejemplo de un tal diagrama para la relación de divisibilidad en el conjunto de los divisores de 36.
La matriz de adyacencia del grafo asociado a una relación R se denomina simplemente matriz de la relación; es una matriz cuadrada binaria M R , de dimensión igual al
cardinal del dominio de R. El elemento (M R )i j de la matriz vale uno o cero según que
los elementos ai y a j estén relacionados o no. En símbolos,
(
1 si ai R a j
(M R )i j =
0 en caso contrario
Veamos cómo se plasman en términos de grafos y de matrices de relaciones las
cuatro propiedades estudiadas en 1.1.3.
reflexividad R es reflexiva sii a R a para todo a ∈ A. Por lo tanto, si cada vértice del
grafo posee un lazo, R es reflexiva; si algún vértice carece de lazo, la relación no
es reflexiva. En términos de matrices, cada elemento de la diagonal principal
de M R debe ser un uno.
10
D
E
F
G
H
I
J
3
+
∗
5
+
6
12
χ(K 5 ) = 5
χ(K 3,3 ) = 2
χ(C7 ) = 3
χ(esto) = 4
χ(esto otro) = 4
K4
K5
K6
Figura 1.4: Grafos completos de cuatro, cinco y seis vértices
simetría R es simétrica sii a R b ⇒ b R a, para todo par de a, b ∈ A. Por lo tanto,
si hay una flecha de un vértice v a otro w, la flecha contraria también debe estar
presente; y si no la hay en un sentido, la contraria tampoco puede existir. En
términos matriciales, (M R )i j = (M R ) j i para todo par de índices i, j ; o, más
brevemente, M R es simétrica: M Rt = M R
transitividad R es transitiva si y solamente si a R b junto con b R c implica necesariamente que a R c. En términos de grafos, la existencia de una arista entre los
vértices a, b y otra entre b, c implica la existencia de la arista (a, c). El par de
aristas (a, b), (b, c) forma un camino de longitud dos entre los vértices a y c, de
modo que la condición de transitividad puede formularse así: la accesibilidad de
orden dos implica adyacencia. En términos matriciales, (M R )2i j = 1 implicará
siempre que (M R )i j = 1 o, abreviando, M R2 ⊂ M R : elevar al cuadrado la matriz
de la relación no introduce unos que no existieran ya en M R .
1.5. Algunos grafos especiales
1.5.1. Grafos completos
Un grafo completo es un grafo no dirigido en que todos los vértices son adyacentes
entre sí. Para cada número de vértices n, existe esencialmente un solo grafo completo
(todos son isomorfos entre sí), que se designa por K n . Por ejemplo, en la figura 1.4
tenemos algunos grafos completos.
Teorema 2 El grafo completo de n vértices K n tiene n2 = n(n − 1)/2 aristas.
Hay varias formas de demostrar esto:
1. El número de aristas de K n es el número de pares desordenados en un conjunto
de n objetos, es decir, el de combinaciones de n elementos tomados de dos en
dos.
2. Cada vértice del grafo está unido a los n − 1 restantes. Si contamos las aristas
incidentes en cada uno de los n vértices, obtenemos n(n − 1), pero, al obrar
así, estamos contando cada arista dos veces (puesto que tiene dos extremos). Por
tanto, el número total de aristas es exactamente la mitad, n(n − 1)/2.
11
12
Propiedad
Definición
Reflexiva
∀a
a R
Simétrica
Antisimétrica
∀a, b
∀a, b
a R
a R
Transitiva
∀a, b, c a R
P60 Q
Q
2 4
CQ
m1 Q
Q
Q
3
Q
02 5
Q
QAbad
4
Q
Q
Abascal
Q135
Q
Q24
Álvarez
Abad
Q
Q35
Bastardo
Abascal
Q
Cobas
4
Abad
Álvarez
Cazorla
Q5
Abascal
Bastardo
Dehesa
Cobas
Abad
Álvarez
González
Abascal
Cazorla
Bastardo
Guzmán
Dehesa
Cobas
Álvarez
Herrero
González
Cazorla
Bastardo
Lebrel
Guzmán
Dehesa
Cobas
Zapatero
Herrero
González
Cazorla
Zorrilla
Lebrel
Guzmán
Dehesa
Zapatero
Herrero A
González
Lebrel B
Zorrilla
Guzmán
Zapatero
A C
Herrero
B D
Lebrel
Zorrilla
C
Zapatero
A E
F
D
B G
Zorrilla
E H
C
A
F I
D
B
G
E J
C
H
F 3
D
G
EJI +
H
F3 ∗
I 5
G
+
J∗ +
H
3
6
I
+
J∗5 12
+
χ(K 5 )36
5= 5
χ(K 3,312
)+
=2
+
∗
χ(Kχ(C
65= 3Grafo
5) =
7 )5
+2= 4
χ(Kχ(esto)
3,3 ) =12
χ(K
)) =
65
χ(C57otro)
=12
3= 4
χ(esto
a
χ(K
)
=
2
3,3
χ(esto)
=
4
χ(K
)
=
5
57 ) = 3
χ(C
otro)
=
4
b ⇒ bχ(esto
R aχ(K
)
=
2
3,3 = 4
χ(esto)
χ(C
7 ) b=
χ(esto
otro)
= 34
byb R
a⇒
a
=
χ(esto)
=4
b y b χ(esto
R c ⇒ otro)
a R c= 4
Matriz
(M R )ii = 1 ∀i
M Rt = M R
(M R )i j 6= (M R ) j i
M R2
⊂ MR
Cuadro 1.2: Cuadro resumen de las propiedades de las relaciones
∀i 6= j
Zorrilla
A
B
C
D
E
F
G
H
I
J
3
+
∗
5
+
6 3
12
χ(K 5 ) = 5
χ(K 3,3 ) = 2
χ(C7 ) = 3
χ(esto) = 4
χ(esto otro) = 4
2
1
4
6
5
Figura 1.5: Torneo de seis vértices
3. Numeremos los vértices de 1 a n. En el vértice 1 inciden n − 1 aristas:
(1, 2), (1, 3), (1, 4), . . . (1, n)
En el vértice 2 inciden también n − 1 aristas, pero una ya ha sido contada anteriormente, de modo que sólo aparecen aquí n − 2 nuevas:
(2, 3), (2, 4), . . . (2, n)
Si proseguimos así el recuento, llegamos a que el número total de aristas es la
suma de una progresión aritmética:
|E| = (n − 1) + (n − 2) + · · · + 2 + 1 = (n − 1)
(n − 1) + 1
2
De este teorema deducimos que un grafo simple no dirigido de n vértices tendrá, a
lo sumo, n2 aristas.
1.5.2. Torneos
Un torneo (tournament) es un grafo dirigido cuya versión no dirigida es un grafo
completo. Podemos decir que un torneo puede obtenerse a partir de un grafo completo
asignando orientaciones a cada una de las aristas. En la figura 1.5 podemos ver un
ejemplo de torneo con seis vértices.
En el torneo de la figura podemos ver que el camino simple (1, 2, 4, 6, 3, 5) pasa
por todos los vértices. Un camino así se denomina camino hamiltoniano. En el teorema 8 veremos que siempre es posible encontrar uno en cualquier torneo.
1.5.3. Grafos bipartitos
Un grafo bipartito es un grafo no dirigido G = (V, E) cuyo conjunto de vértices
V es unión de dos conjuntos disjuntos V1 y V2 de forma que (u, v) ∈ E implica que,
o bien u ∈ V1 y v ∈ V2 , o bien u ∈ V2 y v ∈ V1 . Es decir, todas las aristas tienen un
extremo en cada uno de los conjuntos V1 y V2 .
Recordemos que V1 y V2 forman una partición de V si son disjuntos y su unión
es V .
13
D
E
F
G
H
I
J
3
+
∗
5
+
6
12
χ(K 5 ) = 5
χ(K 3,3 ) = 2
χ(C7 ) = 3
χ(esto) = 4P6
χ(esto otro) = 4
C5
C7
Figura 1.6: Camino P6 y ciclos C7 y C5
Teorema 3 Un grafo es bipartito si y solamente si carece de ciclos de longitud impar
D EMOSTRACIÓN Sea G bipartito y C = (v0 , v1 , . . . , vn ) un ciclo de G. Como cada
arista (vi−1 , vi ) une un elemento de V1 con uno de V2 , se deduce que vértices consecutivos de C pertenecen a lados distintos de la partición, de forma que los vértices de
subíndice par están todos en un lado y los de subíndice impar en el contrario. Como
v0 = vn , se deduce que n tiene la misma paridad que 0, es decir, es par.
Recíprocamente, supongamos que el grafo G carece de ciclos de longitud impar.
En primer lugar, es obvio que bastará probar que cada componente de G es bipartita,
así que podemos suponer G conexo. Sea v0 ∈ V (G) un vértice cualquiera, y definamos
V1 = {v ∈ V (G) | existe un camino de longitud impar entre v0 y v}, y V2 = V − V1 .
Por definición, los caminos entre v0 y cualquier vértice de V2 serán todos de longitud
par. Además, V1 y V2 forman una partición de V . Ahora, si dos vértices v, w de V1
son adyacentes, los caminos de longitud impar que los unen con v 0 , más las arista
(v, w), constituyen un ciclo impar, contra la hipótesis. Por lo tanto, no hay ningún par
de vértices adyacentes en V1 . Para V2 , el mismo razonamiento es válido, de forma que
cualquier arista une algún vértice de V1 con alguno de V2 .
1.5.4. Caminos y ciclos
El camino de longitud n es el grafo Pn = (V, E), donde V = {v0 , v1 , . . . , vn }
y E = {(v0 , v1 ), (v1 , v2 ), . . . , (vn−1 , vn )}. El ciclo de longitud n es el grafo C n =
(V, E), donde V = {v1 , . . . , vn } y E = {(vn , v1 ), (v1 , v2 ), . . . , (vn−1 , vn )}. En la
figura 1.5.4 podemos ver ejemplos de estos complicadísimos conceptos.
1.5.5. Grafos cúbicos Q n
Los grafos Q n son la representación de la red de vértices y aristas de un cubo ndimensional. El cubo de dimensión cero Q 0 consta, por definición, de un solo vértice.
A partir de ahí, se obtiene Q n uniendo por medio de aristas los vértices correlativos de
dos copias de Q n−1 . En la figura 1.7 podemos ver los primeros grafos cúbicos, hasta el
de dimensión 4.
1.6. Arboles
Un árbol es un grafo no dirigido, conexo y acíclico. Un grafo no dirigido que es
acíclico, pero posiblemente no conexo, se denomina bosque.
14
Abascal
Abascal
9
9A
9
A
A
Álvarez
Álvarez
12
12 B
12
B
B
Bastardo
Bastardo
18
18 C
18
C
C
Cobas
Cobas
36
36
36
D
D
D
Cazorla
Cazorla
C1
C1 E
C1
E
E
Dehesa
Dehesa
C2
C
C2
2F
F
F
González
González
C3
C3 G
C3
G
G
Guzmán
Guzmán
C4
C4 H
C4
H
H
Herrero
Herrero
C5
C5 I
C5
I
I
Lebrel
Lebrel
C7
C
C7
7 J
J
J
Zapatero
Zapatero
P6
P
P6
6 3
3
3
Zorrilla
Zorrilla
Cm
C
C
+
+
m+
m
Q0
Q0 ∗ A
Q0
∗A
∗
Q1
Q1 5 B
Q1
5B
5
C
C
Q2
Q
Q2
+
+
2+
D
D
Q3
Q
Q3
3 6
6
6
E
E
Q4
Q
Q4
412
12
12
F
Q 5 χ(K 5 ) = 5 F
Q5
χ(K 5 )Q=
5
χ(K
)
=
5
5
5
Q
0
G
G
χ(K
)
=
2
χ(K
)
=
2
χ(K
)
=
2
3,3
3,3
Abad 3,3
Abad
Abad
Q 1χ(C7 ) = 3Abascal
χ(C
7) = 3 H
Abascal χ(C7 ) = 3 H
Abascal
χ(esto)
=4 I
χ(esto) = 4Álvarez
Álvarezχ(esto) = 4 I
Álvarez
J
J
χ(esto
otro)
=
4
χ(esto
otro)
=
4
χ(esto
otro) = Bastardo
4
Bastardo
Bastardo
3
3
Cobas
Cobas
Cobas
+
(a) Cazorla +
(b)
Cazorla
Cazorla (c)
∗
Dehesa
Dehesa ∗
Dehesa
5
González
González 5
González
+
Guzmán
Guzmán +
Guzmán
6
Herrero
Herrero 6
Herrero
12
Lebrel
Lebrel 12
Lebrel
53
χ(K 5 ) = 5
Zapatero χ(K 5 ) = Q
Zapatero
Zapatero
χ(K 3,3 ) = 2
χ(K 3,3 ) = 2
Zorrilla
Zorrilla
Zorrilla
χ(C7 ) = 3
χ(C7 ) = 3
A
A
A
χ(esto) = 4
χ(esto) = 4
B
B
B
χ(esto otro) = 4
χ(esto otro) = 4 Q 4
C
C
C
D
D
D
(d)
(e)
E
E
E
F
F
F
Figura 1.7:
G
G Grafos Q n , para n = 0, . . . ,G4
H
H
H
I
I
I
J
J
J
3
3
3
+
+
+
∗
∗
∗
5
5
5
+
+
+
6
6
6
12
12
12
χ(K 5 ) = 5
χ(K 5 ) = 5
χ(K 5 ) = 5
χ(K 3,3 ) = 2
χ(K 3,3 ) = 2
χ(K 3,3 ) = 2
χ(C7 ) = 3
χ(C7 ) = 3
χ(C7 ) = 3
χ(esto) = 4
χ(esto) = 4
χ(esto) = 4
χ(esto otro) = 4
χ(esto otro) = 4
χ(esto otro) = 4
(a)
(b)
Q2
(c)
Figura 1.8: (a) Un árbol. (b) Un bosque. (c) Un grafo que no es ni un árbol ni un bosque
15
La figura 1.8(a) muestra un árbol, y en 1.8(b) vemos un bosque que no es un árbol,
al no ser conexo. El grafo de 1.8(c) no es un árbol ni un bosque, pues contiene un ciclo.
Antes de demostrar un importante teorema sobre árboles precisamos los dos lemas
siguientes, cuyas demostraciones son prácticamente idénticas.
Lema 1 Sea G un grafo no dirigido con n vértices y e aristas. Si G es conexo, se
verifica que e ≥ n − 1.
D EMOSTRACIÓN Por inducción sobre el número de vértices. El teorema es trivialmente
cierto para n = 1. Supongamos entonces que la desigualdad se verifica en todos los
grafos conexos con menos de n vértices.
Consideremos un vértice cualquiera v ∈ V (G) de grado d como el que mostramos en la figura 1.9, siendo sus vértices adyacentes v1 , v2 , . . . , vd . El grafo G − v
obtenido al suprimir v y sus aristas adyacentes posee n − 1 vértices, e − d aristas y
es posiblemente inconexo; al suprimir v, G puede divirse a lo sumo en d componentes conexas (¿por qué?). Sean entonces esas componentes los subgrafos C i de G, con
i = 1, 2, . . . , m ≤ d.
Cada componente C i es un grafo conexo con menos de n vértices. Por tanto, por
hipótesis de inducción, sus números de vértices n i y aristas ei satisfacen la desigualdad
ei ≥ n i − 1
i = 1, 2, . . . m
Sumando estas desigualdades sobre todas las componentes
!
m
m
m
X
X
X
ni − m
(n i − 1) =
ei ≥
i=1
i=1
i=1
Ahora, el primer sumatorio es el número de aristas de G − v, es decir, e − d, y el último
es el de vértices, n − 1. Como el número de componentes m no supera el grado d
e−d ≥n−1−m
e ≥n−1+d −m ≥n−1
es decir
como se quería demostrar.
El lema dual del recién probado cambia la conexión por la aciclicidad, con lo que
el sentido de la desigualdad se invierte.
Lema 2 Sea G un grafo no dirigido con n vértices y e aristas. Si G es acíclico, e ≤
n − 1.
D EMOSTRACIÓN Por inducción sobre el número de vértices. El teorema es trivialmente
cierto para n = 1. Supongamos entonces que la desigualdad se verifica en todos los
grafos acíclicos con menos de n vértices.
Consideremos un vértice cualquiera v ∈ V (G) de grado d como el que mostramos
en la figura 1.9, siendo sus vértices adyacentes v1 , v2 , . . . , vd . Al suprimir el vértice v
y obtener G − v, resulta ahora un grafo acíclico que, a diferencia del lema anterior,
posee al menos d componentes conexas (¿por qué?). Es decir, m ≥ d.
Ahora cada componente es un subgrafo acíclico y, por hipótesis de inducción
ei ≤ n i − 1
Sumando
m
X
i=1
ei ≤
m
X
i = 1, 2, . . . m
(n i − 1) =
m
X
i=1
i=1
16
ni
!
−m
Lebrel
Zapatero
Zorrilla
A
B
C
D
E
F
G
H
vd
I
C
m
J
3
..
+
.
∗C4
5
v
+ 6
6
12
χ(K 5 ) = 5
χ(K 3,3 ) = 2
v5
χ(C7 ) = 3
χ(esto) = 4
χ(esto otro) = 4
C3
v1
C1
v2
v
v3
C2
v4
Figura 1.9: Demostración de los lemas 1 y 2
En el presente caso, rige la desigualdad m ≥ d y se tiene entonces
e−d ≤n−1−m
es decir
e ≥n−1+d −m ≤n−1
como se quería demostrar.
Existen numerosas formulaciones equivalentes de la definición de árbol; el teorema
siguiente resume las fundamentales.
Teorema 4 Sea G = (V, E) un grafo no dirigido. Las siguientes afirmaciones son
equivalentes.
1.
G es un árbol
2. Dos vértices cualesquiera de G están conectados por un único camino simple
3.
G es conexo, pero si se le suprime una arista cualquiera, deja de serlo.
4.
G es conexo y |E| = |V | − 1
5.
G es acíclico y |E| = |V | − 1
6.
G es acíclico, pero si se le añade una arista, deja de serlo
D EMOSTRACIÓN 1 ⇒ 2) Sean u, v ∈ V . Como G es conexo, existe un camino simple
entre ellos. Si existen dos caminos simples distintos entre ambos vértices, se dará la
situación de la figura 4: los caminos p y p 0 divergen por primera vez en el vértice w
y vuelven a converger en el vértice z, pasando por vértices diferentes x e y. Como
resultado, es posible construir un ciclo, contra la hipótesis. Por tanto, no pueden existir
dos caminos simples distintos entre u y v.
2 ⇒ 3) Evidentemente, G es conexo. Si se suprime la arista (u, v) de G, los vértices
u y v quedan desconectados, pues, por hipótesis, dicha arista era el único camino simple
que los conectaba.
3 ⇒ 4) Una vez más, la conexión de G es parte de la hipótesis. Por otro lado, G
es acíclico, puesto que si tuviese un ciclo, podría suprimírsele una arista sin perder la
conexión. Por tanto, de los lemas precedentes de deduce que |E| = |V | − 1.
17
Álvarez
E
Bastardo
F
Cobas
G
Cazorla
H
DehesaI
González
J
Guzmán
3
Herrero
+
Lebrel
∗
Zapatero
5
Zorrilla
+
p
A6
x
v
B
12
u
χ(K 5 ) =C5
w
z
χ(K 3,3 ) =D2
χ(C7 ) = E3
y
χ(esto) = F4
0
p
χ(esto otro) =G4
H
Figura I1.10: Demostración de la implicación 1 ⇒ 2 en el teorema 4
J
3
7
+
∗
6
8
9
5
+
6
12
3
4
5
10
11
12
χ(K 5 ) = 5
χ(K 3,3 ) = 2
χ(C7 ) = 3
χ(esto) = 4
2
χ(esto otro) = 4 1
Figura 1.11: Arbol de doce nodos enraizado en el nodo 7
4 ⇒ 5) Si suprimimos una arista de G, deja de verificarse la desigualdad |E| ≥
|V | − 1; por tanto, de la implicación anterior se sigue que G es acíclico. La igualdad |E| = |V | − 1 es parte de la hipótesis.
5 ⇒ 6) Al añadir una arista a G, se viola la desigualdad |E| ≤ |V | − 1 y el
contrarrecíproco del lema 2 implica que G deja de ser acíclico.
6 ⇒ 1) Sean u y v dos vértices distintos de G (si no los hay la implicación es
trivial). Si existe una arista (u, v), los dos vértices son mutuamente accesibles; si no, la
adición de (u, v) a E(G) provoca la aparición de un ciclo C del que dicha arista es obviamente miembro. Suprimiendo (u, v) de C obtenemos un camino que conecta u y v.
1.6.1. Arboles enraizados
Un árbol enraizado es un árbol en el que marcamos uno de los vértices como
vértices disinguido. Dicho vértice se denomina raíz del árbol. Por ejemplo, el árbol de
la figura 1.11 tiene por raíz el nodo 7. Como puede verse, en los árboles enraizados es
más común llamar nodos a los vértices
Consideremos un nodo cualquiera v de un árbol enraizado de raíz r . Existe un único
camino entre r y v; cualquier nodo presente en ese camino es un ancestro o antecesor
de v. Si w es un ancestro de v, decimos que v es un descendiente de w. Todo nodo
es, por definición, ancestro de sí mismo; un ancestro de v diferente a él es un ancestro
propio. Un descendiente propio se define de forma análoga.
El subárbol con raíz en v es el subárbol inducido por los descendientes de dicho
vértice.
18
Lebrel
A
B
C
D
E
F
G
Abad
H
I
J
Álvarez
Zapatero
Abascal
3
+
∗
5
+
Guzmán
Bastardo González
6
12
χ(K 5 ) = 5
χ(K 3,3 ) = 2
χ(C7 ) = 3
Herrero
Dehesa
χ(esto) = 4 Cazorla
Cobas
χ(esto otro) = 4
Zorrilla
Figura 1.12: Buscando al abonado Dehesa
Supongamos que la última arista del (único) camino entre la raíz y un nodo v
es (w, v). En ese caso, decimos que w es el padre de v, y que v es hijo de w. Dos
nodos que tienen el mismo padre son hermanos. Un nodo sin hijos es una hoja o nodo
externo; en caso contrario, es un nodo interno. El número de hijos de un nodo es su
grado; obsérvese que, en este contexto, el grado de un nodo es una unidad inferior a lo
definido en la sección 1.2.2. Si todos los nodos de un árbol tienen grado a lo sumo m,
el árbol es m-ario. Así, en un árbol ternario cada nodo tiene, a lo sumo, tres hijos;
posiblemente, menos.
Definimos la profundidad de un nodo v como la longitud del camino de la raíz a v.
La altura de un árbol es el máximo de las profundidades de sus nodos. El árbol de la
figura 1.11 tiene altura 3, puesto que los nodos 1 y 2 tienen ambos dicha profundidad.
El subárbol con raíz en el nodo 9 tiene altura uno.
Un árbol enraizado en el que los hijos de cada nodo tienen asignado un orden es
un árbol ordenado. Esto significa que si un nodo tiene k hijos, hay un primer, segundo,
. . . , k-ésimo hijo.
El interés de los árboles reside en su uso como estructuras de datos para clasificar
información. Por ejemplo, el árbol de la figura 1.6.1 codifica un índice de una base de
datos de abonados telefónicos. El árbol es ordenado y cuaternario; tiene, además, la
propiedad de que los datos residentes en una rama son siempre anteriores a los datos
que residen en ramas situadas a su derecha. Esto lo convierte en un árbol de búsqueda.
Para localizar al abonado Dehesa, es suficiente encontrar qué hijo del nodo raíz lo
contiene, lo que se determina de inmediato. Prosiguiendo recursivamente de esta forma,
llegamos a encontrar al abonado en un número de pasos igual, a lo sumo, a la altura del
árbol de búsqueda.
¿Cuál podría ser esa altura en el caso de tener un millón de abonados?
Teorema 5 Sea T un árbol m-ario de altura h. Entonces, el número de nodos n del
árbol satisface la desigualdad
m h+1 − 1
n≤
m−1
19
Dicho de otro modo, un árbol m-ario de n nodos tiene que tener altura mínima dada
por
h ≥ −1 + logm ((m − 1)n + 1)
En particular, un árbol binario satisface las desigualdades siguientes
n
h
≤ 2h+1 − 1
≥ −1 + log2 (n + 1)
D EMOSTRACIÓN Si cada nodo tiene a lo sumo m hijos, habrá a lo sumo un nodo de
nivel 0 (el nodo raíz); m nodos de nivel 1 (sus hijos); m 2 nodos de nivel 2 (sus nietos);
m 3 nodos de nivel 3 (sus bisnietos); y, en general, el nivel k tendrá una población
máxima de m k nodos. Por lo tanto, el número total de nodos será inferior a
1 + m + m2 + m3 + · · · + mh =
m h+1 − 1
m−1
que es lo que se quería demostrar. Las demás desigualdades se obtienen despejando la
altura y particularizando para m = 2.
Como ejemplo, en el caso de un millón de abonados, tendríamos un árbol de altura
mínima
h ≥ −1 + log4 (3·106 + 1) = 9,758
luego un árbol de altura h = 10 podría albergar nuestro millón de abonados, si está correctamente equilibrado. En esta hipótesis, nuestra búsqueda concluiría tras la lectura
de once registros de nuestra base de datos a lo sumo, lo que no está nada mal.
1.6.2. Arboles binarios
Aunque podríamos definir estos árboles a partir de lo estudiado en las secciones
anteriores, seguiremos otra vía mucho más conveniente. Un árbol binario T es una
estructura definida en un conjunto finito de nodos, que, o bien
no contiene nodos, o bien
contiene tres conjuntos distintos de nodos: un nodo raíz, un árbol binario llamado
el subárbol izquierdo y otro llamado el subárbol derecho.
Observemos que está permitido que un árbol binario sea vacío: se trata del árbol
vacío o árbol nulo. Dado un árbol binario de raíz r , si el subárbol izquierdo no es
vacío, su raíz es el hijo izquierdo de r ; el hijo derecho de define análogamente. Es
posible, pues, que un hijo izquierdo o derecho estén ausentes (cuando sea vacío el
correspondiente subárbol).
Es preciso hacer notar que un árbol binario no es simplemente un árbol ordenado en
que cada nodo tiene a lo sumo dos hijos. En tal caso, no podríamos decidir, para un nodo
con un solo hijo, si éste es el izquierdo o el derecho. El árbol binario, pues, proporciona
“más estructura” que un simple árbol ordenado. Un nodo puede tener solamente un hijo
izquierdo o solamente un hijo derecho.
1.7. Recorridos de grafos
Un recorrido de un grafo es un procedimiento que origina una enumeración ordenada de sus vértices. Comenzaremos nuestro estudio de los recorridos por el caso
particular de los árboles binarios
20
P REORDEN(T )
1 if T = NIL
2
then no hacer nada
3
else V ISITA(T )
4
P REORDEN (T.i z)
5
P REORDEN (T.de)
P OSTORDEN(T )
1 if T = NIL
2
then no hacer nada
3
else P OSTORDEN(T.i z)
4
P OSTORDEN(T.de)
5
V ISITA(T )
I NORDEN(T )
1 if T = NIL
2
then no hacer nada
3
else I NORDEN(T.i z)
4
V ISITA(T )
5
I NORDEN(T.de)
Figura 1.13: Pseudocódigo de los recorridos de un árbol binario
1.7.1. Recorridos de árboles binarios
Recordemos que un árbol binario se define como
un grafo vacío, o bien
un nodo raíz más dos árboles binarios que constituyen el subárbol izquierdo y el
derecho
Esta definición recursiva es de especial interés cuando recorremos el árbol. Podemos definir tres maneras de visitar todos y cada uno de los vértices según se ve en la
figura 1.13. Aplicando estos procedimientos al árbol de la figura 1.14(a), se obtienen
las secuencias que se muestran en la tabla adjunta 1.14(b).
Estos tres tipos de recorrido se relacionan con tres notaciones usuales para las expresiones algebraicas
infija La notación del álgebra corriente exige que los operadores vayan en medio de
sus dos operandos. Por ejemplo, la expresión
3 + 5 ∗ (6 + 12)
está en notación infija.
postfija Se obtiene colocando cada operador binario a continuación de sus operandos. Al contrario que la infija, no requiere paréntesis ni reglas de precedencia
para resolución de la ambigüedad. La expresión anterior, en notación posfija se
convierte en
3 5 6 12 + ∗+
La notación postfija (también llamada polaca inversa es muy adecuada para su
interpretación por máquinas, lo que no es de extrañar a la luz del ejemplo anterior. Es muy sencillo escribir un programa que interprete de forma directa expresiones postfijas empleando una pila como estructura de datos auxiliar
pretfija Se obtiene colocando los operadores binarios como prefijos de los operandos.
Así:
+ 3 ∗ 5 + 6 12
No es de mucho uso, pero aún pervive en el lenguaje Lisp, donde el cálculo
anterior se escribiría como
(+ 3 (* 5 (+ 6 12)))
21
Zorrilla
A
B
C
D
E
F
G
H
I
J
3
+
∗
5
+
6
12
χ(K 5 ) = 5
χ(K 3,3 ) = 2
χ(C7 ) = 3
χ(esto) = 4
χ(esto otro) = 4
e
a
g
c
j
b
f
h
d
(a) Árbol binario
Tipo
Inorden
Preorden
Postorden
c
e
c
a
a
b
b
c
a
Resultado
e j g h
b g j f
j h d f
f
h
g
d
d
e
(b) Recorridos
Figura 1.14: Recorridos de un árbol binario
a pesar de que tampoco son precisos paréntesis ni reglas de precedencia para
resolución de ambigüedades (el uso de paréntesis en Lisp tiene un significado
distinto).
Las tres notaciones resultan de recorrer en in-, pre- y postorden un árbol sintáctico
de la expresión, como puede comprobarse en la figura 1.7.1.
1.7.2. Recorridos eulerianos
El problema que estudiamos a continuación se encuentra en el origen mismo de la
teoría de grafos y de otra importante rama de la Matemática: la topología. Se trata del
célebre problema de los puentes de Königsberg.
La ciudad de Königsberg, capital de Prusia y patria del célebre filósofo Immanuel
Kant, es atravesada por el río Pregel. En medio del río encontramos dos islas que se
encuentran comunicadas con las orillas y entre sí por siete puentes, como se muestra
en la figura 1.16.
Los habitantes de Königsberg se plantearon si era posible dar un paseo que recorriese los siete puentes sin repetir ninguno (y, naturalmente, sin mojarse). Tras numerosos
intentos infructuosos, la solución de este divertido problema combinatorio fue aportada por el matemático suizo Leonhard Euler en 1736. Euler no solamente demostró la
imposibilidad del pretendido paseo, sino que, además, dio un sencillo criterio general
para resolver cualquier problema del mismo tipo.
Si prescindimos de detalles anecdóticos, es fácil ver que la búsqueda de un paseo
por los puentes equivale a encontrar un camino que recorra todas las aristas del grafo
de la figura 1.17 sin repetir ninguna (naturalmente, los vértices pueden repetirse). O,
22
Zapatero
Cm
2
Q0
3
Zorrilla
Q1
4
A
Q2
6
B
Q3
9
C
Q4
12
D
Q5
18
E
36
F Abad
C1
G Abascal
C2
H Álvarez
C3
IBastardo
C4
J Cobas
C5
Cazorla
C7
+ Dehesa +
P6
González
Cm
Recorrido
Expresión
Guzmán
∗ Q0
3
Inorden
3 + 5 ∗ 6 + 12
Herrero
Q1
Postorden
3 5 6 12 + ∗+
Lebrel
Zapatero
Q2
Preorden
+3 ∗ 5 + 6 12
Q3
χ(K 5 ) = 5 Zorrilla
5
χ(K 3,3 ) = 2
Q4 +
Q5
χ(C7 ) = 3
χ(esto) = 4
Abad
12
6
χ(esto otro) = 4
Abascal
Álvarez
E
(a)
(b)
Bastardo
F
Cobas
G
Cazorla
H
Figura 1.15: a) Árbol sintáctico y b) notaciones infija, prefija y postfija para la expresión
Dehesa
I
3 + 5 ∗ (6 + 12)
González
J
Guzmán
3
+
Herrero
Lebrel
∗
ZapateroB
5
+
Zorrilla
6
12
χ(K 5 ) = 5
A
D
χ(K 3,3 ) = 2
χ(C7 ) = 3
E
χ(esto) = 4
F
χ(esto otro) = 4
G C
H
FiguraI 1.16: Los puentes de Königsberg
J
3
+
A
∗
5
+
6
12
D
χ(K 5 ) = 5B
χ(K 3,3 ) = 2
χ(C7 ) = 3
χ(esto) = 4
χ(esto otro) = 4 C
Figura 1.17: Los puentes de Königsberg
23
como suele formularse en las revistas de matemática recreativa, dibujar la figura de un
solo trazo sin levantar el lápiz del papel.
Sea G un grafo no dirigido. Denominamos recorrido euleriano de G a un camino que pasa por todas las aristas de G exactamente una vez. Es decir, si C =
(v1 , v2 , . . . , vn ), la sucesión de aristas (v1 , v2 ), (v2 , v3 ), (v3 , v4 ), . . . , (vn−1 , vn ) contiene cada arista de G exactamente una vez. Si además C es cerrado, denominamos al
recorrido un circuito euleriano
El grafo del problema de los puentes no es un grafo dirigido en el sentido de la
definición dada en 1.2.1, sino un multigrafo, en el que permitimos que haya más de
una arista distinta entre dos vértices. Aunque no hemos definido rigurosamente estos
objetos, todo lo que probaremos en la presente sección se extiende a ellos sin dificultad.
Decimos que un grafo es euleriano si posee un recorrido euleriano. Obviamente,
un grafo euleriano tiene que ser conexo. Pero, además, se necesitarán condiciones adicionales para garantizar la existencia de recorridos eulerianos. Tras bastantes ensayos
con el grafo de los puentes, parece claro que no podemos encontrar una solución.
La razón está en la paridad de los vértices del grafo. Decimos que un vértice v de
un grafo no dirigido G es par (respectivamente, impar) si su grado es un entero par
(resp. impar). Por ejemplo, en el grafo de la figura 1.17, todos los vértices son impares.
Ahora bien, si intentamos dibujarlo de un solo trazo, cada vez que pasemos por un vértice, entraremos en él por una arista y saldremos por otra; ambas quedarán inutilizadas
para su recorrido posterior. Excepto los vértices inicial o final de la trayectoria, todos
los demás (vértices de paso) tendrán tantas aristas de entrada como de salida; por tanto,
un número par de ellas, y su grado será par. Esto nos lleva al teorema de Euler.
Teorema 6 Sea G un grafo conexo no dirigido. Entonces, G posee un circuito euleriano si y solamente si G carece de vértices impares.
D EMOSTRACIÓN
Supongamos primero que G posee un circuito euleriano dado por la sucesión de
vértices C = (v0 , v1 , v2 , . . . , vn ). Por definición, cada arista del grafo aparece en la
sucesión (v0 , v1 ), . . . , (vn−1 , vn ) exactamente una vez, y al ser el recorrido cerrado,
v0 = v n .
Sea v un vértice cualquiera de G. Si v es el único vértice de G, no hay nada que
demostrar. Si no es así, v tendrá alguna arista incidente puesto que G se supone conexo,
y esto obliga a que v aparezca cierto número de veces en el camino C.
En cada aparición de v, éste figura dos veces; si, por ejemplo, está en la posición
k-ésima de C, v = vk y tenemos dos aristas (vk−1 , vk ) y (vk , vk+1 ) incidentes en vk .
Como estas aristas solamente figuran una vez en el recorrido, obtenemos que el número
de aristas incidentes en v es igual al doble del número de apariciones de v en C, y, como
todas las aristas son visitadas por C, el grado de v es forzosamente un número par.
La única excepción de este argumento se encuentra en los extremos: cuando k =
0, n, las dos aristas (vn , v0 ) y (v0 , v1 ) se añaden al recuento de aristas incidentes en v0
según el argumento anterior, de modo que también v0 = vn debe ser par.
La implicación contraria se demuestra por inducción sobre el número de vértices.
De hecho, vamos a demostrar esta implicación para multigrafos dirigidos.
Supongamos que G es un multigrafo conexo todos cuyos vértices son de grado par.
En el caso de un grafo de un solo vértice, el circuito euleriano se obtiene de forma
trivial. Así pues, sea |V | = n y supongamos que todo multigrafo conexo de menos
de n vértices, todos pares, posee un circuito euleriano.
Sea v un vértice cualquiera de G; por hipótesis de conexión, el grado d de v debe ser
un número par estrictamente mayor que cero. Consideremos los vérticesi v 1 , v2 , . . . , vd
24
Cobas
Cazorla
Dehesa
González
Guzmán
Herrero
Lebrel
Zapatero
Zorrilla
A
B
C
D
E
F
G
H
I
J
3
+
∗
5
+
6
12
χ(K 5 ) = 5
χ(K 3,3 ) = 2
χ(C7 ) = 3
χ(esto) = 4
χ(esto otro) = 4
C3
Cobas
C4
Cazorla
C5
Dehesa
C7
González
P6
Guzmán
Cm
Herrero
Q0
Lebrel
Q1
Zapatero
Q2
Zorrilla
Q3
A
Q4
B
Q5
C
Abad
D
Abascal
E
Álvarez
F
Bastardo
G
Cobas
H
Cazorla
I
Dehesa
J
González
v1
3
vd
Guzmán
+
Herrero
∗
Lebrel
v2
5
Zapatero
+
..
v Zorrilla
6
.
A
12
B
χ(K 5 ) = 5
v3
C
χ(K 3,3 ) = 2
D
χ(C7 ) = 3
E
v5
χ(esto) = 4
v4 F
χ(esto otro) = 4
G
(a) H
I
J
v1
3
vd
+
∗
5
+
v
6 ..
.
12
χ(K 5 ) = 5
χ(K 3,3 ) = 2
χ(C7 ) = 3
χ(esto) = 4 v5
v4
χ(esto otro) = 4
v1
vd
v2
..
.
v
v3
v5
v4
(b)
v2
v3
(c)
Figura 1.18: Demostración del teorema de Euler: (a) antes de suprimir v. (b) Suprimido v y añadidas las aristas auxiliares, el grafo resultante posee un circuito euleriano.
(c) Construcción del circuito euleriano para G
25
adyacentes a v, como se muestran en la figura 1.18(a). Si suprimimos v y las aristas
incidentes en él, obtenemos el grafo G − v; la supresión de las aristas indicadas se
muestra en gris en la figura 1.18(b). Ahora, los vértices vi resultan ser todos impares
tras la supresión. Adjuntando las aristas (v1 , v2 ), (v3 , v4 ), . . . , (vd−1 , vd ) obtenemos
un nuevo grafo en el que todos los vértices vuelven a ser de grado par; no obstante,
el número de vértices es ahora n − 1. Además, el nuevo grafo es obviamente conexo
(obsérvese que, por la adjunción de las nuevas aristas, podemos obtener un multigrafo).
Por lo tanto, se aplica la hipótesis de inducción, y deducimos que existe un recorrido
euleriano. El paso por las aristas auxiliares de dicho circuito se produce en sentidos
imprevisibles que indicamos con flechas en 1.18(b).
Queda convertir este circuito euleriano en uno para G. Para ello, basta observar que la nueva arista (vi−1 , vi ) siempre puede ser reemplazada por el recorrido de
(vi−1 , v), (v, vi ) (y en sentido contrario si es necesario), como se muestra en la figura 1.18(c). Con esto obtenemos un circuito euleriano de G y el teorema queda demostrado.
De este teorema se deduce un interesante corolario.
Corolario 1 Sea G un grafo conexo no dirigido. Si G tiene exactamente dos vértices
impares, G posee un recorrido euleriano. Recíprocamente, si G posee un recorrido euleriano, sus vértices extremos son los únicos vértices impares de G (si son diferentes).
D EMOSTRACIÓN Sean v y w los vértices impares en cuestión, y añadamos a G la
arista (v, w) (observemos que, una vez más, de esta adjunción puede resultar un multigrafo). Con esto, obtenemos un grafo en las hipótesis del teorema anterior, que posee
un circuito euleriano. Forzosamente, el circuito para por la arista (v, w) exactamente
una vez. Suprimiéndola del circuito obtenemos un recorrido del grafo G. Recíprocamente, un recorrido euleriano de vértices extremos v y w se completa, añadiendo la
arista (v, w), obteniendo un circuito euleriano del multigrafo resultante. Por lo tanto,
éste tiene todos sus vértices pares, de lo que se deduce que los vértices v y w eran
impares al principio.
Por lo tanto, un grafo tiene un recorrido euleriano si y solamente si el número de
vértices impares es cero o dos. Que dicho número no pueda ser la unidad es consecuencia del siguiente
Teorema 7 Sea G un grafo no dirigido. El número de vértices impares de G es siempre
par.
D EMOSTRACIÓN Sean {v1 , v2 , . . . , vn } los vértices de G y d1 , d2 , . . . , dn sus respectivos grados. El número de extremos que poseen las aristas de G es, evidentemente, 2|A|,
puesto que cada arista tiene dos extremos. Ahora bien, podemos contar dicho número
de extremos sumando los grados de todos los vértices, puesto que dichos grados son el
número de extremos de aristas que confluyen en un vértice dado. De modo que se tiene
n
X
di = 2|A|
i=1
Ahora bien, esto significa que la suma de los grados de los vértices es par. Como la
suma de dos números impares es siempre par, el número de d i0 s no puede ser impar,
puesto que el resultado de la suma sería impar en ese caso. Por tanto, hay un número
par de vértices impares.
26
B
C
D
E
F
G
H
I
J
3
+
∗
5
+
6
12
χ(K 5 ) = 5
χ(K 3,3 ) = 2
χ(C7 ) = 3
χ(esto) = 4
χ(esto otro) = 4
Figura 1.19: El puzzle de Hamilton
Es decir, un grafo nunca podrá tener un solo vértice impar (ni tres, ni cinco. . . ). Este
teorema se conoce a veces como “lema del apretón de manos”, porque puede ponerse
en la siguiente forma: en una fiesta, el número de personas que estrechan la mano a una
cantidad impar de gente tiene que ser necesariamente par. Es una consecuencia directa
de que en un apretón siempre intervienen dos manos.
1.7.3. Caminos hamiltonianos
Un problema de enunciado análogo, pero cuya simplicidad es tremendamente engañosa, es la determinación de si un grafo posee un camino hamiltoniano.
Sea G un grafo (dirigido o no). Un camino C en G se dice que es hamiltoniano si
C pasa por cada vértices del grafo exactamente una vez. Un ciclo que pasa exactamente
una vez por cada vértice (excepto el vértice inicial, que aparece también como final),
se denomina ciclo hamiltoniano
Al contrario que en el caso euleriano, aquí no precisamos recorrer todas las aristas; simplemente nos interesa visitar cada vértice exactamente una vez. Aunque no se
menciona explícitamente, los caminos hamiltonianos son siempre simples, lo que se
deduce directamente de la definición.
El nombre de este tipo de recorrido deriva de un puzzle ideado por Sir William
Rowan Hamilton (1805–1865). Básicamente, Hamilton pedía encontrar un ciclo hamiltoniano en un grafo isomorfo al retículo de vértices de un dodecaedro. La solución
es bastante sencilla. Sin embargo, dado un grafo arbitrario, no resulta fácil determinar
si posee un ciclo hamiltoniano o no.
De hecho, no se conoce ninguna caracterización fácil de los grafos hamiltonianos, y
es probable que nunca se conozca ninguna. La razón de ello es que el problema del ciclo
hamiltoniano es NP-completo. No es sencillo definir esta propiedad; baste mencionar
que una solución eficiente del problema del ciclo hamiltoniano permitiría resolver de
golpe una vasta familia de problemas computacionales enormemente difíciles, y existen
sospechas muy fundadas de que tal solución eficaz no puede existir.
Esto no implica que, para determinados grafos de tipos muy particulares, no sea posible determinar la existencia de caminos hamiltonianos (no necesariamente cerrados).
Un ejemplo de ello lo constituyen los torneos definidos en la sección 1.5.2.
Teorema 8 Todo torneo posee un camino hamiltoniano
D EMOSTRACIÓN Por inducción sobre el número de vértices n = |V |. El teorema es
trivial para n = 1.
27
B
C
D
E
F
G
H
I
J
3
+
∗
5
+ v2
6
12
χ(K 5 ) = 5
χ(K 3,3 ) = 2
χ(C7 ) = 3
χ(esto) = 4
χ(esto otro) = 4
vm
v3
vm+1
vn
v1
Figura 1.20: Construcción de un camino hamiltoniano en un torneo.
Consideremos entonces un torneo G de n vértices y supongamos que todo torneo
de n − 1 vértices posee un camino hamiltoniano. Sea v = v1 un vértice de G y consideremos el grafo G − v que se obtiene suprimiendo v y todas las aristas que entran
o salen de dicho vértice. El grafo resultante tiene n − 1 vértices y, por hipótesis de
inducción, posee un camino hamiltoniano. Sea éste C = (v2 , v3 , . . . , vn ); numeramos
los vértices en el orden que dicho camino nos proporciona, por conveniencia. Nuestra
notación implica, naturalmente, que el camino supuesto por hipótesis va de v 2 a vn , no
en sentido contrario.
Ahora pueden darse tres posibilidades:
1. El torneo posee una arista (v1 , v2 ). En ese caso, puede completarse el camino C
añadiéndole al principio esta arista y obteniéndose un camino hamiltoniano C 0 =
(v1 , v2 , . . . , vn ) para G, con lo que el teorema quedaría demostrado.
2. El torneo posee una arista (vn , v1 ). En ese caso, puede completarse el camino C
añadiéndole al final esta arista y obteniéndose un camino hamiltoniano C 0 =
(v2 , . . . , vn , v1 ) para G, con lo que el teorema quedaría demostrado.
3. Si ninguna de las circunstancias anteriores se da, la definición de torneo obliga
a que G posea las aristas (v2 , v1 ) y (v1 , vn ). Para cada vértice vk , con 2 ≤ k ≤
n, debe existir una arista ak con ak = (v1 , vk ) o ak = (vk , v1 ), puesto que
así lo exige el hecho de que G sea un torneo. Esta situación se describe en la
figura 1.7.3.
Consideremos entonces la sucesión de aristas a2 , a3 , a4 , . . . , an . En nuestro caso,
la primera arista entra en v1 y la última sale de v1 . Por lo tanto, tiene que haber
una última arista que entre en v1 en esa sucesión, antes de llegar a an . Sea dicha
arista am . Entonces, si reemplazamos la arista vm , vm+1 de C por el par de aristas
am y am+1 obtenemos
C 0 = (v2 , v3 , . . . , vm , v1 , vm+1 , vm+2 , . . . , vn )
que constituye el deseado camino hamiltoniano, y el teorema también es cierto
para G en este caso.
28
González
Guzmán
Herrero
Lebrel
Zapatero
Zorrilla
A
B
C
D
E
F
G 1
H
I
J
+ 4
∗
2
3
5
6
8
9
Vértice
1
2
3
4
5
6
7
8
9
10
+
12
χ(K 5 ) = 5
χ(K 3,3 ) = 2
χ(C7 ) = 3
χ(esto) = 4
χ(esto otro) = 4
7
Adyacentes
{2, 4}
{1, 3, 5}
{2, 5}
{1, 5, 7, 8}
{2, 3, 4, 6, 8, 9}
{5}
{4, 8, 10}
{4, 5, 7, 9, 10}
{5, 8}
{7, 8}
10
(a) Grafo ejemplo
(b) Lista de adyacencia
Figura 1.21: Datos de partida para recorridos en anchura y profundidad
1.7.4. Recorridos en anchura y profundidad
Los algoritmos clásicos de teoría de grafos se basan en dos procedimientos básicos de recorrido denominados recorrido en anchura (breadth-first) y recorrido en
profundidad (depth-first). Aunque admiten muchas formulaciones (por ejemplo, como algoritmos de búsqueda en árboles), aquí estableceremos su funcionamiento en el
caso de grafos no dirigidos; para otros contextos funcionan exactamente igual con las
modificaciones obvias.
Consideremos el grafo de la figura 1.21(a), en la cual mostramos además su representación por listas de adyacencia (1.21(b)). Vamos a enunciar y ejecutar dos algoritmos que producen una enumeración ordenada de cada vértice del árbol. En cada
algoritmo, procedemos visitando cada vértice y añadiendo sus vecinos a una lista de
vértices pendientes. La visita de un vértice consiste en marcarlo como visitado y, si
procede, tratar la información que contiene y emitir su nombre o algún otro dato como
resultado de la visita. Hecho esto, seguimos tratando los vértices que queden pendientes.
A grandes rasgos, los algoritmos de recorrido se describen en pseudocódigo en la
figura 1.22. El recorrido en profundidad admite una formulación recursiva muy simple, mientras que el recorrido en anchura debe formularse en términos de una cola
de vértices pendientes de visitar. En la cola, que inicialmente contiene sólo el vértice
de partida, los vértices se mantienen en orden; se extraen del principio con la operación S ACA P RIMERO y se añaden al final con la operación E NCOLA. Los vértices ya
visitados no se introducen en la cola en dicha operación.
En la tabla de la figura 1.23(a) podemos observar la operación del algoritmo de
recorrido en anchura. En cada paso, se toma el primer elemento de la cola, que se anota
como visitado, y se examina su lista de adyacencia. Los vecinos que no hayan sido
ya visitados se añaden al final de la cola antes de proceder a la siguiente iteración.
29
D EPTH -F IRST(G, v)
1 V ISITA (v)
2 for each w in Ad j (v)
3 do D EPTH -F IRST(G, w)
B READTH -F IRST(G, v)
1 Q ← [v]
2 while Q 6= ∅
3 do w ← S ACA P RIMERO (Q)
4
V ISITA(w)
5
E NCOLA(Ad j (w))
(a) En profundidad
(b) En anchura
D EPTH -F IRST-NR(G, v)
1 S ← vaci o
2 P USH (v)
3 while S 6= ∅
4 do w ← P OP(S)
5
if w no visitado
6
then
7
V ISITA(w)
8
next ← Ad j (w)
9
next ← next − V ISITADOS(next)
10
P USH(next)
11
(c) En profundidad, no recursivo
Figura 1.22: Recorridos en anchura (a) y en profundidad (b, c); pseudocódigos
Como resultado de este proceso, obtenemos que el recorrido construye un árbol como
el mostrado en 1.23(b). Cada nodo figura en este árbol como hijo del nodo “culpable”
de su ingreso en la cola Q. Un árbol de esta forma es un árbol abarcador (spanning
tree): cubre todos los vértices del grafo.
El recorrido de los vértices en profundidad es más difícil de visualizar al ser recursiva la formulación natural del algoritmo 1.22(a). La idea consiste en visitar en cada
paso cualquiera de los nodos vecinos aún no visitados, hasta que llegamos a un callejón
sin salida (es decir, no hay más vecinos inmediatos sin visitar). En ese caso es preciso
volver atrás y reiniciar nuestro paseo en el último punto en el que dejamos sin explorar
alguna posibilidad.
Una forma menos vaga de expresar este procedimiento es la forma no recursiva
del recorrido en profundidad que se esboza en el algoritmo de la figura 1.22(c). En
esta versión se emplea una pila S, en la que se almacenan los vértices pendientes de
ser recorridos. La operación de una pila es inversa a la de una cola: los elementos se
introducen en ella por delante (con la operación P USH) y se sacan de ella también del
principio (P OP).
Inicialmente introducimos en la pila sólo el vértice de partida. Mientras la pila no se
vacíe, tomamos el primer elemento de la pila (que es el último introducido, al revés que
en una cola); si no está marcado como visitado ya, lo visitamos; y finalmente apilamos
su lista de adyacentes (salvo los que estén marcados como visitados, que no se añaden).
30
Zapatero
Zorrilla
A
B
C
D
E
F
G
H
I
J
Visitados
–
1
12
124
1245
12453
124537
1245378
12453786
124537869
1 2 4 5 3 7 8 6 9 10
Cola Q
+
1
∗
23
453
+
5378
37869
12
7869
χ(K 5 ) = 5
8 6 9 10
χ(K 3,3 ) = 2
6 9 10
χ(C7 ) = 3
9 10
χ(esto) = 4
10
χ(esto otro) = 4
–
1
2
3
4
5
6
7
8
9
10
(b) Arbol abarcador
(a) Traza
Figura 1.23: Funcionamiento del algoritmo B READTH -F IRST: (a) Traza del algoritmo,
con la historia de vértices visitados y el estadode la cola en cada iteración, (b) árbol
abarcador resultante del recorrido
Un ejemplo de ejecución de este proceso aparece en la tabla de la figura 1.24(a),
donde vamos viendo la historia de los contenidos de la pila y los elementos que van
visitándose en sucesión. Como resultado del proceso obtenemos también el diagrama 1.24(b), que es otro árbol abarcador del grafo inicial. Una vez más, las aristas del
grafo relacionan cada vértice con el “culpable” de su inclusión en la pila de pendientes.
Las flechas grises indican los momentos en que se produjo vuelta atrás (backtracking)
al haberse encontrado un callejón sin salida.
1.7.5. Caminos mínimos, MST y demás
Los algoritmos de recorrido de la sección 1.7.4 son la base de los algoritmos clásicos de teoría de grafos que se estudian en la teoría de Estructuras de Datos y Algorítmica. De hecho, la estructura de datos básica subyacente a las búsquedas en anchura
y profundidad (cola o pila) puede reemplazarse por una estructura más general denominada cola de prioridad, en la que los elementos son recuperados de acuerdo con
un valor de prioridad que se asocia a cada uno. Con valores adecuados de la prioridad, se obtienen búsquedas en anchura, en profundidad o recorridos que conducen a
algoritmos para encontrar caminos mínimos o árboles abarcadores.
Estos conceptos se relacionan con el concepto de red. Una red se define como un
grafo a cada una de cuyas aristas se ha asociado un número real, denominado su peso
o coste. En la figura 1.25 tenemos un ejemplo de red. El coste asociado a un camino
se obtiene de la forma obvia: sumando los pesos de las aristas que lo componen, y lo
mismo puede definirse para un subárbol de la red correspondiente.
Se denomina camino mínimo (o camino más corto) entre dos vértices v y w al
camino de peso menor que une los dos vértices. En la red de la figura 1.25, el camino
más corto entre los vértices 1 y 8 es el marcado en línea de trazos. El algoritmo para
encontrar este tipo de caminos es el algoritmo de Dijkstra y se estudiará con profusión
en la asignatura de Estructuras de Datos.
31
Pila
1
24
2875
2872368
2 8 7 2 3 6 9 7 10
287236977
28723697
2872369
287236
28723
2872
287
28
2
Herrero
Lebrel
Zapatero
Zorrilla
A
B
C
D
E
F
G
H
I
J
Visitado
1
4
+
5
∗
8
10
+
7
–
12
9
χ(K 5 ) = 5
6 χ(K 3,3 ) = 2
3
χ(C7 ) = 3
2 χ(esto) = 4
–
χ(esto
otro) = 4
–
–
1
2
3
4
5
6
7
8
9
10
(b) Arbol abarcador
(a) Evolución del stack
Figura 1.24: Funcionamiento del algoritmo D EPTH -F IRST: (a) Traza del algoritmo,
con la historia de vértices visitados y el estado de la pila en cada iteración, (b) árbol
abarcador resultante del recorrido
. Las flechas grises indican los procesos de backtracking.
Las aristas marcadas con trazo grueso en la misma figura (de pesos 3, 6, 5, 13, 14,
17 y 25) constituyen un árbol abarcador mínimo (en inglés, minimum spanning tree
o MST. Se trata de un árbol que cubre todos los vértices del grafo teniendo el peso
menor posible. Existen dos algoritmos clásicos para encontrar tal MST, los algoritmos
de Kruskal y Prim; serán también objeto de estudio en el futuro.
32
Q0
Q1
Q2
Q3
Q4
Q5
Abad
Abascal
Álvarez
Bastardo
Cobas
Cazorla
Dehesa
González
Guzmán
Herrero
Lebrel
Zapatero
Zorrilla
A
B
C
D
E
F
G
H
I
J
2
+
∗
32
12
21
8
6
1
5
+
17
13
14
8
χ(K 5 ) = 5
χ(K 3,3 ) = 2
χ(C7 ) = 3
χ(esto) = 4
χ(esto otro) = 4
18
3
3
15
6
7
24
4
25
5
69
Figura 1.25: Una red con el camino más corto entre 1 y 8 y su MST
33
Cazorla
Dehesa
González
Guzmán
Herrero
Lebrel
Zapatero
Zorrilla
A
B
C
D
E
F1
G
H
I
J
2
2
1
2
1
2
3
1
3
2
1
3
4
2
1
1
χ(C7 ) = 3
χ(K 3,3 ) = 2
+
∗
+
61
12
2
2
1
4
5
χ(K 5 ) = 5
1
2
1
3
3
2
4
2
1
4
2
1
2
2
3
3
χ(esto) = 4
1
3
1
χ(esto otro) = 4
Figura 1.26: Algunos grafos y sus números cromáticos
1.8. Planaridad y coloreado
Se dice que un grafo G = (V, E) (simple, no dirigido y sin bucles) es coloreable con n colores, o simplemente n-coloreable, si existe una función f : V →
{1, 2, . . . , n} tal que si u y v son vértices adyacentes, f (u) 6= f (v). Intuitivamente,
esta definición implica que, disponiendo de n colores distintos, podemos colorear los
vértices del grafo de modo que los vértices vecinos se distingan por el color. El menor
número n de colores que resulta suficiente para colorear un grafo G se denomina su
número cromático, y se denota por χ(G).
En la figura 1.26 mostramos algunos ejemplos de grafos con diferentes números
cromáticos.
Vamos a dar algunos teoremas que nos permiten estimar un número de colores
suficiente para el coloreado de ciertos grafos
Teorema 9 Dado un grafo G, las siguientes afirmaciones son equivalentes: a) G es
2-coloreable, b) G es bipartito, y c) G carece de ciclos de longitud impar.
D EMOSTRACIÓN La equivalencia de b) y c) fue el contenido del teorema 3; nos queda,
pues, probar la (casi trivial) equivalencia de a) y b).
Si un grafo G admite un coloreado con dos colores, llamémoslo f : G → {1, 2},
denotemos
V1
= {v ∈ V (G) | f (v) = 1}
V2
= {v ∈ V (G) | f (v) = 2}
es decir, los conjuntos V1 y V2 contienen los vértices de color 1 y color 2, respectivamente. Obviamente, estos conjuntos forman una partición de los vértices de V . Al
34
ser f un 2-coloreado, vértices adyacentes tienen colores distintos: dicho de otro modo,
cada arista va de V1 a V2 , y el grafo es, por tanto, bipartito.
Si G es bipartito, con aristas entre dos conjuntos V1 y V2 exclusivamente, basta
asignar el primer color a los vértices de V1 y el segundo a los de V2 .
El caso de los grafos bipartitos es bastante especial. Un teorema algo más general,
aunque no demasiado potente, nos da una cota superior para el número de colores
preciso en un grafo cualquiera G.
Teorema 10 Si
1(G) = max {deg(v) | v ∈ V (G)}
es el mayor de los grados de los vértices de G, entonces
χ(G) ≤ 1(G)
Dicho de otra manera, si el vértice de mayor grado de G tiene grado d, bastan d + 1
colores para colorear G.
D EMOSTRACIÓN Por inducción sobre el número de vértices. Si el grafo tiene un
solo vértice, su grado será cero y el grafo es trivialmente 1-coloreable, o sea que
χ(G) = 1 ≤ 1 = 1(G) + 1
Supongamos ahora que G tiene un número cualquiera |V | de vértices, y que el teorema
que queremos probar es cierto para todos los grafos con menos vértices que |V |. Sea
v un vértice de máximo grado de G, i.e., deg(v) = 1(G). Suprimamos v y todas las
aristas en él incidentes, obteniendo el grafo G 0 = G − v. Evidentemente, G 0 tiene un
vértice menos, y está claro que 1(G 0 ) ≤ 1(G), así que G 0 es (1(G) + 1)-coloreable,
por hipótesis de inducción. Ahora bien, si consideramos un (1(G) + 1)-coloreado de
G 0 , podemos extenderlo a un coloreado de G asignando algún color a v. Como el grado
de v es 1(G), alguno de los 1(G) + 1 colores no se ha utilizado en teñir a los vecinos
de v, y ese color podrá utilizarse para teñir a v, con lo que también G será (1(G) + 1)coloreable.
Obsérvese que este teorema proporciona un número de colores suficiente, pero puede ser bastante mayor que el mínimo necesario. Por ejemplo, para K 3,3 (véase la figura 1.26) el teorema dice que cuatro colores bastan, y es así, porque de hecho bastan
dos. El caso del último grafo de la misma figura es especialmente significativo: hay un
vértice de grado 8, luego el teorema garantiza que nueve colores bastan. Sin embargo,
en la práctica vemos que con cuatro es posible colorear el grafo.
El último teorema sobre coloreado que veremos no se demostrará: sería realmente
difícil, por las razones que después veremos.
Definimos un grafo plano como uno que es factible representar en el plano de forma
que sus aristas no tengan intersecciones (salvo en los extremos, claro). Por ejemplo, la
figura 1.26 representa tres grafos planos. Los dos primeros no lo son: aunque no es
obvio, K 5 y K 3,3 son imposibles de dibujar en un plano sin que alguna arista se cruce
con otra.
Una propiedad curiosa de los grafos planos es la siguiente, que enunciamos sin
demostrar:
Teorema 11 Si G es un grafo plano, el número C de regiones conexas en que su representación divide al plano satisface la relación
C − A+V =2
siendo A y V los números de aristas y vértices, respectivamente.
35
El teorema al que hacíamos referencia antes es el
Teorema 12 (de los cuatro colores) Todo grafo plano es 4-coloreable
La interpretación geométrica de este enunciado es que cualquier mapa puede colorearse con cuatro colores de forma que países fronterizos se distingan por el color.
Por complejo que sea el mapa, cuatro colores serán siempre suficientes. El teorema
de los cuatro colores se demostró en 1976, tras más de un siglo de intentos fallidos y
la comprobación exhaustiva por computador de miles de configuraciones a las que la
demostración se reduce.
36
Descargar