Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
TEORÍA DE GRAFOS
Primera Edición
c
Derechos reservados
Reproducido y editado por Ediciones Elizcom
Primera edición, diciembre del 2010
200 ejemplares
ISBN: 978-958-99325-7-5
www.elizcom.com
ventas@elizcom.com
Cel: 3113340748
Armenia, Quindío
Contenido
PRÓLOGO iii
1. GRAFOS 1
1.1. Conceptos Básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Representación de un Grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3. Matriz de Adyacencias de un Grafo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.4. Lista de Adyacencias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.5. Coeficiente de estabilidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2. RELACIONES Y GRAFOS 17
2.1. Relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.2. Matriz de una Relación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.3. Gráfica de una Relación ℜ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.4. Propiedades de una Relación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.5. Operaciones entre Relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.6. Producto Lógico de Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.7. Trayectorias y Relaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.8. Algoritmo de Warshall . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3. CONEXIDAD 39
3.1. Grafo Conexo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
3.2. Algoritmo para Conexidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
3.3. Algoritmo para Grafos no Dirigidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4. CIRCUITO EULERIANO 45
4.1. Circuito de Euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.1.1. Puentes de Königsberg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
4.2. Algoritmo de Euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5. CICLO HAMILTONIANO 53
5.1. Ciclo de Hamilton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
5.2. Algoritmo Hamiciclo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.3. Problema del Agente Viajero . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
5.4. Algoritmo del Vecino más Cercano . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
7. ÁRBOLES 83
7.1. Conceptos Básicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
7.2. Subárboles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
7.3. Árbol Binario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
7.4. Árboles Etiquetados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
7.5. Árbol Posicional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
7.6. Otras Formas de Árboles Ordenados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
7.7. Representación Matricial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
7.8. Representación Secuencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93
7.9. Representación Enlazada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
7.10. Conversión de un Árbol General a Binario . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
7.11. Recorrido de un Árbol Binario . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
7.12. Notación Polaca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
7.13. Búsqueda y Ordenamiento con Árboles Binarios . . . . . . . . . . . . . . . . . . . . . . . . 101
La Matemática Discreta y una de sus áreas principales como es la teoría de grafos ocupan hoy en día
un lugar muy importante entre los conocimientos básicos que deben adquirir las personas que se dedican
al estudio de las ciencias de la computación, las matemáticas aplicadas, la teoría de la optimización, la
planeación estratégica, etc. Además la Teoría de Grafos puede servir para el modelamiento de sistemas,
la simulación, la estructuración de datos y el análisis y diseño de algoritmos.
Este libro pretende ser una guía introductoria para un segundo curso de matemáticas discretas, con
una duración de un semestre y en efecto se ha elaborado con base al programa curricular de Matemáticas
Discretas II (Teoría de Grafos) de la carrera de Ingeniería de Sistemas de la Universidad del Quindío. Se
ha experimentado durante varios semestres con los estudiantes de dicha disciplina y se ha complementado
con las notas de clase de estos cursos.
El tema central del libro es una introducción a la teoría de grafos, considerando los grafos y los ár-
boles como una estructura dinámica que puede aplicarse en la solución de problemas prácticos y a la
creación de algoritmos aplicables a la estructuración de datos.
Aunque el curso cubre varios temas, se ha limitado mucho el contenido de cada capítulo y su pro-
fundidad se ha moderado para que sea apenas un curso introductorio a nivel de pregrado. Se han omitido
las pruebas y demostraciones de teoremas para agilizar más el aprendizaje.
El material de cada capítulo se ha complementado con suficientes ejemplos y gráficas para aclarar un
poco el carácter abstracto de la teoría. Al final de cada capítulo se incluye un grupo de ejercicios que
ayudarán a reforzar los conocimientos adquiridos.
iii
iv PRÓLOGO
1 GRAFOS
Los grafos se presentan con frecuencia en la vida real, tal es el caso de una red de carreteras
que enlace un cierto grupo de ciudades; aquí los nodos de la red o ciudades representan los
vértices del grafo, las carreteras que unen las ciudades representan los arcos o aristas; así
a cada arco se asocia una información tal como la distancia entre ciudades, consumo de
gasolina, costo de mantenimiento, etc.
b b b
Los grafos son una estructura de datos no lineal, la cual se
b puede usar para modelar diversas aplicaciones. Es una parte
b b
b b
importante de la Teoría Combinatoria en Matemáticas, lo
que le da un carácter bastante amplio y complejo. En esta
b
b unidad sólo se hará una introducción a los conceptos básicos
b
de la teoría de grafos y a los algoritmos que permiten su
aplicación a problemas prácticos.
Los arcos que unen los nodos también se llaman aristas del grafo y se representan por medio de un par
de elementos, (vi , vj ), donde los elementos son los nodos que une el arco.
En un grafo orientado cada arco se representa por medio de un par ordenado (vi , vj ) donde el primer
elemento es el nodo origen o fuente y el segundo es el nodo destino de ese arco, por lo tanto se puede
decir que el arco va desde vi hasta vj y que vj es adyacente a vi . Un grafo orientado también se llama un
digrafo. Si los arcos del grafo no indican una dirección, el grafo es no dirigido y en él cada arco se puede
representar nombrando los nodos que lo forman sin importar el orden es decir:
(vi , vj ) = (vj , vi )
1
2 GRAFOS
Ejemplo 1
La figura 2. muestra dos grafos, el primero no dirigido y el segundo un digrafo, ambos, de 4 nodos y
5 arcos. b b b b
b b b b
Los nodos de un grafo se pueden usar para representar los objetos y los arcos para representar relaciones
entre esos objetos. En el ejemplo anterior los nodos podrían ser ciudades y los arcos las rutas aéreas entre
esas ciudades. A los nodos y arcos de un grafo se pueden asignar nombres o valores (etiquetas), creándose
así lo que se llama un grafo etiquetado.
Ejemplo 2
v1 v2 v3
A continuación enunciaremos un teorema que relaciona el número de aristas de un grafo con el orden de
los vértices de este; además se da uno de los conceptos más importantes en el estudio de los grafos como
es el de la trayectoria.
Teorema 1
Cuando el grafo no tiene valores asociadas a sus arcos, la longitud de la trayectoria es el número de arcos
que la componen.
Ejemplo 3
En la figura 3 la secuencia 1 − 2 − 4 es una trayectoria de longitud 2, y la secuencia 1 − 3 − 5 − 2 − 4
es una trayectoria de longitud 4.
1 2
3 4
Cuando los vértices de una trayectoria son todos distintos, excepto posiblemente el primero y el último,
la trayectoria se define como una trayectoria simple. Una trayectoria que comienza y termina en el mismo
nodo se llama un ciclo o circuito. Los ciclos de longitud 1 se llaman bucles o lazos porque salen de un
nodo e inciden en el mismo nodo sin pasar por ningún otro.
Ejemplo 4
a
e1
e3 e7
e6
b e4 d e
e2
e5
c
Figura 4. Digrafo etiquetado
Los digrafos acíclicos son usados para modelar situaciones de conjuntos de tareas que necesitan tener una
secuencia particular y donde es importante que no existan ciclos puesto que una tarea en un ciclo estaría
precedida de sí misma, es decir, que se repetiría.
A. Caicedo B., G. Wagner de G., R. M. Méndez
4 GRAFOS
Ejemplo 5
La siguiente tabla es una lista parcial de tareas para construir una casa. Para cada tarea T , la segun-
da columna muestra aquellas arcos que deben ser completadas antes que T pueda ser comenzada.
Construir un digrafo para mostrar la relación entre las tareas.
Tareas Prerrequisitos
1. Hacer cimientos Ninguno
2. Adicionar piso base 1
3. Hacer columnas 1
4. Levantar paredes y techo 2y3
5. Adicionar cielo raso 4
6. Instalar plomería 4
7. Instalar redes eléctricas 4y5
8. Pegar piso 4y6
9. Instalar puertas 4y8
10. Pintar paredes interiores 4, 7, 8 y 9
11. Pulir piso 10
1 2 3 5 7
4 6 8
9 10 11
Teorema 2
Prueba
Para la demostración en el otro sentido se parte del supuesto de que el digrafo es acícli-
co y se usará un algoritmo llamado algoritmo del Ordenamiento Topológico para construir
el etiquetamiento consistente. El algoritmo parte del hecho de que un digrafo debe tener
una fuente; la metodología del algoritmo consiste en etiquetar el conjunto de fuentes y luego
removerlas de su consideración, luego será etiquetado el siguiente nivel de fuentes y así
sucesivamente. Eventualmente se presentará una de las siguientes situaciones: o todos los nodos
han sido etiquetados sucesivamente o permanecen nodos sin etiquetar que no son fuentes,
implicando que el digrafo contiene un ciclo, lo cual contradice el supuesto.
Hacer A(n) conjunto de antecedentes de n. Hacer S conjunto de nodos no etiquetados cuyos conjuntos
de antecedentes sea vacío.
begin
Para n ∈ N hacer
computar A(n)
etiqueta = O
Mientras S 6= ∅ hacer
begin
etiqueta = etiqueta +1
n = nodo con A(n) = ∅
asignar la etiqueta a n y sacarlo de consideración. Establecer a S
Para cada nodo no etiquetado u ∈ N , hacer
A(u) = A(u) − {n}
end
Si todos los nodos no están etiquetados entonces
reportar: "hay un ciclo en el digrafo".
end.
Ejemplo 6
Aplicar el algoritmo del ordenamlento topológico al siguiente digrafo para obtener un etiquetamiento
consistente.
2 3
1 4
6 5
Figura 6.
Solución
1. Computar los conjuntos de antecedentes A(n) para cada n ∈ N A(1) = ∅, A(2) = {1}, A(3) =
{2, 4}, A(4) = {1, 2, 6}, A(5) = {4, 6}, A(6) = {1}. Etiqueta = 0. S = {1}, S 6= ∅.
1. No tiene lazos.
b b
b b b
b b
Ejercicio 1
Graficar los siguientes grafos: K1 , K2 , K3 , K4 , K5 y K6
Teorema 3
r(r − 1)
Un r-grafo no dirigido contiene exactamente arcos.
2
Prueba
r(r − 1)
Por el teorema 1, esta suma también es igual a 2A. Por lo tanto 2A = r(r − 1) y A =
2
Corolario
Para cada grafo Kr no dirigido se cumple que:
N (N − 1)
A≤
2
Ejercicio 2
1. Trazar dos grafos 3-regular con 6 nodos
Teorema 4
Prueba
Teorema 5
Ejemplo 7
b b b
b b b
Existen diversas formas de representar un grafo dirigido o no-dirigido, pero entre ellas las más usadas
y fáciles de implementar por computador son: la matriz de adyacencias y la lista de adyacencias. Esta
última es la más conveniente para efectos de computación puesto que opera más rápido y ocupa menos
memoria.
Sea G = (N, A) un grafo de n nodos. La Matriz de Adyacencias M para G es una matriz Mnxn de valores
booleanos, donde M (i, j) es verdad si y solo si existe un arco desde el nodo i al nodo j.
(
1, si existe el arco (i, j)
M (i, j) =
0, en caso contrario
Las filas y las columnas de la matriz representan los nodos del grafo.
Cuando el grafo no es dirigido la matriz de adyacencias es simétrica.
La matriz de adyacencias es la misma matriz de la relación A de N en N porque indica cuales nodos
están relacionados (unidos por un arco)
Ejemplo 8
La siguiente es la matriz de adyacencias del grafo orientado que se muestra en la figura 8.
a b c d b
a 0 1 1 0
b 0 0 1 1 a d
M (i, j) =
c 1 0 0 1
d 1 0 0 0
c
Figura 8.
Nota: Para un digrafo, la matriz de adyacencias depende del orden de los nodos. Para distintos órdenes
en los nodos se obtienen distintas matrices de adyacencias de un mismo grafo G
Ejemplo 9
Grafo orientado con su correspondiente matriz de adyacencias (matriz de pesos o valores)
120
2 3
1 2 3 4 5
100
1 0 100 0 0 0 1 110
20 0 120 0 0 200
M (i, j) = 3
0 0 0 200 0
4 0 110 0 0 80 4
5 0 0 0 0 0
80
5
Figura 9.
Ejemplo 10
Considere el esquema de Von Newmann, para un computador que consta de los siguientes dispositivos:
V = (a, b, c, d, e) donde a es un dispositivo de entrada, b es una unidad aritmética, c es una unidad
de mando, d es una unidad de memoria y e es un dispositivo de salida. Las relaciones entre unidades
y dispositivos se representan en el grafo de la figura 10.
b c d
Figura 10.
Si con un 1 se indica que hay un paso de información (relación) desde el componente vi al componente
vj , la matriz que representa al grafo es:
a b c d e
a 0 1 1 1 0
b0 0 1 1 1
M (i, j) = c
1 1 0 1 1
d0 1 1 0 1
e 0 0 1 0 0
Ejemplo 11
Un mensajero debe visitar los seis puntos mostrados en la figura 11a) partiendo del punto a y
terminando en el punto f. El conoce la distancia que separa a cada par de puntos y desea establecer
el recorrido que debe seguir para recorrer la mínima distancia y ahorrar tiempo.
4
a b a b
11 6 19
15
c f 16 c f
5 8
4
3
d e d e
a) b)
Figura 11.
Con las distancias entre los puntos se construye el grafo no dirigido etiquetado:
Para hallar el recorrido de mínima distancia se podrian listar todas las posibles trayectorias desde a
hasta f y escoger la menor. Una de tales trayectorias es : a − b − c − d − e − f de longitud 22.
De hecho este no es el mejor método para resolver el problema. Se han desarrollado algoritmos muy
eficientes que con la ayuda del computador pueden producir una solución muy óptima en un tiempo
bastante corto. Uno de estos algoritmos es el propuesto por DIJKST RA y que se estudiará más adelante.
Sea G = (N, A) un grafo. La lista de adyacencias para un nodo i es una lista, en cualquier orden, de
todos los nodos adyacentes a i.
En esta representación el grafo incluye dos partes: un directorio y un conjunto de listas enlazadas. Hay
una entrada al directorio por cada nodo del grafo.
Ejemplo 12
La figura 12 muestra un grafo dirigido y su correspondiente representación en lista de adyacencias.
1 2 1 b
2 b
3 b
2 b
4 b
3 b
2 b
3 4 4 b
3 b
Figura 12.
La entrada en el directorio del nodo i apunta a una lista enlazada que representa los nodos que
son conectados al nodo i. Cada registro de la lista enlazada tiene dos campos: el primero es un
identificador de nodo y el otro es un enlace al siguiente elemento de la lista j. La lista enlazada
representa arcos.
Ejemplo 13
La figura 13 muestra un grafo con su correspondiente lista de adyacencias.
1 b
2 b
6
2 b
2 b
3 b
2 3 5 3 b
5 b
6 b
4 b
3 b
1 5 b b
4
6 b b
Figura 13.
Si este grafo no fuera orientado, la lista de adyacencias sería la que se muestra en la figura 14.
1 b
2 b
2 b
1 b
2 b
3 b
3 b
2 b
4 b
5 b
6 b
4 b
3 b
5 b
3 b
6 b
3 b
Figura 14.
Ejemplo 14
Otra forma de presentar la lista de adyacencias
A B C Lista de adyacencias
A : B, P
B : A, C, P, Q
C: B
P : A, B
P Q Q: B
G = [A : B, P ; B : A, C, P, Q; C : B; P : A, B; Q : B]
Representación enlazada de G
Un concepto muy aplicable de la teoría de grafos es el coeficiente de estabilidad interna y externa que
sirve para resolver problemas referentes a modelos de comunicación.
Definición 1.11
Sea G (N, A) y S ⊂ N (S subconjunto de nodos de G) . Se dice que S es interiormente estable si
no contiene ninguna pareja de nodos adyacentes.
Recuérdese que dos nodos ni y nj son adyacentes si son distintos y al menos existe un arco (ni , nj ) o
(nj , ni ) .
Es decir α (G) es el número de elementos que contiene el mayor subconjunto S interiormente estable.
Ejemplo 15 1 3 2
6 4
8 7
Figura 15.
En el grafo de la figura 15, los conjuntos de nodos {1, 2, 7} ; {6, 7, 1} ; {5, 4, 3} y {8, 4, 3} son conjuntos
interiormente estables. El coeficiente de estabilidad interno de G es α (G) = máx {S} = 5 con S =
{1, 2, 6, 7, 5}
Ejemplo 16
Capacidad de un Conjunto de Señales
Considérese un transmisor que puede emitir cinco señales diferentes {a, b, c, d, e} . Estas señales se
reciben en un receptor de tal forma que cada una puede dar lugar a dos interpretaciones diferentes:
a puede dar p o q, b puede dar q o r, c : r o s, d : s o t, y e : t o p. Esta información se puede
representar en el grafo de la figura 16.a.
a p b
b q
c r a c
d s
e t e d
a) Figura 16. b)
¿Cuál es el número máximo de señales que pueden emitirse simultáneamente en forma tal que no
exista posibilidad de confusión en la recepción?
El problema equivale a buscar un conjunto interiormente estable y máximo, del grafo de la figura
16a en donde dos nodos son adyacentes si representan dos señales que puedan confundirse. Se llega
así a construir un nuevo grafo, ver f ig. 16 b donde:
a se une con b porque ellas pueden producir q
b se une con c porque ellas pueden producir r
c se une con d porque ellas pueden producir s
d se une con e porque ellas pueden producir t
e se une con a porque ellas pueden producir p
El grafo obtenido tiene los siguientes conjuntos interiormente estables:
{a, c}, {a, d}, {b, d}, {b, e} y {c, e}
donde α(G) = 2. Luego, el número máximo de señales que se puede emitir sin crear confusión es 2.
Definición 1.14
El coeficiente de estabilidad externa β(G) de G es igual β(G) = min{T }, lo que significa que es
igual al número de elementos del menor conjunto exteriormente estable.
Ejemplo 17
En el grafo de la figura 17 los siguientes conjuntos son exteriormente estables:
{c, d, e, f, h}, {c, e, h} y {c, e, f, h}
a b c
h
g
Figura 17.
Ejemplo 18
Redes de Comunicación
Considérese un conjunto de subestaciones telefónicas con sus respectivas redes, como lo indica El
grafo de la figura 18.
1 4 B
11
A 2 5 8
10
3 6 9
7
Figura 18.
¿Cuál es el número mínimo de subestaciones que deben fallar para que las centrales A y B no
pueden intercomunicarse?. El problema se reduce a encontrar un conjunto mínimo de articulaciones
que divida al grafo G en dos subgrafos disyuntos, conteniendo uno a A y el otro a B. Sea T = {4, 5, 9}.
T es un subconjunto de nodos exteriormente estable porque todos los nodos que no pertenecen a T
están ligados al menos a uno de los nodos de T por un arco que se inicia en ellos. Además T es el
mínimo de los subconjuntos exteriormente estables que se pueden obtener de G. El coeficiente de
estabilidad externa para G es β(G) = min{T } = 3. Se concluye que si fallan las subestaciones 4, 5 y
9, las centrales A y B no pueden comunicarse.
A. Caicedo B., G. Wagner de G., R. M. Méndez
Coeficiente de estabilidad 15
Ejercicios Capítulo 1
1. Sea N = {1, 2, 3, 4} un conjunto de nodos y A = {(1, 3), (2, 4), (4, 3)} un conjunto de arcos, dibujar
el grafo correspondiente.
2. Dados los dos grafos de la figura 19, establecer el conjunto de nodos N y el conjunto de arcos A.
a f 1
b d g 2 3 4
7
c e 5 6
Figura 19.
3. En los grafos del ejercicio anterior determinar el orden y el número de arcos de cada uno. Usar la
notación correspondiente.
4. En el grafo de la figura 20, determinar el grado de cada uno de sus nodos.
a d
b e
Figura 20.
5. Hallar dos trayectorias entre los nodos b y e del grafo de la figura 20.
6. Para los grafos de la figura 21 encontrar una trayectoria que vaya desde a hasta a y que pase por
cada arco una sola vez.
a b c b c
d e a d
f f e
Figura 21.
7. Examinar los siguientes grafos y determinar cuáles son simples y cuáles no, justificar la respuesta.
a b a b 1 2 1 2
3
c d c d 3
Figura 22.
9. Trazar un K6 grafo.
12. Establecer la matriz de adyacencias para cada uno de los grafos de la figura 23.
a b a d e
g
b c
c
c d f h
a
i
d e e f b
a 12 1
b 20
5
20 12 e 2 8 5
10
4 6
14
c d 3 4
Figura 23.
13. Establecer la lista de adyacencias para cada uno de los grafos del ejercicio número 12.
14. Para el grafo de la figura 24 establecer los coeficientes de estabilidad interna y externa.
1
4
B
A 2 5
7
3 6
Figura 24.
2 RELACIONES Y GRAFOS
El concepto fundamental de las Matemáticas Discretas es el de Relación, por ello en esta sección
se hace una breve introducción a las relaciones y se utilizarán para designar la correspondencia
entre los objetos o nociones tales como los nodos de un grafo.
2.1 Relaciones
Ejemplo 1
Sean A = {3, 7, 9} y B = {x, y} entonces ℜ = {{3, x), (9, y)} es una relación de A en B.
Cuando los conjuntos A y B son iguales se dice que ℜ ⊆ A × A es una relación en A en lugar de una
relación de A en A.
17
18 RELACIONES Y GRAFOS
Ejemplo 2
Sean A = {1, 3, 5} y B = {0, 1, 2, 4, 7}. Se define la siguiente relación de A en B:
AℜB ⇔ a < b
Entonces: ℜ = {(1, 2), (1, 4), (1, 7), (3, 4), (3, 7), (5, 7)}; Dom(ℜ) = {1, 3, 5} y Cod(ℜ) = {2, 4, 7}.
Ejemplo 3
Sean A = {0, 7, 5, 9} y B = {1, 3, 10} y la relación dada por:
AℜB ⇔ a > b
7
1 3 10
3
0 0 0 0
0 5 71 1 0
Mℜ =
1 51 1 0
9 1 1 0
9 10
Figura 1.
Entonces: ℜ = {(5, 1), (5, 3), (7, 1), (7, 3), (9, 1), (9, 3)}. La matriz de ℜ se ve en la figura 1:
Ejemplo 4
Sean X = {3, 9, 1} e Y = {a, b} . Luego ℜ = {(3, a), (9, b), (1, a), (1, b)}.
a b
3 1 0
Mℜ = 9 0 1
1 1 1
Ejemplo 5
Sean A = {a, d, c, m} y ℜ = {(a, d), (a, c), (d, c), (c, d), (c, m), (m, m)}. El grafo dirigido de ℜ es el de
la figura 2.
d
a m
c
Figura 2.
Ejemplo 6
Determinar la relación representada por el grafo de la figura 3.
2
1 4 5
Figura 3.
Reflexiva
Una relación ℜ en un conjunto A es reflexiva si (a, a) ∈ ℜ, es decir, aℜa, ∀a ∈ ℜ. ℜ es reflexiva si cada
elemento a ∈ A está relacionado consigo mismo.
A. Caicedo B., G. Wagner de G., R. M. Méndez
20 RELACIONES Y GRAFOS
La matriz de una relación reflexiva tiene unos en toda su diagonal principal. La matriz de una relación
irreflexiva tiene al menos un cero en la diagonal principal.
Ejemplo 7
El siguiente grafo muestra una relación reflexiva.
a b
c d
Figura 4.
Simétrica
Una relación ℜ en un conjunto A es simétrica si cuando aℜb ⇒ bℜa ∀a, b
Ejemplo 8
Sea ℜ = {(a, b) ∈ A × A |a < b }. Luego:
2. Si a 6= b ⇒ a ≮ b ó b ≮ a ⇒ ℜ es antisimétrica.
Teorema 1
Ejemplo 9
1 1 0 1 1 0
Si Mℜ = 1 0 1 , entonces MℜT = 1 0 1
0 1 0 0 1 0
Teorema 2
Teorema 3
1. Si ℜ es una relación asimétrica, entonces el grafo dirigido no puede tener simultáneamente un arco
desde el nodo i al nodo j y un arco desde el nodo j al nodo i. No puede haber ciclos de longitud 1.
Ejemplo 10
El grafo de la figura 5 representa una relación conexa.
a b c
Figura 5.
Transitiva
Una relación ℜ en un conjunto A es transitiva si cuando aℜb y bℜc entonces aℜc.
En una relación transitiva se tiene: si mij = 1 y mjk = 1 ⇒ mik = 1.
En un grafo dirigido las condiciones aℜb y bℜc ocurrirán si y solo si existe una trayectoria de longitud
dos desde a hasta c. es decir, que aℜ2 c implica que aℜc. ℜ2 ⊆ ℜ, siendo ℜ un subconjunto de A × A.
Cualquier par de nodos conectados por un arco deben estar conectados por una trayectoria de longitud
2.
Con base al concepto anterior se puede establecer la siguiente definición de transitividad.
Ejemplo 11
2
1 2 3 (MR )⊙ = MR → R es transitiva
1 1 1 1 2
Sea A = {1, 2, 3} y MR = 2 0 0 1
3 0 0 1
1 3
Ejemplo 12
a b 1 2
0 1 0 1
1 0 1 1
5
0 1 0 0
c d e 3 4
1 1 0 0
Transitiva Antisimétrica Irreflexiva
Transitiva Simétrica
No transitiva
Ejemplo 13
1 0 0 1 0 1
0 1 1 0 1 0
0 1 1 1 0 1
Relación de equivalencia Reflexiva, simétrica, no transitiva
Así como es posible manipular números y fórmulas usando las reglas del álgebra, también es posible
definir operaciones que permitan manipular relaciones. Una vez definidas ciertas operaciones se puede
operar con ellas sobre relaciones existentes para obtener otras relaciones.
Nota: ℜ ⊂ A × B
Ejemplo 14
Sean A = {3, 4, 5}, B = {a, b, c} y ℜ = {(3, a)(3, b)(4, c)(5, c)}. ℜ = {(3, c)(4, a)(4, b)(5, a)(5, b)}.
Intersección de Relaciones
Sean A y B dos conjuntos finitos, ℜ y S relaciones definidas de A en B. Se define la intersección
de las dos relaciones como:
a(ℜ ∩ S)b ⇔ aℜb y aSb
Unión de Relaciones
Sean A y B dos conjuntos finitos, ℜ y S relaciones definidas de A en B. Se define la unión de
las dos relaciones como:
a(ℜ ∪ S)b ⇔ aℜb ó aSb
Relación Inversa
Sean A y B dos conjuntos finitos, R una relación de A en B. Se define la relación inversa ℜ−1
como una relación de B en A tal que:
bℜ−1 a ⇔ aℜb
Ejemplo 15
Sean
A = {1, 5, 7, 9}, B = {x, y},
S = {(1, y)(5, x)(7, y)(9, x)} y
ℜ = {(1, x)(1, y)(5, y)(7, x)(7, y)(9, x)}.
Calcular 1. ℜ, 2. ℜ ∩ S, 3. ℜ ∪ S y 4. ℜ−1
Solución
A × B = {(1, x), (1, y), (5, x), (5, 7), (7, x), (7, y), (9, x), (9, y)}
3. La unión ℜ ∪ S se forma juntando las parejas de ℜ con las de S sin repetir parejas, por lo que
ℜ ∪ S = {(1, x), (1, y), (5, x), (5; y), (7, x), (7, y), (9, x)}.
4. ℜ−1 se forma tomando las parejas de ℜ e invirtiendo el orden de los elementos, así la relación
inversa está dada por ℜ−1 = {(x, 1), (y, 1), (y, 5), (x, 7), (y, 7), (x, 9)}.
Composición de Relaciones
Se pueden crear nuevas relaciones a partir de otras existentes, una forma de hacer esto es
mediante la composición de relaciones.
Sea ℜ una relación entre A y B y sea S una relación entre B y C luego, la composi-
ción ℜ y S es la relación entre A y C y se nota ℜ ◦ S y está dada por:
ℜ ◦ S = {(x, z) : x ∈ A, z ∈ C y existe y ∈ B tal que xℜy y ySz.
Gráficamente se tiene:
ℜ S
b b
y z
b b
u w
A B C
Figura 6. ℜ ◦ S
Ejemplo 16
Si se tiene en la figura 7 una composición de relaciones, entonces
ℜ ◦ S = {(1, 2), (3, 2), (2, 2), (3, 3), (4, 2)}.
ℜ S
1
1 b b
2 2
2 b b b
3 3
3 b b b
4
4 b b
A B C
Figura 7.
Ahora se quiere definir una operacion matricial que combine la representacion matricial de dos relaciones
para obtener una representación matricial de la composición de relaciones.
Sea A = {a1 , a2 , ..., am }, B = {b1 , b2 , ..., bn } y C = {c1 , c2 , ..., cp }. Sea ℜ una relación de A en B y
sea S una relación de B en C. ℜ se representa por una matriz M1m×n ; S se representa por la matriz
M2n×p , entonces la relación compuesta ℜ ◦ S se representa por la matriz M3m×p .
La operación matricial que se busca para representar la composición, se denota con el símbolo ⊙ lo
cual permite escribir:
M3 = M1 ⊙ M2
Para determinar más fácilmente como está definida esta operación, se puede considerar el esquema de las
dos relaciones dadas (ver figura 8).
Para cada i ∈ {1, ..., m} y j ∈ {1, ..., p}, M3 (i, j) = verdad si y solo si ai ℜ ◦ Scj lo cual es cierto si
y solo si ∃k ∈ {1, ..., n} tal que ai ℜbj y bk Scj .
Usando las definiciones de las operaciones lógicas ∧ y ∨ (and y or)1 se puede obtener la fórmula co-
mo sigue:
M3 (i, j) = [M1 (i, 1) ∧ M2 (1, j)] ∨ [M1 (i, 2) ∧ M2 (2, j)] ∨ ... ∨ [m1 (i, n) ∧ M2 (n, j)]
La matriz M3 obtenida en esta forma se llama el producto lógico o booleano de las matrices M1 y M2 .
ℜ S
a1 b1 c1
a2 b2 c2
.. .. ..
. . .
ai bk cj
.. .. ..
. . .
am bn cp
Figura 8.
1
+/∨ 0 1 ∗/∧ 0 1
0 0 1 0 0 0
1 1 1 1 0 1
Definición 2.8
Si Am×p y Bp×n son matrices booleanas se define: A ⊙ B = [eij ] como el producto booleano de A y B,
donde
eij = (ai1 ∧ b1j ) ∨ (ai2 ∨ b2j ) ∨ ... ∨ (aip ∧ bpj )
Este producto booleano es similar al producto ordinario de matrices pero aplicando las operaciones booleanas ∧
y ∨.
Ejemplo 17
Sea A = {a, b}, B = {a, b, c} y C = {a, b, c, d}. ℜ es una relación de A en B. ℜ = {(a, a), (a, b), (b, b)}. S una
relación de B en C. S = {(a, a), (a, c), (a, d), (b, a), (c, b), (c, d)}, por lo tanto:
1 0 1 1
1 1 0
Mℜ = , MS = 1 0 0 0
0 1 0
0 1 0 1
Entonces ℜ ◦ S = {(a, a), (a, c), (a, d), (b, a)} como se ve en el esquema de la figura 9
En forma matricial se tiene
1 0 1 1
1 1 0
Mℜ◦S = Mℜ ⊙ MS = ⊙ 1 0 0 0
0 1 0
0 1 0 1
(1 ∧ 1) ∨ (1 ∧ 1) ∨ (0 ∧ 0) . . . (1 ∧ 1) ∨ (1 ∧ 0) ∨ (0 ∧ 1)
=
(0 ∧ 1) ∨ (1 ∧ 1) ∨ (0 ∧ 0) . . . (0 ∧ 1) ∨ (1 ∧ 0) ∨ (0 ∧ 1)
1∨1∨0 0∨0∨0 1∨0∨0 1∨0∨0 1 0 1 1
= =
0∨1∨0 0∨0∨0 0∨0∨0 0∨0∨0 1 0 0 0
Nótese que esta última matriz es equivalente a la matriz de la relación representada en el esquema anterior.
A B C A C
ℜ a S ℜ◦S
a b b b
a a b b
a
bb b
b b
b
b b
cb b
c b
c
b
d b b b
d
Figura 9. ℜ ◦ S
El siguiente teorema establece algunas relaciones interesantes entre las matrices de relaciones y las operaciones
booleanas entre ellas.
Teorema 4
Ejemplo 18
1 0 1 0 1 1
Sean Mℜ = 1 0 0 y M S = 1 1 0, se tiene entonces,
1 1 1 0 1 0
1 1 1 0 0 1
Mℜ∪S = 1 1 0 , Mℜ∩S = 1 0 0
1 1 1 0 1 0
1 1 1 0 0 1
Mℜ ∨ MS = 1 1 0 , Mℜ ∧ MS = 1 0 0
1 1 1 0 1 0
Ejemplo 19
Si ℜ = {(a, b), (a, c), (b, a)}, S = {(a, c), (b, a), (b, b), (c, a)}, entonces
2 1 0
Mℜ◦S = Mℜ ⊙ MS = Mℜ × MS = 0 0 1
0 0 0
Ejemplo 20 A B C
1 a x
2 b y
3 c z
ℜ = {(1, b), (2, a), (2, c)}, S = {(a, y), (b, x), (c, y), (c, z)}
a b c x y z
1 0 1 0 a 0 1 0
Mℜ = 2
1 0 1
MS = b
1 0 0
3 0 0 0 c 0 1 1
x y z x y z
1 1 0 0 1 1 0 0
Mℜ◦S = 2
0 1 1
Mℜ × MS = 2
0 2 1
3 0 0 0 3 0 0 0
La idea de una trayectoria en un digrafo tiene muchas interpretaciones, dependiendo de la aplicación que está
siendo modelada. Por ejemplo, si el digrafo es un modelo de una red de comunicación, las trayectorias en el
digrafo mostrarán las posibles rutas para mensajes entre diferentes computadores. Hay tres problemas que surgen
al tratar de aplicar el modelo a la realidad:
1. Establecer la existencia de trayectorias entre dos nodos.
2. Contar el número de trayectorias entre dos nodos.
3. Encontrar la trayectoria más corta entre un par de nodos dados.
Definición 2.9
Sea ℜ una relación en un conjunto A. Una trayectoria de longitud n de a hasta b es una sucesión finita
π = a, x1 , x2 ,. . . xn−1 , b que se inicia en a y termina en b, y tal que aℜx1 , x1 ℜx2 ,. . . , xn−1 ℜb.
Una solución al primer problema de determinar cuáles nodos están conectados por trayectorias a otros nodos
puede ser establecida en dos formas: la primera analizando visualmente el grafo y determinando la trayectoria
y la segunda en términos de la matriz de la relación que representa los arcos del digrafo. El primer método no
es práctico cuando el grafo tiene muchos nodos y arcos, razón por la cual en esta sección, se hará el estudio del
segundo método.
Las trayectorias en una relación pueden usarse para definir nuevas trayectorias. Si n es un entero positivo fi-
jo, se define una relación ℜn como xℜn y y significa que existe una trayectoria de longitud n de x a y en ℜ, o x
está relacionado con y mediante un recorrido de n arcos.
Recordando cómo se definió la composición de relaciones, se concluye que la composición de ℜ con si misma
da trayectorias de longitud 2, y la composición de este resultado con ℜ da trayectorias de longitud 3 y así sucesi-
vamente. Luego se puede proceder con un argumento inductivo para encontrar todas las trayectorias.
También se puede definir una relación ℜ∞ en A como xℜ∞ y indica que existe alguna trayectoria en ℜ de x
a y, no importa la longitud.
Nota: Mℜ∞ muestra quiénes quedan conectados mediante trayectorias de cualquier longitud
Ejemplo 21
Sea A un conjunto de personas y ℜ la relación “conocerse mutuamente”, entonces:
aℜb significa que a y b se conocen el uno al otro.
aℜ2 b significa que a y b tienen un conocido en común.
aℜn b significa que a conoce a x1 , que conoce a x2 ,. . . ,que conoce a xn−1 , que conoce a b.
Ejemplo 22
El siguiente grafo representa un conjunto de vuelos con escala intermedia.
5
1 2
3 4 6
Figura 10.
Luego:
1ℜ2 5 porque 1ℜ2 y 2ℜ5
1 2 5
1ℜ2 4 porque 1ℜ2 y 2ℜ4
2ℜ2 5 porque 2ℜ4 y 4ℜ5
2ℜ2 6 porque 2ℜ5 y 5ℜ6
3ℜ2 5 porque 3ℜ4 y 4ℜ5
4ℜ2 6 porque 4ℜ5 y 5ℜ6 3 4 6
2
Grafo de la relación ℜ
Ejemplo 23
Para el grafo de la figura 11 determinar ℜ∞ .
1 2
ℜ∞ = {(1, 1) , (1, 2) , (1, 3) , (1, 4) , (2, 1) , (2, 2) , (2, 3) , (2, 4) , (3, 4)}
1 2 3 4
1 1 1 1 1
2 1 1 1 1
Mℜ∞ =
3 0 0 0 1
3 4 4 0 0 0 0
Figura 11.
Ejemplo 24
1 2
ℜ∞ = {(1, 2), (1, 3), (1, 4), (3, 2), (3, 3), (3, 4)}
1 2 3 4
1 0 1 1 1
20 0 0 0
M ℜ∞ =
3 4 30 1 1 1
4 0 0 0 0
Teorema 5
Sea G = (N, A) un digrafo. Sea n1 , . . . , n2 nodos en A. Para cada i, j hay una trayectoria desde ni a nj
en G si y solo si existe k = 1, 2, 3, . . . tal que ni ℜk nj , por lo tanto:
ℜ∞ = ℜ ∪ ℜ2 ∪ ℜ3 ∪ . . .
Teorema 6
Teorema 7
Definición 2.10
xℜ∞ y si y solo si xℜy o xℜ2 y o xℜ3 y o . . .
M ℜ∞ = Mℜ ∨ M ℜ2 ∨ M ℜ3 ∨ . . . ∨ M ℜn
donde,
(Mℜ )n
⊙ = Mℜ ⊙ . . . ⊙ Mℜ (n factores)
Definición 2.11
La relación de accesibilidad o alcanzabilidad ℜ∗ de una relación ℜ en un conjunto N de n elementos se
define como xℜ∗ y si y solo si x = y o xℜ∞ y.
En otras palabras esto indica que un nodo y es alcanzable desde x si y es x o existe una trayectoria de cualquier
longitud desde x a y.
Teorema 8
Ejemplo 25
Para la relación ℜ representada por el siguiente grafo, determinar cuáles parejas de nodos están unidas por
trayectorias de longitud 2 arcos.
b d
c e
Solución
Figura 12.
1. Analizando visualmente el grafo se tiene:
ℜ2 = {(a, a), (a, b), (a, c), (a, d), (b, d), (b, e), (c, d), (d, d)}
2. En una forma más analítica y usando la matriz de relaciones se tiene:
1 1 0 0 0
0 0 1 1 0
M ℜ = 0 0 0 1 1
0 0 0 1 0
0 0 0 0 0
1 1 0 0 0 1 1 0 0 0 1 1 1 1 0
0 0 1 1 0 0 0 1 1 0 0 0 0 1 1 matriz de
Mℜ2 = M ℜ ⊙ M ℜ = 0 0 0 1 1 ⊙ 0 0 0 1 1 = 0 0 0 1 0 = caminos de
0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 longitud 2
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Ejemplo 26
Encontrar la matriz de alcance (conectividad) para el digrafo de la figura 13.
1 2
3 4
Figura 13.
Solución
La matriz de la relación en el digrafo es:
0 1 0 0
0 0 1 0
Mℜ =
1 0 0 0
1 0 0 0
0 0 1 0 1 0 0 0
2 1 0 0 0 , 0 1 0 0
Mℜ2 = (Mℜ )⊙ = Mℜ ⊙ Mℜ = Mℜ3 = (Mℜ )3⊙ = Mℜ2 ⊙ Mℜ =
0 0 1 0 0 0 1 0
0 1 0 0 0 0 1 0
0 1 0 0
4 0 0 1 0
Mℜ4 = (Mℜ )⊙ = Mℜ3 ⊙ Mℜ =
1 0 0 0
1 0 0 0
Teorema 9
Ejemplo 27
Sea G el siguiente digrafo y su correspondiente matriz de adyacencias
v1 v2
0 0 0 1 1
0 0 1 0 0
v3 M = 0 1 0 0 0
0 1 1 0 1
v5 v4
1 1 0 0 0
Figura 14.
0 1 1 0 1
0 1 0 0 0 Los valores diferentes de 0, indican cuántas trayectorias de
M2 =
M ×M = 0 0 1 0 0 = longitud 2 existen entre cada par de nodos
1 2 1 0 0
0 0 1 1 0
1 2 1 0 0
0 0 1 0 0 Los valores diferentes de 0, indican cuántas trayectorias de
M3 = M2 × M =
0 1 0 0 0 = longitud 3 existen entre cada par de nodos
0 1 2 1 0
0 2 1 0 1
0 1 2 1 0
0 1 0 0 0 Los valores diferentes de 0, indican cuántas trayectorias de
M4 = M3 × M =
0 0 1 0 0 = longitud 4 existen entre cada par de nodos
0 3 2 0 1
1 2 2 0 0
0 3 2 0 1
0 0 1 0 0 Los valores diferentes de 0, indican cuántas trayectorias de
M5 = M4 × M =
0 1 0 0 0 = longitud 5 existen entre cada par de nodos
1 3 3 0 0
0 2 2 1 0
1 7 6 2 2
el elemento de la i-ésima fila y j-ésima
0 2 3 0 0 columna indica el número de trayecto-
T 5 = M + M 2 + M 3 + M 4 + M 5 = 0
3 2 0 0 = rias de longitud 5 o menor entre v y
i
2 10 9 1 2 v
j
2 7 6 2 1
Si un elemento de esta matriz no es nulo, queda claro que vj es alcanzable o accesable desde vi mediante una
trayectoria o camino de longitud máxima 5.
Como el cálculo de M ∗ o matriz de alcanzabilidad es muy laborioso mediante la unión de potencias de la matriz
de adyacencias, o sea usando
M∗ = M1 ∨ M2 ∨ · · · ∨ Mn
Stephen Warshall propuso en 1962 el siguiente procedimiento para hallar la matriz de alcanzabilidad a partir de
la matriz de adyacencias de G.
Procedimiento
W =M
para k = 1 hasta n
para i = 1 hasta n
para j = 1 hasta n
hacer W (i, j) = W (i, j) ∨ [W (i, k) ∧ W (k, j)]
Definición 2.12
De esta definición se deriva que W (n) = M ∗ = matriz de alcanzabilidad o accesibilidad. Si consideramos las
relaciones W (k) como conjuntos, se obtiene que:
Ejemplo 28
Hallar la matriz M ∗ de alcanzabilidad para el siguiente digrafo, usando el algoritmo de Warshall
1 2
La matriz de adyacencias es
1 2 3 4
1 0 1 0 0
20 0 1 0
M=
31 0 0 0
3 4 4 1 0 1 0
Figura 15.
En este momento W = M y W será modificado mediante el proceso iterativo que usa la fórmula: nuevo
W (i, j) = W (i, j) ∨ [W (i, k) ∧ W (k, j)]
Proceso iterativo
Primera iteración
Para k = 1 nodo intermedio
1 2 3 4
1 1 1 1 0
2 1 1 1 0
W (4) = = Matriz de alcanzabilidad
3 1 1 1 0
4 1 1 1 0
Obsérvese que W (3) = W (4) porque el nodo 4 es un nodo fuente, él no recibe ningún arco, entonces no se
pueden establecer nuevas trayectorias. El proceso se detiene cuando:
1. W k−1 = W k
2. W k = matriz de unos
3. W k = W n
Trayectorias de acceso o alcanzabilidad
Ejercicios Capítulo 2
1. Sea A el conjunto de los números reales. Se define la siguiente relación ℜ en A: xℜy si y solo si x e y
satisfacen la ecuación
x2 y2
+ =1
16 81
Establecer el dominio y el codominio de ℜ.
2. Dada la relación ℜ = {(1, 3), (4, 5), (7, 9), (8, 20)} establecer su dominio y codominio.
3. Para la siguiente relación ℜ = {(a, 3), (b, 5), (c, 7)} establecer la matriz de la relación.
4. Sean A = {7, 10, 4, 12}, B = {3, 8, 5} y la relación AℜB ⇔ a < b. establecer el conjunto de parejas que
conforman a ℜ y la matriz de ℜ.
5. Trazar el grafo que represente cada una de las relaciones de los ejercicios 2, 3 y 4.
6. La siguiente es la matriz de una relación ℜ,
1 0 1 1
M ℜ = 1 1 0 0
0 0 1 0
a) Dom(ℜ)
b) Cod(ℜ)
c) Conjunto de parejas.
d ) Trazar el grafo correspondiente.
8. Sean A = {1, 2, 3, 4, 8}, B = {1, 4, 6, 9} y la relación aℜb si y solo si a es un divisor de b (a|b). Establecer el
conjunto de parejas de ℜ y trazar el grafo.
9. Sean A = {1, 2, 3, 4, 5}, B = {5, 2, 1, 4, 10} y la relación aℜb si y solo si a es un múltiplo de b. Establecer el
conjunto de parejas de ℜ y trazar el grafo.
10. Sea A = {1, 2, 3, 4}. Encontrar la relación ℜ en A determinada para la siguiente matriz:
1 1 0 1
0 1 1 0
Mℜ =
0 0 1 1
1 0 0 0
11. Dado el grafo de la figura 16, determinar:
a) Mℜ .
b) Conjunto de parejas.
c) Dominio y codominio de ℜ.
4 2
1
5 3
Figura 16.
12. Sea A = {1, 2, 3, 4} y la relación dada por:
aℜb ⇔ a ≡ b (mod 2)
1 5 3 5
4 3 4
Figura 17.
15. En los ejercicios de a hasta h, determinar si la relación ℜ sobre el conjunto A es reflexiva, irreflexiva,
simétrica, asimétrica o transitiva.
a) A = Z; aℜb ⇔ a ≤ b + 1
b) A = Z+ ; aℜb ⇔ a = bn , n ∈ Z+
c) A = Z; aℜb ⇔ |a − b| = 4
d ) A = Z+ ; aℜb ⇔ |a − b| ≤ 2
e) A = Z; aℜb ⇔ a + b es par
f ) A = Z; aℜb ⇔ a + b es impar
g) A = Z; aℜb ⇔ a − b es par
h) A = Z; aℜb ⇔ a − b es impar
16. Sea A = {x, y, z} . Determinar si la relación ℜ cuya matriz Mℜ se muestra a continuación, es una relación
de equivalencia.
1 0 1
M ℜ = 0 1 1
0 1 1
17. Para los ejercicios de a hasta e, considere la relación ℜ cuyo grafo dirigido se ilustra en la figura 18.
1 2 7
3 6
4
5
Figura 18.
1 2 3
4 5
Figura 19.
3 CONEXIDAD
Un grafo conexo consiste de una sola pieza, mientras que un grafo que no es conexo consiste de dos o más
piezas. Estas piezas son subgrafos del grafo original y son llamadas componentes.
Sea M una matriz de adyacencias del grafo G donde cada elemento mij de M es de la forma
(
1, si existe el arco (i, j)
mij =
0, si no existe el arco (i.j)
39
40 CONEXIDAD
Al efectuar M ∗ M = M 2 sus entradas indicarán el número de trayectorias diferentes que existen entre
cada par de nodos y que tengan longitud de 2 arcos. Similarmente en M 2 ∗ M = M 3 sus entradas
indicarán el número de trayectorias diferentes que existen entre cada par de nodos y que tienen longitud
de tres arcos.
En al menos una de las matrices M, M 2 , . . . , M n−1 habrá una entrada no cero en la (i, j) − ésima
posición si existe una trayectoria entre i y j.
Al formar la matriz C = M + M 2 + M 3 + . . . + M n−1 , ésta tendrá una entrada cero para cualquier
nodo que no esté conectado a otro. Si C es totalmente no cero entonces el grafo es conexo.
paso 1. Hacer C = M
Hacer I = 1
paso 2. Si C tiene todas las filas libres de ceros ejecutar paso 4, en caso contrario continuar.
paso 3. Hacer I = I + 1
Si I = n, ejecutar paso 5, en caso contrario hacer C = C + M I y regresar al paso 2.
Ejemplo 1
Usando el algoritmo anterior, determinar si el grafo de la figura 1 es conexo
1 3
4
5 6
Figura 1.
Solución
Paso 0. Matriz de adyacencias. n = 6.
0 1 0 1 0 0
1 0 1 0 0 0
0 1 0 0 1 1
M =
1 0 0 0 1 0
0 0 1 1 0 1
0 0 1 0 1 0
paso 1. Hacer C = M , I = 1
paso 2. C no tiene todas las filas libres de cero. Continuar
paso 3. Hacer I = I + 1 = 2 I 6= n, hacer C = C + M2 .
0 1 0 1 0 0 2 0 1 0 1 0 2 1 1 1 1 0
1 0 1 0 0 0 0 2 0 1 1 1 1 2 1 1 1 1
0 1 0 0 1 1 1 0 3 1 1 1 1 1 3 1 2 2
C= + =
1 0 0 0 1 0 0 1 1 2 0 1 1 1 1 2 1 1
0 0 1 1 0 1 1 1 1 0 3 1 1 1 2 1 3 2
0 0 1 0 1 0 0 1 1 1 1 2 0 1 2 1 1 2
Cuando se hace mención a la frase “está conectado por una trayectoria”, se está definiendo una relación
ℜ sobre el conjunto de los vértices de un grafo. Para un grafo no dirigido, la relación bajo A (un conjunto
de arcos) es simétrica, entonces, ℜ es simétrica y transitiva. Asumiendo que cada vértice está conectado
a si mismo por una trayectoria de longitud cero, entonces ℜ es reflexiva. Luego ℜ es una relación de
equivalencia.
Dado que en cada clase de equivalencia todas las aristas están conectando sus vértices, se pueden construir
subgrafos de G, los cuales se llaman componentes de conectividad o simplemente componentes conexas
del grafo.
Definición 3.4
Sea el grafo G (N, A) y ni ∈ N uno de los nodos. Se denota Cni el conjunto formado por el nodo
ni y todos los nodos de G ligados a ni , por una trayectoria.
Definición 3.5
Se llama componente conexa de G a un subgrafo de G engendrado por un conjunto de la forma
Cni .
Ejemplo 2
En el grafo siguiente las dos subgráficas son componentes conexas del grafo dado.
2
4
1 3 6
Figura 2.
Definición 3.6
El número de componentes de un grafo G es llamado el número de conectividad de G y es notado
por C (G) .
Teorema 1
Se parte de cualquier nodo y se procede a encontrar todos los nodos que son vecinos al nodo origi-
nal. Luego se procede a encontrar todos los vecinos de ellos y así sucesivamente hasta que no haya más
vecinos. Esto significa que se ha encontrado una componente completa. Luego se salta a la siguiente
componente y se ejecuta el mismo procedimiento. Como el grafo es finito, entonces eventualmente todos
los nodos son alcanzados.
A. Caicedo B., G. Wagner de G., R. M. Méndez
Algoritmo para Grafos no Dirigidos 43
ALGORITMO
Inicio
N′ ← N
C←0
mientras N ′ 6= ∅ haga
inicio
Escoger n ∈ N ′
Encontrar todos los nodos conectados a n y guardarlos en W
Remover todos estos nodos de N ′ , es decir, hacer N ′ = N ′ − W
C =C +1
Terminar
Terminar
Ejemplo 3
Aplicar el algoritmo anterior al grafo de la figura 3.
2 5 6 7
1 3 10
b
8
4 9
Figura 3.
SOLUCIÓN
N ′ = {1, 2, . . . , 10} C = 0
Primera iteración:
N ′ 6= ∅ continuar
Escoger n = 5 arbitrariamente
W = {5, 6, 7, 8, 9} nodos conectados a n (componente)
N ′ = N ′ − W = {1, 2, 3, 4, 10}
C =0+1=1
Segunda iteración
N ′ 6= ∅ continuar
Escoger n = 1 arbitrariamente
W = {1, 2, 3, 4} nodos conectados a n (componente)
N ′ = N ′ − W = {10}
C =1+1=2
Tercera iteración
N ′ 6= ∅ continuar
Escoger n = 10 arbitrariamente
W = {10} nodos conectados a n (componente)
N′ = N′ − W = ∅
C =2+1=3
Cuarta iteración
N ′ = ∅ Parar
No se pudieron visitar todos los nodos, entonces el grafo no es conexo.
Ejercicios Capítulo 3
1. Use el algoritmo de conexidad para determinar si el grafo cuya matriz de adyacencias que se da a
continuación, es conexo o nó.
0 0 1 0 0
0 0 0 1 0
1 0 0 0 1
0 1 0 0 1
0 0 1 1 0
2. Por simple inspección determinar cuál es el arco que hace que el siguiente grafo sea conexo
b b
b b b
b b
Figura 4.
d
Figura 5.
e
c
d f
Figura 6.
4 CIRCUITO EULERIANO
Cuando se posee una red no dirigida conexa se puede diseñar un circuito que recorra todos
sus nodos, partiendo de un nodo específico y regresando a él, pero sin pasar más de una vez
por cada arco, además escogiendo el circuito de forma tal que el recorrido sea mínimo.
El problema de determinar un circuito euleriano de longitud mínima de una red conexa, también es
llamado El Problema del Cartero o Problema Chino del Cartero el cual apareció formulado por primera
vez por M. K. Kwan en el Chinese Mathematical Journal. Sus orígenes se remontan a 1736 cuando
Leonard Euler estudió el problema de los puentes de Königsberg.
En aquella época alguien propuso el siguiente problema: “¿Será posible, en una sola caminata, pasar por
los siete puentes sin cruzar ninguno de ellos dos veces?”. En la ciudad de San Petesburgo, entonces capital
de Rusia, el matemático suizo Leonard Euler, analizó el problema y escribió un trabajo que presentó a
la Academia Rusa de Ciencias. Este trabajo demostró que el problema tal como había sido propuesto no
tiene solución.
El problema lo esquematizó en un grafo donde sustituyó las porciones de tierra por puntos o nodos
y los puentes por líneas o arcos como se muestra en la figura 2.
B D
C
Figura 2.
Bajo esta simplificación el problema se resumía en coger un lápiz y a partir de un nodo del grafo y sin
levantarlo, tratar de recorrer todo el grafo sin repetir arco. Esto equivaldría a atravesar físicamente los
siete puentes del problema, donde el concepto recorrer el grafo es pasar todos los arcos solamente una
vez y regresar al punto de partida.
En su trabajo Euler descubrió que un grafo puede ser recorrido (cruzado) si todos sus nodos son pares.
Obsérvese que en el grafo de los puentes todos los nodos son de grado impar.
Para iniciar el proceso de hallar un ciclo euleriano en una red conexa, son de gran ayuda los siguientes
teoremas:
Teorema 1
Teorema 2
Definición 4.3
Una red par es aquella en la cual el número de arcos que inciden a todos y cada uno de los nodos
es par.
Corolario
Un grafo conexo contiene una trayectoria euleriana, pero no un ciclo euleriano, si y solo sí
exactamente dos nodos tienen grado impar. La trayectoria debe comenzar en un nodo impar y
terminar en otro nodo impar.
Ejemplo 1
Si en el grafo de los puentes se retira el arco BD, solamente los nodos A y C serán de grado impar
y el grafo podrá cruzarse pero no se logrará regresar al punto de partida (figura 3a). Si se agrega
un nuevo arcoAC, solamente los nodos B y D serán impares y se podrá cruzar el grafo pero no se
podrá regresar al punto de partida (figura 3b). Si se hacen conjuntamente los dos casos anteriores
(retirar el arco BD y agregar el arco AC) todos los nodos quedan de orden par y el grafo podrá ser
recorrido y regresar al nodo de partida (figura 3c).
A A A
B D B D B D
C C C
a) b) c)
Figura 3.
Con relación al corolario anterior se puede afirmar que la trayectoria euleriana empieza en un nodo impar
y termina en el otro nodo impar.
De acuerdo a estos teoremas, si el grafo es par entonces la solución óptima al problema del cartero
es un ciclo euleriano. El cartero no tiene que repetir ningún arco.
Para una red par la búsqueda de un ciclo euleriano se puede desarrollar en la siguiente forma:
1. Dividir el conjunto de datos en dos subconjuntos: uno que contenga los arcos usados en el circuito
y otro que contenga los no usados. Inicialmente todos los arcos están en el segundo conjunto.
2. El circuito es construido transfiriendo arcos del segundo conjunto al primero a medida que se van
usando.
3. Partiendo de un nodo origen cualquiera se selecciona un arco no usado que sea incidente a ese nodo
origen. Este arco se considera usado y se transfiere del segundo conjunto al primero.
4. Se repite el proceso hallando un nuevo arco no usado incidente al último nodo del arco anterior
usado. Así el circuito se construye arco por arco, hasta que eventualmente se regresa al nodo origen.
A. Caicedo B., G. Wagner de G., R. M. Méndez
48 CIRCUITO EULERIANO
El siguiente algoritmo se basa en los conceptos anteriores y permite hallar un circuito de Euler de longitud
mínima en redes conexas de orden par.
Paso 0. Determinar el orden de cada nodo del grafo G = (N, A). Hacer S el conjunto de todos los
nodos de orden impar. Si S es vacío ejecutar el paso 1.
Paso 1. Hallar un ciclo euleriano:
a. Marcar el origen del ciclo con s y el último nodo visitado con t. Hacer U = conjunto
de arcos que van a formar el ciclo parcial. Hacer V = conjunto de arcos que forman
ciclos parciales empezando en s.
b. Escoger cualquier arco entre t y q que esté sin usar, marcarlo como usado y adicionarlo
a U. Hacer t = q.
Ejemplo 2
Hallar la trayectoria del cartero para el grafo de la figura 4 aplicando el algoritmo anterior.
3
4
6 5 1
2
3
3 4
5
Figura 4.
Long(V ) = 4 + 3 + 3 + 5 + 6 + 7 + 2 = 30
Si el grafo es conexo y de orden par, el paso 1 del algoritmo anterior se puede reemplazar por el siguiente
procedimiento:
paso 0. Verificar que el grafo G = (N, A) es conexo con todos los nodos de orden par.
paso 1. Hacer C = {x} con x ∈ N (un nodo arbitrario),
paso 2. Mientras |A(G)| > 0 hacer:
begin
paso 3. Escoger x en N (C) con grado mayor de 0, y que no haya sido escogido con anterio-
ridad.
paso 4. Crear un ciclo D máximo simple que comience en x
paso 5. Hacer A(G) = A(G) − A(D)
paso 6. Hacer C = ciclo obtenido desde C al insertar D en la posición x.
end.
paso 7. Tomar C como el ciclo euleriano. Parar.
Ejemplo 3
Aplicar el procedimiento anterior para establecer si el grafo de la figura 5 contiene un ciclo euleriano.
1 2 9 3 4
8 7 6 5
Figura 5.
Ejercicios Capítulo 4
1. Aplicar el algoritmo general de Euler para hallar un circuito euleriano en el grafo de la figura 6,
usando el nodo a como nodo inicial.
a
d c e
f g
Figura 6.
2. Mostrar que el grafo de la figura 7 tiene una trayectoria euleriana, pero no un circuito euleriano.
Construir la trayectoria.
a
b c
d e
Figura 7.
Figura 8.
4. Un ingeniero supervisor de carreteras tiene asignado un circuito vial que debe revisar una vez por
semana para informar sobre el estado de dichas vías. El circuito vial es el de la figura 9
2
10 12
20 14
1 3 4
18
9 18
25
5
7 6 11
10 Figura 9.
El ingeniero tiene su sede en la ciudad 1 y debe planear su recorrido en forma tal que recorra todas
las carreteras de la red vial con el mínimo de distancia recorrida.
5. En una red de estaciones repetidoras se emite una señal de prueba de la estación R1, la señal debe
llegar a todas las otras estaciones; cada estación la replica a la estación más cercana, hasta que la
señal regresa a R1. Determinar la trayectoria seguida por la señal de prueba si la red de repetidoras
es la mostrada en la figura 10.
R2
20
35
18
R1 30
R4 R3
30 80
26
24 30
32
R5 R6
35
72
Figura 10.
5
Ca
CICLO HAMILTONIANO
Cuando se tiene un grafo conexo no dirigido G = (N, A) puede ocurrir que se desea hacer
un recorrido por el grafo, que pase por todos lo nodos, sin repetir nodo y regresar al nodo de
partida. Tal tipo de recorrido se define como un ciclo o circuito hamiltoniano.
El nombre de este tipo de ciclo se ha dado en honor al matemático irlandés Sir William Rowan
Hamilton (1805-1865), quien fue el primero que los estudió en 1857.
Si el grafo G tiene asociados a sus arcos valores que pueden ser las distancias entre los nodos
o el costo de recorrer dichas distancias, es de interés hallar un circuito que recorra todos los
nodos una sola vez, y que tenga distancia mínima o costo mínimo. Este problema ha sido
formulado desde hace mucho tiempo con el nombre de: “Problema del Agente Viajero”.
Definición 5.1
En un grafo G = (N, A), una trayectoria (o ciclo) que contenga exactamente n − 1 arcos y recorra
todos los nodos, es llamado hamiltoniana. Un grafo es llamado hamiltoniano si contiene un ciclo
hamiltoniano.
No hay una regla simple para determinar la existencia de un circuito hamiltoniano como si la hay para
circuitos eulerianos. Es cierto que un grafo con circuito hamiltoniano es conexo, pero no cada grafo conexo
tendrá un circuito hamiltoniano.
Si un grafo representa un conjunto de ciudades a ser visitadas, luego una trayectoria que visite cada
ciudad exactamente una sola vez es un circuito hamiltoniano. Asumiendo que cada ciudad está conectada
por un arco a cada una de las otras ciudades, siempre habrá un circuito hamiltoniano.
Teorema 1 De Dirac
Si G tiene n mayor o igual a 3 nodos y cada nodo tiene grado al menos n/2, entonces G es
hamiltoniano.
Sea G un grafo conexo sin lazos, con n nodos, n ≥ 3. Si ∀x, y ∈ N, x 6= y, grad(x)+grad(y) ≥ n−1,
entonces G tiene una trayectoria Hamiltoniana
53
54 CICLO HAMILTONIANO
Ejemplo 1 1 2 3
5 4
Figura 1.
Obsérvese que para cualquier par de nodos que se escoja, se cumple que la suma de los grados es
n ≥ 1, por lo tanto el grafo tiene una trayectoria Hamiltoniana, ésta podría ser 1 − 4 − 3 − 2 − 5.
Ejemplo 2
Aplicar el algoritmo anterior al grafo de la figura 2 para hallar un ciclo hamiltoniano C
u
x v t w y
Figura 2.
Solución
El seguimiento del algoritmo se muestra en la tabla siguiente:
paso z P C |N (C) = N |
2 ∅
4 x {x, v, t, w, y}
5 {x, t, w, y, v, x} no
4 u {u, t, w, y, v, x}
5 {u, w, y, v, x, t, u} si
6 {u, w, y, v, x, t, u} parar
Sea G = (N, A) un grafo conexo cuyos nodos representan ciudades y sus arcos representan las carreteras
que unen cada par de ciudades. El valor asociado a cada arco d(x, y) ≥ 0 es la distancia entre ellas. Un
agente viajero desea escoger una ruta que le permita visitar cada ciudad una sola vez y retornar a la
ciudad de origen cubriendo el mínimo de distancia.
Planteado en esta forma, el problema del agente viajero es equivalente a hallar un ciclo hamiltoniano
con la distancia mínima o costo mínimo
Un circuito hamiltoniano con la menor longitud total es llamado un ciclo hamiltoniano óptimo y es
una solución óptima al problema del agente viajero.
Un circuito óptimo para el problema del agente viajero no necesariamente es un circuito hamiltonia-
no óptimo como se observa en el siguiente gráfico.
b
2
2
15
a 4
4 c
Figura 3.
con una longitud total de 2 + 15 + 4 = 21 unidades, mientras que para el agente viajero lo más económico
sería hacer el siguiente recorrido:
(a, b)(b, a)(a, c)(c, a)
con longitud total 2 + 2 + 4 + 4 = 12 unidades. Este circuito no es hamiltoniano pero es una solución
óptima para el agente viajero.
Para resolver situaciones como la anterior se ha establecido una condición de optimización, expresa-
da en el siguiente teorema:
Teorema 3
Si para cada par de nodos x e y en el grafo G se cumple que d(x, y) ≤ d(x, z) + d(z, y) ∀z ∈
G, z 6= x 6= y, entonces un circuito hamiltoniano en G es una solución óptima al problema del agente
viajero si la solución existe.
Para hallar una solución aproximada al problema del agente viajero se dispone de diversos algoritmos
como los de Bellmore-Nemhauser (1968), Held-Karp (1970), Garfinkel-Nemhauser (1972), Little-Murty
(1973) y otros. Todos estos algoritmos caen dentro de dos categorías:
A. Caicedo B., G. Wagner de G., R. M. Méndez
56 CICLO HAMILTONIANO
1. Algoritmo que siempre halla una solución óptima pero que se requiere de un número muy grande
de operaciones.
2. Algoritmo que encuentra un circuito hamiltoniano pero que no siempre es el óptimo. Requiere un
número razonable de operaciones.
Un algoritmo que encuentra una sub-óptima solución al problema del agente viajero en un grafo completo
es el llamado algoritmo del vecino más cercano. Este algoritmo se describe a continuación.
Ejemplo 3
Aplicar el algoritmo del vecino más cercano al grafo pesado de la figura 4, para hallar un ciclo
hamiltoniano.
b
5
10
a d
7
6 3
c
8
Figura 4.
Solución
paso 0. El grafo dado es completo.
paso 1. Escoger arbitrariamente a b como nodo inicial.
Hacer n′ = b, y w = 0
Se ha hallado un circuito hamiltoniano que no es una solución óptima al problema del agente viajero
puesto que si se toma como nodo inicial al nodo a, el circuito resultante será de longitud 23 como se
muestra en la figura 5.
b
5
a d
7
3
c
8
Figura 5.
Teorema 4
Sea G un grafo conexo sin lazos, con n nodos, n ≥ 3. Entonces ∀x, y ∈ N, si grad(x) + grad(y) ≥ n
y x e y no están conectados por un arco, entonces G es hamiltoniano
Ejemplo 4
1 2
(2, 3),
no existe
n = 5 y (3, 4), no existe
3
no existe
(1, 5),
4 5
Figura 6.
grad(2) + grad(3) = 3 + 2 =5 ≥ 5
grad(3) + grad(4) = 2 + 3 =5 ≥ 5 =⇒ G es hamiltoniano
grad(1) + grad(5) = 3 + 3 =6 ≥ 5
Teorema 5
Sea G un grafo conexo sin lazos, |N (G)| = n ≥ 3. Si G tiene al menos 21 (n − 1)(n − 2) + 2 arcos,
entonces G es hamiltoniano
Ejemplo 5
b b b
n = 5 y 12 (5 − 1)(5 − 2) + 2 = 8 aristas,
entonces G es hamiltoniano
b b
Figura 7.
Nota: Observe que los grafos de los ejemplos 4 y 5 son hamiltonianos pero no cumplen el teorema de
Dirac.
Ejercicios Capítulo 5
1. Encontrar un ciclo hamiltoniano y un circuito euleriano para el grafo de la figura 8.
2 3 4
1 5 8
6 7
Figura 8.
2. Aplique el algoritmo del vecino más cercano para hallar un ciclo hamiltoniano en el grafo de la
figura 9, empezando en el nodo a) 1; b) 2; c) 3.
4 6 7
1 2 3 4
12 3 11
9 10
10 2 6 8
5
5 6 7 8
5 4 3
Figura 9.
3. Cuáles de los grafos de la figura 10 contienen un circuito hamiltoniano. Cuáles contienen una
trayectoria hamiltoniana pero no un circuito hamiltoniano
b b b b b b b
b b b b b b b b b
b b b b b b
Figura 10.
b b
b b
b b
b b
b b
b b
b b b
b b
Figura 11.
a b c d e
Figura 12.
6
Ca
Existen diversas situaciones o problemas de la vida real que pueden ser llevadas a formularse
como un caso específico de la Teoría de Grafos, como es el hecho de encontrar la trayectoria
más corta que une dos puntos de abastecimiento, dos ciudades, etc.
Algunos de los problemas más comunes que pueden darse dentro de este ámbito son:
a. Las compañías aéreas necesitan con frecuencia determinar las rutas más cortas de sus vuelos que
cubran el máximo número posible de los aeropuertos a los cuales están autorizados para llegar.
b. Los agentes viajeros de las compañías comerciales requieren de rutas que les permitan visitar el
mayor número de clientes sin salirse del límite de sus presupuestos.
c. Las agencias de inversionistas deben decidir cómo invertir óptimamente sus fondos, escogiendo de
entre una gama de posibilidades de diversos montos y tiempos de duración, y así llegar a establecer
el mejor plan de inversión, el cual correspondería a la trayectoria más corta de una red establecida
considerando los nodos como fechas y los valores de los arcos como las rentabilidades esperadas.
De los algoritmos diseñados para resolver el problema de la trayectoria más corta se destacan:
Algoritmo de DIJKSTRA (1959): permite encontrar la trayectoria más corta entre dos nodos especí-
ficos, cuando los valores de los arcos son todos positivos
Algoritmo de FLOYD (1962): permite encontrar la trayectoria más corta desde un nodo cualquiera
hasta uno de los otros nodos en el grafo, el cual puede tener arcos de valor negativo pero no circuitos
negativos
Algoritmo de FORD (1964): sirve para calcular la trayectoria más corta entre dos nodos dados cuando
los valores de los arcos pueden ser negativos. Es una generalización del algoritmo de DIJKSTRA y
no se puede aplicar a grafos que contengan circuitos cuya longitud total sea negativa.
Algoritmo de DANTZIG (1967): es similar al algoritmo de FLOYD puesto que también encuentra
la trayectoria más corta desde un nodo dado hasta cada uno de los otros nodos en el grafo.
Algoritmo de POLLAC (1967): encuentra la primera y segunda trayectoria más corta en un grafo
que puede tener arcos negativos.
61
62 LA TRAYECTORIA MÁS CORTA
Definición 6.1
Dados los nodos ni y nj de un grafo G = (N, A) se llama trayectoria mínima o camino mínimo
de ni a nj al número de arcos del camino de longitud mínima que va desde ni a nj y se representa
por d(ni , nj )
Cuando en el grafo no exista un camino que vaya de ni a nj se dice que el camino mínimo es d(ni , nj ) = ∞.
Además, cuando ni = nj se escribe d(ni , nj ) = 0.
Ejemplo 1
Para el grafo de la figura 1 se tiene:
Camino mínimo del nodo 1 al 7 es d(1, 7) = 2
Camino mínimo del nodo 2 al 5 es d(2, 5) = 2
1 3
5
7
2 4 6
Figura 1.
Para determinar el o los caminos mínimos que van desde el nodo np al nodo nf en un grafo no pesado
se sigue el siguiente procedimiento:
A. Caicedo B., G. Wagner de G., R. M. Méndez
Trayectoria del Valor Mínimo 63
Ejemplo 2
En el grafo de la figura 2 determinar el camino mínimo desde n0 a n7
n3
n5
n0
n2 n7
n1
n4 n6
Figura 2.
Solución
paso 1. Se marca con 0 el nodo n0 , n0 = np
paso 2. Se marcan con 1 los nodos n1 , n2 , n3 adyacentes a n0 .
paso 3. Se marcan con 2 los nodos n4 , n5 adyacentes a n1 , n2 , n3 .
paso 4. Se marcan con 3 los nodos n6 , n7 adyacentes a n4 , n5 . Ya se marcó el nodo final n7. Parar.
El camino mínimo desde n0 a n7 es:
{n0 , n3 , n5 , n7 } ó {n0 , n2 , n4 , n7 } ó {n0 , n1 , n4 , n7 }
Con d(n0 , n7 ) = 3. El camino más corto está formado por los nodos que quedaron
etiquetados en un orden consecutivo ascendente 0, 1, 2, 3.
Sea G = (N, A) un grafo y supóngase que todo arco u tiene asociado un número l(u) ≥ 0 llamado valor
de u. Se trata de hallar una trayectoria o camino que vaya desde un nodo vi a otro vj tal que su valor
total sea mínimo. Este problema es resuelto en una forma muy eficiente con el algoritmo propuesto por
Edsgar W. Dijkstra.
El algoritmo asigna un etiqueta a cada nodo en el grafo. Esta etiqueta es la distancia que hay desde el
nodo s escogido como origen a lo largo de la trayectoria más corta encontrada, hasta el nodo que se está
etiquetando.
La etiqueta de cada nodo puede estar en 2 estados:
a. Puede ser permanente: en este caso la distancia encontrada es a lo largo de la trayectoria más corta
de todas las encontradas.
b. Puede ser temporal: cuando hay incertidumbre de que la trayectoria encontrada sea la más corta
de todas.
A medida que el método trabaja se cambian gradualmente las etiquetas temporales por etiquetas perma-
nentes. Al comienzo se tiene un conjunto de nodos con etiquetas temporales y el objetivo es hacer que esas
etiquetas disminuyan, encontrando trayectorias a esos nodos usando trayectorias a nodos etiquetados per-
manentemente. Cuando esto se ha logrado, se selecciona el nodo con la etiqueta temporal más pequeña y
esta etiqueta se convierte en permanente. El proceso se repite hasta que al nodo terminal t se le haya asig-
nado una etiqueta permanente, pero esto puede ocurrir eventualmente, ya que cada vez que el algoritmo
es usado, una de las etiquetas es omitida y así el número de nodos con etiquetas temporales decrece a cero.
Algoritmo:
paso 0. Asignar un etiqueta temporal l(i) = ∞ a todos los nodos i 6= s. Fijar l(s) = 0 y p = s. Hacer
l(s) permanente (p es el último nodo al que se le haya asignado una etiqueta permanente).
s es el nodo de partida
paso 1. Para cada nodo i con una etiqueta temporal redefínase l(i) a ser el menor entre l(i) y
l(p) + d(p, i). Hallar el nodo i con la menor etiqueta temporal. Hacer p igual a éste i y hacer
permanente la etiqueta l(p)
paso 2 Si el nodo t tiene etiqueta temporal, repetir el paso 1. En caso contrario, t tiene una etiqueta
permanente y ésta corresponde a la longitud de la trayectoria más corta desde s hasta t a
través de la red. Parar.
Ejemplo 3
El grafo de la figura 3 muestra los costos en miles de pesos, para transportar una tonelada de
mercancía entre los diversos centros de consumo. Se desea determinar la trayectoria más corta (menos
costosa) para transportar la mercancía desde el centro de abastecimiento S al centro de consumo t
S
4 7
3
a 3
b
2
2
c d t
3 2
Figura 3.
Para efectos de aplicación del algoritmo, el centro de consumo t se llamará el nodo terminal t
Solución
s a b c d t
s 0 4 7 3 ∞ ∞
a 4 0 3 ∞ 2 ∞
b 7 3 0 ∞ ∞ 2
M=
c 3 ∞ ∞ 0 3 ∞
d∞ 2 ∞ 3 0 2
t ∞ ∞ 2 ∞ 2 0
s a b c d t
l() = 0 ∞ ∞ ∞ ∞ ∞
permanentes? si no no no no no
s a b c d t
l() = 0 4 7 3 ∞ ∞
permanentes? si no no si no no
s a b c d t
l() = 0 4 7 3 6 ∞
permanentes? si si no si no no
s a b c d t
l() = 0 4 7 3 6 ∞
permanentes? si si no si si no
s a b c d t
l() = 0 4 7 3 6 8
permanentes? si si si si si no
s a b c d t
l() = 0 4 7 3 6 8
permanentes? si si si si si si
El algoritmo de Floyd-Warshall encuentra el camino mínimo entre todos los pares de nodos, en una única
ejecución, en grafos dirigidos ponderados, sin ciclos negativos. El algoritmo compara todos los posibles
caminos a través del grafo entre cada par de nodos y escoge la estimación óptima (la de menor costo).
A. Caicedo B., G. Wagner de G., R. M. Méndez
Algoritmo de Floyd-Warshall 67
Sea G un grafo ponderado de n nodos. Sea cmin(i, j, k) una función que devuelve el camino mínimo de i
a j usando únicamente los nodos de 1 a k como puntos intermedios en el camino. El objetivo es encontrar
el camino mínimo desde cada i a cada j, usando únicamente los nodos 1 hasta k + 1.
El camino óptimo de i a j que utiliza únicamente los nodos de 1 hasta k, como nodos intermedios,
está definido por cmin(i, j, k). Si hubiera un camino mejor de i a k + 1 a j, la longitud de ese camino
sería la concatenación del camino mínimo de i a k + 1 (utilizando nodos de 1 . . . k) y el camino mínimo
de k + 1 a j (que también utiliza los nodos en 1 . . . k)
Proceso Recursivo
cmin(i, j, k) = mı́n [cmin(i, j, k − 1), cmin(i, k, k − 1) + cmin(k, j, k − 1)]
cmin(i, j, 0) = valorarco(i, j)
Para efectos de implementar el algoritmo se usa una matriz de adyacencias del grafo, modificada y
que se llamará matriz de distancias o Dist; esta matriz es la matriz de pesos del grafo donde la ausencia
de un arco se simboliza con ∞, y los valores en la diagonal principal son ceros.
Se utiliza algún nodo k como nodo intermedio para hallar la distancia más corta entre todos los pares de
nodos.
Para una pareja de nodos (i, j) el camino más corto del nodo i al k, que es Dist[i, k], se suma al camino
más corto desde el nodo k hasta el nodo j. Si esta suma es menor que el camino actualmente más corto
entre los nodos i y j, entonces se utiliza el camino más corto que pasa por el nodo k.
Repitiendo este proceso para todas las parejas de nodos, se puede obtener para cada pareja la longitud
del camino de mínimo costo que pasa por el nodo k.
Al tomar todos los nodos de G como nodos intermedios, se obtiene la matriz de distancias mínimas
entre todos los pares de nodos.
Se introduce una matriz en la cual se registra información acerca de los nodos intermedios. Dicha matriz
se puede llamar CAM IN O. Esta información se puede utilizar para generar los nodos que se encuentran
en cada uno de los caminos mínimos.
La matriz CAM IN O se inicializa en cero y cuando el proceso termina CAM IN O[i, j] contiene el número
de nodos que ha dado lugar a un cambio en Dist[i, j].
Procedimiento (1)
Entrar Dist[i, j] =matriz inicial de valores de G
begin
para i = 1 hasta n
para j = 1 hasta n
hacer CAM IN O[i, j] = 0
para k = 1 hasta n
para i = 1 hasta n
para j = 1 hasta n
si Dist[i, k] + Dist[k, j] < Dist[i, j], hacer
begin
Dist[i, j] = Dist[i, k] + Dist[k, j]
CAM IN O[i, j] = k
end
end.
Ejemplo 4
Para el siguiente grafo establecer la matriz de distancias más cortas entre todas las parejas de nodos
y la matriz que indica los nodos intermedios por los cuales pasa cada camino más corto.
1 3 2
0 ∞ ∞ 1 0 0 0 0
1 5
3 0 1 ∞ 0 0 0 0
8 1 1 1 Dist =
CAM IN O =
5 1 0 ∞ 0 0 0 0
8 1 4 0 0 0 0 0
4 4 3
Figura 4.
k=1 (
Dist[1, 1], no cambia
i = 1, j = 1, Dist[1, 1] + Dist[1, 1] = 0 + 0 = 0 < 0? (no) ⇒
CAM IN O[1, 1], no cambia
(
Dist[1, 2], no cambia
j = 2, Dist[1, 1] + Dist[1, 2] = 0 + ∞ = ∞ < ∞? (no) ⇒
CAM IN O[1, 2], no cambia
(
Dist[1, 3], no cambia
j = 3, Dist[1, 1] + Dist[1, 3] = 0 + ∞ = ∞ < ∞? (no) ⇒
CAM IN O[1, 3], no cambia
(
Dist[1, 4], no cambia
j = 4, Dist[1, 1] + Dist[1, 4] = 0 + 1 = 1 < 1? (no) ⇒
CAM IN O[1, 4], no cambia
(
Dist[2, 1], no cambia
i = 2, j = 1, Dist[2, 1] + Dist[1, 1] = 3 + 0 = 3 < 3? (no) ⇒
CAM IN O[2, 1], no cambia
(
Dist[2, 2], no cambia
j = 2, Dist[2, 1] + Dist[1, 2] = 3 + ∞ = ∞ < 0? (no) ⇒
CAM IN O[2, 2], no cambia
(
Dist[2, 3] no cambia
j = 3, Dist[2, 1] + Dist[1, 3] = 3 + ∞ = ∞ < 1? (no) ⇒
CAM IN O[2, 3] no cambia
(
Dist[2, 4] cambia a 4
j = 4, Dist[2, 1] + Dist[1, 4] = 3 + 1 = 4 < ∞? (si) ⇒
CAM IN O[2, 4] = 1
(
Dist[3, 1] no cambia
i = 3, j = 1, Dist[3, 1] + Dist[1, 1] = 5 + 0 = 5 < 5? (no) ⇒
CAM IN O[3, 1] no cambia
(
Dist[3, 2] no cambia
j = 2, Dist[3, 1] + Dist[1, 2] = 5 + ∞ = ∞ < ∞? (no) ⇒
CAM IN O[3, 2] no cambia
(
Dist[3, 3] no cambia
j = 3, Dist[3, 1] + Dist[1, 3] = 5 + ∞ = ∞ < 0? (no) ⇒
CAM IN O[3, 3] no cambia
(
Dist[3, 4] cambia a 6
j = 4, Dist[3, 1] + Dist[1, 4] = 5 + 1 = 6 < ∞? (si) ⇒
CAM IN O[3, 4] = 1
(
Dist[4, 1] no cambia
i = 4, j = 1, Dist[4, 1] + Dist[1, 1] = 8 + 0 = 8 < 8? (no) ⇒
CAM IN O[4, 1] no cambia
(
Dist[4, 2] no cambia
j = 2, Dist[4, 2] + Dist[1, 2] = 1 + ∞ = ∞ < 1? (no) ⇒
CAM IN O[4, 2] no cambia
(
Dist[4, 3] no cambia
j = 3, Dist[4, 3] + Dist[1, 3] = 4 + ∞ = ∞ < 4? (no) ⇒
CAM IN O[4, 3] no cambia
(
Dist[4, 4] no cambia
j = 4, Dist[4, 4] + Dist[1, 4] = 0 + 1 = 1 < 0? (no) ⇒
CAM IN O[4, 4] no cambia
Para k = 2
0 ∞ ∞ 1 0 0 0 0
3 0 1 4 0 0 0 1
Dist2 = CAM IN O2 =
4 1 0 5 2 0 0 2
4 1 2 0 2 0 2 0
Para k = 3
0 ∞ ∞ 1 0 0 0 0
3 0 1 4 0 0 0 1
Dist3 = CAM IN O3 =
4 1 0 5 2 0 0 2
4 1 2 0 2 0 2 0
Para k = 4
0 2 3 1 0 4 4 0
3 0 1 4 0 0 0 1
Dist4 = CAM IN O4 =
4 1 0 5 2 0 0 2
4 1 2 0 2 0 2 0
La matriz Dist4 posee los valores de las distancias más cortas entre cualquier par de nodos. Por
ejemplo Dist(1, 3) = 3, Dist(3, 4) = 5, etc.
La matriz CAM IN O4 sirve para establecer cuáles nodos conforman los caminos más cortos. Por
ejemplo establecer el camino más corto de 3 a 4. CAM IN O[3, 4] = 2 indica que 2 es un nodo
intermedio entre 3 y 4, es decir,
3 2 4
Como CAM IN O[3, 2] = 0, CAM IN O[2, 1] = 0, CAM IN O[1, 4] = 0, entonces no hay más nodos
intermedios.
Procedimiento (2)
Entrar la matriz de distancias Dist del grafo G
Para k = 1 hasta n
Para i 6= k, 1 hasta n
Para j 6= k, 1 hasta n
hacer Dist[i, j] = mı́n(Dist(i, j), Dist(i, k) + Dist(k, j))
Ejemplo 5
Hallar la matriz de distancias más cortas entre todas las parejas de nodos del siguiente grafo no
dirigido
5
1 3 2 3
1 2 3 4 5 6
1 0 3 5 1 ∞ ∞
1 9 7 1
2
3 0 ∞ ∞ 9 ∞
3 5 ∞ 0 7 7 1
Dist =
4
1 ∞ 7 0 ∞ 4
4 5 6 5∞ 9 7 ∞ 0 ∞
6 ∞ ∞ 1 4 ∞ 0
4
7
Figura 5.
0 3 5 1 ∞ ∞
3 0 ∞ ∞ 9 ∞
5 ∞ 0 7 7 1
Dist =
1 ∞ 7 0 ∞ 4
∞ 9 7 ∞ 0 ∞
∞ ∞ 1 4 ∞ 0
Aplicamos el algoritmo de Floyd-Warshall, y para ello en cada iteración fijamos un vértice intermedio.
1a Iteración: nodo intermedio = k = 1
La matriz en simétrica, por lo que solamente hará falta calcular el triángulo superior de las distancias.
0 3 5 1 12 5
3 0 8 4 9 8
5 8 0 6 7 1
Dist5 = Dist4 =
1 4 6 0 13 4
12 9 7 13 0 8
5 8 1 4 8 0
Este algoritmo propuesto por SHUMBEL en Structure in Communication Nets, Symposium of Informa-
tion Networks en 1954, establece un procedimiento para hallar la trayectoria de valor máximo o de valor
mínimo, usando producto de matrices a partir de la matriz inicial de costos o adyacencias.
Algoritmo de Shumbel
Sea M la matriz de valores asociados a un grafo G, la cual se representa por M = [mij ] donde los
elementos mij se definen de dos formas.
La matriz de trayectorias de valor óptimo es M n−1 en donde n es el número de nodos del grafo.
El producto de las dos matrices dará origen a otra matriz C obtenida así:
La anterior expresión es equivalente a: sumar las parejas de elementos que intervienen en el producto
de matrices y escoger la suma mínima.
La anterior expresión es equivalente a: sumar las parejas de elementos que intervienen en el producto
de matrices y escoger la suma máxima.
Ejemplo 6
Determinar las trayectorias de valor mínimo en el grafo de la figura 6
x2 8 x4
3 5
4 1
x1 3 4 3 x6
7 6
x3 4 x5
Figura 6.
Solución
La matriz de costos asociados al grafo es:
1 2 3 4 5 6
1 0 3 7 X X X
2
X 0 3 8 4 X
3 X X 0 1 4 X
M=
4
X X X 0 3 5
5X X X 4 0 6
6 X X X X X 0
El primer producto de matrices es: M × M = M 2 , donde los elementos de M 2 se determinan así:
m11 = mı́n{0 + 0, 3 + x, 7 + x, x + x, x + x, x + x} = 0
m12 = mı́n{0 + 3, 3 + 0, 7 + x, x + x, x + x, x + x} = 3
m13 = mı́n{0 + 7, 3 + 3, 7 + 0, x + x, x + x, x + x} = 6
............
m16 = mı́n{0 + x, 3 + x, 7 + x, x + 5, x + 6, x + 0} = x
Se continua el proceso con las otras filas y columnas y se obtiene:
0 3 6 8 7 X
X 0 3 4 4 10
X X 0 1 4 6
M2 =
X X X 0 3 5
X X X 4 0 6
X X X X X 0
La matriz M 5 es la matriz de trayectorias de valor mínimo; muestra los valores de las trayectorias
mínimas para ir de un nodo a otro, por ejemplo: para ir del nodo 1 al nodo 6 la trayectoria mínima
tiene un valor de 12. Para ir del nodo 2 al 6 la trayectoria mínima vale 9.
Hasta ahora se ha encontrado una matriz de distancias mínimas, pero no se ha determinado cuáles son
esas trayectorias mínimas. Para llegar a encontrar una trayectoria mínima se procede de la siguiente forma:
Sea S una matriz cuyos elementos sij son determinados de la siguiente forma:
1, si el valor del arco no cambió entre M y la matriz M m .
M m es la matriz donde paró el algoritmo de Shumbel
Sij =
0,
si conserva la X, en la diagonal y en cualquier otro caso, es decir,
si ocurrió un cambio en la posición.
En el ejemplo analizado se comparan las matrices M y M 5 y se obtiene:
1 2 3 4 5 6
1 0 1 0 0 0 0
2
0 0 1 0 1 0
3 0 0 0 1 1 0
S=
4
0 0 0 0 1 1
50 0 0 1 0 1
6 0 0 0 0 0 0
En esta matriz el 1 indica presencia del arco y el 0 la ausencia del mismo. A partir de esta matriz se
pueden establecer las trayectorias, por ejemplo, para ir del nodo 1 al nodo 6 se pueden establecer las
siguientes trayectorias:
a. Del nodo 1 ir al nodo 2 (ver matriz S), estando en 2 ir al nodo 3, estando en 3 ir al nodo 4, del 4
ir al 5 y del 5 ir al 6. Longitud = 16.
b. Del nodo 1 ir al nodo 2, estando en 2 ir al nodo 5 y del 5 ir al nodo 6. Longitud = 13.
c. Del nodo 1 ir al nodo 2, del 2 ir al 4 y del 4 ir al 6. Longitud = 16.
d. Del nodo 1 ir al nodo 2, del 2 ir al nodo 3, del 3 ir al nodo 4 y del 4 ir al nodo 6. Longitud = 12.
Esta trayectoria tiene longitud igual a la que indica la matriz de valores mínimos, lo que indica que
ya se ha encontrado una de las trayectorias más cortas para ir del nodo 1 al nodo 6.
Lo anterior se puede reorganizar mediante una estructura de árbol:
6
3 5 6 ⇒ Vr = 16
4 5
1
6 ⇒ Vr = 12
3
4 5
3 4 4 6 ⇒ Vr = 19
5 6
3
1 2 6 ⇒ Vr = 16
4
5
4 4 6 ⇒ Vr = 16
5 6
6 ⇒ Vr = 13
Figura 7.
La trayectoria de menor costo para ir del nodo 1 al nodo 6 es 1 − 2 − 3 − 4 − 6 con un valor de 12. Como
lo indica la matriz de parada M 5 es la posición (1, 6).
En forma similar se procede para hallar otras trayectorias mínimas entre cada par de nodos, las cuales
no necesariamente son únicas.
Ejemplo 7
Un problema simple de control de producción
Un fabricante de pinturas produce 5 tipos de pinturas que se pueden fabricar con la misma maqui-
naria. Los costos de adecuación de máquinas para pasar de un producto a otro se muestran en la
siguiente tabla.
i 1 2 3 4 5
1 0 x 10 x 8
2 7 0 5 7 11
3 5 x 0 6 8
4 8 6 7 0 10
5 x 10 8 x 0
Se desea establecer el orden en que deben producir para que el costo sea mínimo.
El problema se puede traducir a un problema de trayectoria más corta en un grafo conexo como el
siguiente:
8
7
2 4
6
7
11 10
7
1 10
5 5 6
10 5
8
3
8
8
Figura 8.
Se pueden encontrar varias trayectorias mínimas, dependiendo del nodo que se tome como nodo
inicial.
Aquí los nodos son los productos. Los valores en los arcos son los costos.
M M M2
0 x 10 x 8 0 x 10 x 8 0 18 10 16 8
7 0 5 7 11 7 0 5 7 11 7 0 5 7 11
5 x 0 6 8 ⊕ 5 x 0 6 8 = 5 12 0 6 8
8 6 7 0 10 8 6 7 0 10 8 6 7 0 10
x 10 8 x 0 x 10 8 x 0 13 10 8 14 0
M M2 M3
0 x 10 x 8 0 18 10 16 8 0 18 10 16 8
7 0 5 7 11 7 0 5 7 11 7 0 5 7 11
5 x 0 6 8 ⊕ 5 12 0 6 8 = 5 12 0 6 8
8 6 7 0 10 8 6 7 0 10 8 6 7 0 10
x 10 8 x 0 15 10 8 14 0 13 10 8 14 0
Comparando M y M 3 se obtiene:
1 2 3 4 5
1 0 0 1 0 1
2
1 0 1 1 1
S = 3
1 0 0 1 1
41 1 1 0 1
5 0 1 1 0 0
El 1 indica presencia de arco y el 0 ausencia de arco. Con esta matriz ya se pueden establecer las
trayectorias óptimas de valor mínimo.
2 11 5
6 = 33
4 10
6 10
5 2 = 36
3 Si se inicia con la pintura
8 1 la secuencia óptima es
10 10 7
5 2 4 = 35
1−5−3−4−2
1
3 6 4
con un costo de 28
5 = 29
8 2 7
10
4 7 3 = 32
5
8 6
3 6 4 2 = 28 X
Figura 9.
4 10 5
6 = 33
10 3 5
1 8 5 8 3 6 4 = 29
1 5
7 8 1 8 5 Si se inicia con la pintura 2 exis-
6 = 27 X
3 4 ten 3 secuencias óptimas
5 5
5 2−3−4−1−5
10 3 8 5
2 = 33
1 2−4−3−1−5
8 5 8 3
7 8
= 31
6 5 1 8 5 = 27 X 2−5−3−4−1
4 7 3
10 5 las tres con un costo de 27
5 8 3 5 1 = 30
5
8
1
3
6 4 8 1 = 27 X
Figura 10.
1 8 5 10 2 7 4 = 30
1 8 5 10 2
5 = 30
6
7 1 8 5 = 27 X Si se inicia con la pintura
3 6 4 6 2 11 3 la secuencia óptima es
10 5
3−4−2−1−5
8 5 10 2 7 1 con un costo de 27
= 33
7 1
5 10 2 7
4 8 1 = 33
Figura 11.
3 8 5 10 2 = 36
10
2 5 5
10 = 31
1 8 5 8
3
3 8 5
10 = 31
8 1 8
8 Si se inicia con la pintura
5 3 = 29
7 4 la secuencia óptima es
1 8 5
5 = 24 X 4−2−3−1−5
4 6 2 5 3 8
5 con un valor de 24
11
7 8 5 En este orden se debe pro-
5 3 1 = 30 ducir las 5 pinturas para
8 10 que el costo sea mínimo.
10 5 1 5 2 = 30
3 8
5 10 2 7 1 = 32
1 10 3
7 = 37
5 10 2 5
3 5 1
8 = 30
3 5 1
Figura 12.
1 10 3 6 4 = 33
7
2 5 5 1
10 3 6 Iniciando con la pintura 5
8
4 1 = 29 la secuencia óptima es
5
1
5−3−4−2−1
8
5
con un costo de 27.
3 6 8 1
4 2
2 7 1 = 27 X
Figura 13.
Nota: Obsérvese que en los árboles anteriores algunas ramas quedan sin completar, lo cual indica
que determinadas secuencias no se pueden realizar para producir las 5 pinturas.
Ejercicios Capítulo 6
1. Aplicar el algoritmo de Dijkstra para encontrar la trayectoria de mínimo valor entre los nodos A y
F del grafo de la figura 5
4
B E
3 12 2 6
3
A 11 D 4 3 G
10 5 8 3
C F
Figura 14.
2. Use un algoritmo que permita hallar la trayectoria de menor número de arcos entre los nodos A y
H del grafo de la figura 6
A G
B F
H
D
C E
Figura 15.
3. Aplicar el algoritmo matricial de Shumbel para hallar la trayectoria de mínimo valor entre los nodos
1 y 9, entre los nodos 2 y 10 y entre los nodos 3 y 8 del grafo de la figura 7
1 3 8
5 2
4 8
7
6 2
5 5
2 4 9
2
8 4 4
3 1
3
3 7 11 10
6 6
Figura 16.
4. Debido a los avances tecnológicos, una compañía procesadora de datos considera que un determinado
tipo de computador tiene una vida útil de 4 años y luego entra en obsolescencia. La compañía puede
tener este tipo de computador por un período de 4 años y luego venderlo por un valor de rescate, o
puede reemplazarlo por un nuevo modelo al final de cualquier año dado. El costo neto estimado de
operación (precio de compra + instalación y mantenimiento − precio de venta) para un computador
comprado al inicio del año i y vendido al inicio del año j está dado en la tabla 1 y representado en
el grafo de la figura 8; además, determinar una política de reemplazo que minimice el costo total
de operación durante el período de 4 años. Usar el algoritmo de Dijkstra
A. Caicedo B., G. Wagner de G., R. M. Méndez
82 LA TRAYECTORIA MÁS CORTA
i 1 2 3 4 5 1
1 12 19 33 49
2 14 23 38
3 16 26 2 3 4 5
4 13
Tabla 1. Figura 17.
5. Un fabricante de pegantes produce 5 clases de productos que se pueden fabricar con la misma
maquinaria, con los correspondientes costos de adecuación y operarios. Desea determinar el orden
en que debe producir estos 5 productos para que el costo sea mínimo. La tabla de costos por cambio
de actividad se muestra en la tabla 2, en donde m indica que no se puede llevar a cabo el intercambio
de la actividad i por la actividad j.
i 1 2 3 4 5
1 0 m 9 m 7
2 6 0 4 6 9
3 4 m 0 5 7
4 7 5 6 0 9
5 m 9 7 m 0
Tabla 2.
6. Use el procedimiento (1) del algoritmo de Floyd-Warshall para hallar la matriz de distancias mínimas
y la matriz de caminos para los siguientes grafos
2 3 4 5
1 2 3 1 2 3
5 2 4
2 2 1
2 10 2 5
4 5 6 4 1 1 4
4 2
1
a) b)
1 10
7 7 6 5
7. Use el procedimiento (2) del algoritmo de Floyd-Warshall para hallar la matriz de distancias mínimas
del siguiente grafo.
1
2 3 5
1
4 6
2 4 5
3 5 7
7 ÁRBOLES
Uno de los elementos de la teoría de grafos más ampliamente aplicados es el concepto de árbol,
el cual es muy usado al solucionar problemas de redes locales de comunicación.
Definición 7.1
Un grafo G conexo que no tenga ciclos es llamado un árbol.
Definición 7.2
Un grafo G = (N, A) es llamado un árbol si G es conexo y acíclico.
Desde el punto de vista de las relaciones en un conjunto finito de nodos, un árbol se puede definir de la
siguiente forma:
Definición 7.3
Sea N un conjunto finito de nodos (vértices) y T una relación en N . Se dice que T es un árbol si
existe un nodo v0 en N con la propiedad de que haya una trayectoria única en T de v0 a cualquier
otro vértice en N , pero ninguna trayectoria de v0 a v0
83
84 ÁRBOLES
Ejemplo 1
Los grafos de la figura 1 son árboles
b b b b
b b b b
b b b b b
b b b
Figura 1.
Ejercicio 1
Determinar cuáles de los grafos de la figura 2 son árboles
b b b b
b
b b b b b b b b
b b b b
b b
b b
b
b b
Figura 2.
Teorema 1
Los siguientes enunciados son equivalentes para un grafo G = (N, A) con n vértices y m aristas:
1. G es un árbol
2. Existe exactamente una trayectoria entre cualquier par de vértices en G
3. G es conexo y m = n − 1
4. G es conexo y removiendo cualquier arista, G deja de ser conexo
5. G es acíclico y m = n − 1
6. G es acíclico y adicionando alguna arista se crea un ciclo
Definición 7.4
Un vértice v de un digrafo se dice ser una raíz del digrafo si todos los vértices del mismo son
accesibles desde v
Definición 7.5
Un árbol con raíz (o árbol dirigido) es un digrafo tal que posee una raíz y su grafo asociado es un
árbol
El nivel donde terminan las aristas adyacentes a v0 se llaman vértices de nivel 1 y se considera que v0
está en el nivel 0. A v0 se le llama también antecesor o padre de los vértices del nivel 1 y a éstos se les
llama vástagos o descendientes de v0 . Recursivamente, los descendientes de v0 pueden ser designados
como raíces de los subárboles obtenidos al borrar la raíz del árbol original.
v1 v2 v3 nivel 1
v4 v5 v6 v7 v8 v9 nivel 2
Figura 3.
La relación antecesor vástago se mantiene entre los niveles, por ejemplo: v1 es antecesor de los vástagos
v4 , v5 y v3 es antecesor de los vástagos v7 , v8 , v9
Definición 7.6
El número de niveles de un árbol T se llama altura del árbol o nivel del árbol o profundidad del
árbol.
La anterior definición es equivalente a decir que la longitud de la trayectoria más larga desde la
raíz es la profundidad o nivel del árbol arraigado.
Definición 7.7
Los vértices de un árbol que no tengan vástagos se les llama hojas del árbol.
Ejemplo 2
En el árbol de la figura 3 las hojas son v4 , v5 , v6 , v7 , v8 , v9
Definición 7.8
La altura de un nodo en un árbol es la longitud de la trayectoria más larga desde ese nodo a cada
hoja. La profundidad de un nodo es la longitud de la trayectoria desde la raíz hasta ese nodo.
Cuando al construir un árbol se introducen los conceptos de relación y de niveles, se considera que el
árbol está siendo construido en forma orientada. (árbol orientado o dirigido).
Al dibujar el grafo dirigido de un árbol se puede introducir algún ordenamiento para cada nivel, arreglan-
do (numerando) los vástagos de izquierda a derecha. A un árbol de este tipo se le llama árbol ordenado.
El árbol de la figura 3 es un árbol ordenado.
Ejemplo 3
El siguiente árbol (figura 4) es ordenado según un orden alfabético
a
b c
d e f g
h i
7.2 Subárboles
Sea (T, v0 ) un árbol arraigado sobre el conjunto N de nodos. Sea v un vértice de T y B el conjunto que
consta de v y todos sus descendientes. B ⊆ N .
Definición 7.9
Un subárbol T (v) está compuesto por el nodo v y todos sus descendientes.
Ejemplo 4
El árbol siguiente es trinario no ordenado y de él se pueden sacar tres subárboles: T (v5 ), T (v4 ), T (v2 )
(figura 6)
v3
v5 v4 v2
v9 v6 v10 v7 v8
Figura 5.
v5 v4 v2
v9 v6 v10 v7 v8
T (v5 )
T (v4 ) T (v2 )
Figura 6.
Un concepto muy importante a tener en cuenta en el estudio de árboles es su clasificación según el número
de descendientes que posea cada nodo
Definición 7.10
Definición 7.11
Ejemplo 5
Los árboles de la figura 7 son binarios. El de la derecha es un árbol binario completo.
b b
b b
b b
b b b b
b b b
b b
b b b
Figura 7.
Definición 7.12
Un árbol binario se considera equilibrado o balanceado si al seleccionar uno cualquiera de sus
nodos, cada uno de los subárboles que penden de él tiene un número de nodos que no difiere en
más de uno, de los otros subárboles del nodo.
Un tipo de árbol muy usado al estructurar datos son los árboles parcialmente balanceados o árboles AVL
llamados así en honor a sus creadores, Adelson, Velskii y Landis.
Definición 7.13
Un árbol es parcialmente balanceado por altura o AVL cuando la diferencia de altura de
cualquiera de los subárboles que penden de un nodo del árbol no es mayor de uno.
Definición 7.14
Si T es un árbol con raíz y n es el mayor nivel de T , entonces T tiene altura n y T es balanceado
si el nivel del cualquier hoja es n o n − 1.
Ejemplo 6
El siguiente árbol no es un árbol AVL
b
b b
b b b b
b b b b
b b
Figura 8.
Teorema 2
Prueba
La prueba se hace por inducción sobre h. Como la raíz es el único vértice en el nivel cero,
entonces existen 2 o cero vértices adyacentes a la raíz y estos están en el nivel 1.
Asúmase que no hay más de 2k vértices en el nivel k. Considérese el nivel k + 1. Cada vértice
en este nivel debe ser adyacente a un sólo vértice en el nivel k. Como cada vértice en el nivel k
tiene grado 1 ó 3 entonces él es adyacente a cero o 2 vértices en el nivel k + 1. Luego, el número
de vértices en el nivel k + 1 no puede ser mayor de 2 veces el número de vértices en el nivel k.
Si Nk = número de vértices en el nivel k, entonces:
Nk+1 ≤ 2Nk ≤ 2 2k = 2k+1
Corolario
Un árbol binario completo de altura h tiene como máximo 2h+1 − 1 vértices
Prueba
Por el teorema anterior se sabe que en el nivel k hay como máximo 2k vértices. Así, el número
total de vértices en el árbol es a lo máximo
1 − 2h+1
1 + 2 + 4 + . . . + 2k + . . . + 2h = = 2h+1 − 1
1−2
Un árbol específico se puede usar para modelar un problema o para usarlo para un propósito particular;
para tal efecto conviene etiquetar los vértices o las aristas y así poder usar más fácilmente las propiedades
de los árboles en la computación.
Una de las aplicaciones más simples de los árboles etiquetados es usarlos para representar expresiones
algebraicas.
Ejemplo 7
La expresión algebraica:
(7 − (5 × y)) + ((y + 3) − (8 − y))
se puede representar mediante el árbol etiquetado de la figura 9
− −
7 × + −
5 y y 3 8 y
Figura 9.
Se etiqueta el nodo raíz con el operador central (+), los dos vástagos de la raíz se etiquetan con los
operadores centrales de las expresiones de argumentos izquierdo y derecho. Si algún argumento es una
constante o una variable y no una expresión, se etiqueta el vástago correspondiente con dicha constante
o variable.
Ejemplo 8
El árbol de la figura 10 representa la expresión:
Sea (T, v0 ) un árbol n-ario. Cada vértice tiene como máximo n vástagos. Suponiendo que cada vértice
tiene exactamente n vástagos que se pueden ordenar del 1 al n. Si alguno de los vástagos en la suce-
sión se elimina o no aparece, los restantes se etiquetarán con la posición que ocuparían en la sucesión
hipotética; por lo tanto los vástagos de cualquier vértice estarán etiquetados con números distintos 1, 2, . . .
− ×
x − ÷ 7
y + 3 ×
x y 2 y
Figura 10.
Ejemplo 9
El árbol de la figura 11 es 3-ario posicional.
1 3
1 2 1 2 3
1 3 1 2 3
1 2 3 1 2 3
Figura 11.
Cuando se trata de un árbol binario, las posiciones de los vástagos potenciales se acostumbra etiquetarlas
como Izquierdo (I) y derecho (D), ver figura12.
A. Caicedo B., G. Wagner de G., R. M. Méndez
Otras Formas de Árboles Ordenados 91
Definición 7.15
Sea T un árbol binario posicional con raíz v. Si vI existe, al subárbol T (vI ) se le llama subárbol
izquierdo de T , y si vD existe, al subárbol T (vD ) se le llama subárbol derecho de T
T (vI ) es también un árbol binario posicional con raíz en vI , y T (vD ) es un árbol binario
posicional con raíz en vD
I D
I D D
D D I D
I I
Figura 12.
1
b b b
2 3
b b b b b b b b b
a b
b b
b b b b b b b b
a.a.a a.a.b a.b.a a.b.b b.a.a b.a.b b.b.a b.b.b
Figura 14.
0 1
b b
b b b b b b b b
Para facilitar su programación mediante un lenguaje de computación, los árboles binarios se pueden
representar mediante arreglos matriciales o mediante listas encadenadas. En esta sección se hará una
introducción a la representación matricial.
Ejemplo 10
En la figura 16 se muestra un árbol binario no posicional y su correspondiente representación matricial
i hijoizq hijoder
1 2 6 1
2 3 4
3 0 0
2 6
4 0 5
5 0 0
6 7 8 3 4 7 8
7 0 0
8 0 9
9 0 0 5 9
Figura 16.
Ejemplo 11
La figura 17 muestra un árbol binario etiquetado y su correspondiente representación matricial
1 ×
i hijoizq dato hijoder
1 2 × 3
2 4 − 5
3 6 − 7 − 2 3 −
4 0 a 0
5 0 b 0
6 0 c 0
7 8 ÷ 9 a b c ÷
8 0 d 0 4 5 6 7
9 0 e 0 8 9
d e
Figura 17.
Si T es un árbol binario completo o casi completo, entonces una forma eficiente de mantener a T en
memoria es mediante una representación secuencial o arreglo lineal T , establecido de la siguiente forma:
b. Si un nodo n está en T [k] entonces su vástago izquierdo está en T [2 ∗ k] y su vástago derecho está
en T [2 ∗ k + 1]
c. Si un subárbol es vacío se representa con NULO. T [1] = N U LO indica que el árbol está vacío.
Ejemplo 12
Para el árbol de la figura 18 la representación secuencial se muestra en la tabla siguiente
I 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...
T [I] 60 31 70 10 40 − 100 − 14 20 − − − 80 ...
1
31 60
2 3
40 70
4 5 7
10 100
14 20 80
9 19 14
Figura 18.
Un árbol binario también se puede mantener en memoria mediante una representación enlazada de 3
arreglos paralelos que se pueden llamar IZG, DAT O, DER y una variable puntero llamada RAIZ que
contendrá la posición de la raíz R de T .
Una representación que haga uso de estos tres conceptos se llama una lista doblemente enlazada
o doblemente ligada en donde la unidad de almacenamiento es la célula que contiene un dato y los dos
apuntadores. Simbólicamente una célula se representa con la figura 15.
b
DAT O b
Figura 19.
Cada célula corresponde a un nodo; la parte del dato contiene el valor de la etiqueta del nodo. Los apun-
tadores izquierdo y derecho se dirigen a los vástagos izquierdo y derecho, si es que existen. Si un vástago
no existe el apuntador se simboliza con b
Ejemplo 13
Para el árbol de la figura 20a, la representación simbólica como una lista doblemente enlazada es el
esquema de la figura 20b, y la implementación de esa lista mediante tres arreglos se muestra en la
tabla 1.
a
1) b
Inicio b
b
2) b
a b
e c
3) b
b b b
c b b
d b
4) 5)
f d
6) b
e b b
f b b g b
7) 8)
g
a) Figura 20.
b)
Para que un árbol A general pueda ser representado por cualquiera de los anteriores métodos, debe ser
convertido primero en árbol binario B.
Algoritmo de Conversión
b. Enlazar el nodo raíz con el camino que conecta el nodo más a la izquierda
c. Enlazar este nodo con los restantes descendientes del nodo raíz en un camino, formándose así el
nivel 1 del nuevo árbol
d. Repetir los pasos 2 y 3 con los nodos del nivel 2 de A, enlazando siempre en un solo camino todos
los hermanos. Repetir todos estos pasos hasta llegar al nivel más alto
e. Girar el árbol resultante aproximadamente 30o a la derecha para poder diferenciar entre los subár-
boles izquierdo y derecho de B
Ejemplo 14
La figura 21 muestra un árbol general y el correspondiente árbol binario obtenido al aplicar el
algoritmo anterior.
a a
b
b c d e c
f d
e f g h i j g h
k i
k l l j
Figura 21.
Existen problemas de la estructuración de datos donde es necesario examinar cada vértice de un árbol una
sola vez, en un orden específico. El proceso de visitar cada vértice de un árbol en algún orden especial
se llama recorrer, atravesar o analizar el árbol. Existen tres formas de recorrer un árbol binario
posicional: recorrido pre-orden, recorrido in-orden y recorrido post-orden. Las subrutinas para cada uno
de estos recorridos se muestran a continuación, en forma de seudocódigo.
A. Recorrido pre-orden o anterior o jerárquico
Subrutina Anterior(T ,v)
1. Visitar raíz (v)
2. Si vI existe llamar Anterior(T (vI ),vi )
3. Si vD existe llamar Anterior(T (vD ),vD )
Fin subrutina
B. Recorrido in-orden o interior o simétrico
Subrutina Interior(T ,v)
1. Si vi existe llamar Interior(T (vi ),vi )
2. Visitar raíz (v)
3. Si vD existe llamar Interior(T (vD ),vD )
Fin subrutina
C. Recorrido post-orden o posterior
Subrutina Posterior(T ,v)
1. Si vi existe llamar Posterior(T (vi ),vi )
2. Si vD existe llamar Posterior(T (vD ),vD )
3. Visitar raíz (v)
Fin subrutina
De estas tres formas de recorrer un árbol binario, la más usual y práctica es el recorrido in-orden, el cual
se puede describir en la siguiente forma:
Para cada vértice en el árbol, comenzando por la raíz, imprima todos los elementos del subárbol izquier-
do, comenzando por la hoja izquierda. Luego imprima el vértice. Después imprima todos los vértices del
subárbol derecho del vértice, empezando por la hoja derecha.
Ejemplo 15
Aplicar el recorrido in-orden al árbol de la figura 22
K
B T
A L Z
Figura 22.
Considerando K como la raíz del árbol, iniciamos el recorrido por el subárbol izquierdo, visitando los
nodos K, B, A. Bajamos hasta la hoja izquierda A e imprimimos su valor (A). Visitamos la raíz del
subárbol e imprimimos su valor (B); como no existe rama derecha para este subárbol, continuamos
el recorrido y visitamos la raíz del árbol (K). Efectuamos el mismo proceso para el subárbol derecho.
El recorrido efectuado se muestra en la figura 22 con líneas punteadas. Siguiendo este recorrido se
obtiene: A, B, K, L, N, R, T, Z
Otra forma de visualizar este proceso es encerrar todos y cada uno de los subárboles en cajas y empezar a
imprimir lo que esté contenido en cada uno de ellas, a partir de las cajas más internas. Se analiza primero
el subárbol izquierdo y luego el derecho.
Ejemplo 16
Recorrer el árbol de la figura 23 en in-orden aplicando la metodología de encerrar los subárboles en
cajas
÷
− ×
x y 2 −
2 3 5
1 x +
7
y 20
9 10
8
6
4
Figura 23.
Haciendo el recorrido se obtiene:
Ejemplo 17
Ejecutar los recorridos PRE-ORDEN, IN-ORDEN y POST-ORDEN al siguiente árbol
r
a b
c d e f
g h i
Figura 24.
= r, a, Tc , Td , Tb r
= r, a, c, d, Tg , Th , Ti , Tb a b
= r, a, c, d, g, h, i, b, Te , Tf c d e f
= r, a, c, d, g, h, i, b, e, f g h i
Figura 25.
Nota: la línea punteada indica el sentido del recorrido. La cabeza de flecha indica que se lee dicho
nodo. La raíz se lee de primero.
El recorrido pre-orden también es llamado recorrido RAICES-HOJAS porque para cada subarbol
primero se lee la raíz y luego las hojas
= Tc , a, Td , r, Tb r
= c, a, Tg , d, Th , Ti , r, Tb a b
= c, a, g, d, h, i, r, Te , b, Tf c d e f
= c, a, g, d, h, i, r, e, b, f g h i
Figura 26.
Tr = Ta , Tb , r
= Tc , Td , a, Tb , r r
= c, Tg , Th , Ti , d, a, Tb , r a b
= c, g, h, i, d, a, Te , Tf , b, r c d e f
= c, g, h, i, d, a, e, f, b, r g h i
Figura 27.
En la sección anterior vimos que los recorridos en preorden, inorden y postorden producen formas de
listas de los nodos de un árbol enraizado ordenado. Si se etiquetan los nodos en forma tal que el árbol
represente o contenga una expresión algebraica, las listas obtenidas en cada recorrido se llama notación
polaca de la expresión algebraica.
Cuando el árbol representa una expresión algebraica, el recorrido inorden produce la expresión alge-
braica, pero es indispensable que cada vez que se recorra un subárbol se agrupe su contenido por medio
de paréntesis o corchetes para que no se presenten ambiguedades al evaluar numéricamente la expresión.
Cuando el recorrido ha sido preorden y postorden las listas no necesitan los signos de agrupamiento
porque estos listados determinan de manera única el árbol y por lo tanto a la expresión algebraica origi-
nal. Estas notaciones no son ambiguas sin paréntesis.
Al evaluar las expresiones en notación polaca se lee la expresión de izquierda a derecha, buscando cadenas
de la forma:
Ejemplo 18
La expresión algebraica [(x + (a ÷ b)) − y] ÷ [((a ÷ (b + x)) − y) × x] da origen al siguiente árbol
binario
A. Caicedo B., G. Wagner de G., R. M. Méndez
100 ÁRBOLES
− ×
+ y − x
x ÷ ÷ y
a b a +
b x
Figura 28.
Postorden (x y F )
3 10 2 ÷ + 4 − 10 2 3 + ÷ 4 − 3 × ÷
| {z } | {z }
3 5 + 4 − 10 5 ÷ 4 − 3 × ÷
| {z } | {z }
8 4 − 2 4 − 3 × ÷
| {z } | {z }
4 (−2) 3 × ÷
| {z }
4 (−6) ÷
| {z }
4/(−6) = −2/3
Una de las estructuras de datos más usadas en la programación es la búsqueda binaria dentro de un
arreglo de datos. Esta estructura se puede modelar fácilmente mediante un árbol binario de búsqueda, el
cual permite ordenar arreglos, buscar un elemento determinado del arreglo e insertar un elemento dentro
del arreglo.
Ejemplo 19
Sea A = {8, 45, 19, 50, 25, 30, 56, 48, 80} un arreglo. El árbol de la figura 29 es un árbol binario de
búsqueda para A.
45
< >
19 50
< > >
8 25 56
> < >
30 48 80
Figura 29.
Búsqueda:
Para proceder a buscar un elemento k en el árbol binario se procede mediante el siguiente algoritmo:
Algoritmo de Búsqueda, inserción y ordenamiento
Supóngase que k es un ítem de información dado. N es cualquier valor del arreglo.
paso 0. Construir un árbol binario de búsqueda. Hacer el nodo raíz igual a N
paso 1. a) Si k < N proceder con el hijo izquierdo de N
b) Si k > N proceder con el hijo derecho de N
paso 2. Repetir paso 1 hasta que se cumpla una de las siguientes condiciones:
a) Se encuentra un nodo N tal que k = N . Se termina la búsqueda.
b) Se encuentra un subárbol vacío, lo que indica que la búsqueda ha fallado.
Se inserta k en el lugar del subárbol vacío.
paso 3. Se recorre el árbol In-orden para hallar la lista ordenada
En otras palabras lo que se hace es iniciar la búsqueda a partir de la raíz R del árbol y se desciende por
uno de sus subárboles hasta que se logré encontrar a k.
Ejemplo 20
Dado el árbol de búsqueda de la figura 30, ubicar el elemento k = 20 en el arreglo A =
{17, 8, 38, 40, 26, 19, 35, 52, 45}
35
17 40
8 26 38 52
19 45
Figura 30.
paso 1 y 2.
a. Se compara k = 20 con la raíz N = 35. Como 20 < 35 se procede con el hijo izquierdo de
35 que es 17
b. Se compara k = 20 con 17. Como 20 > 17 se procede con el hijo derecho de 17 que es 26
c. Se compara k = 20 con 26. Como 20 < 26 se procede con el hijo izquierdo de 26 que es 19
d. Se compara k = 20 con 19. Como 20 > 19 se procede con el hijo derecho de 19, pero 19
no tiene hijo derecho. No se puede encontar el número buscado. Se inserta k = 20 como
hijo derecho de 19. El nuevo árbol con k = 20 insertado es:
35
17 40
8 26 38 52
19 45
20
Figura 31.
paso 3. Se recorre el árbol en In-orden y se obtiene A = {8, 17, 19, 20, 26, 35, 38, 45, 52}
Ordenamiento:
Para realizar un ordenamiento usando un árbol binario, existen diversos métodos, entre ellos los más
conocidos son el método de FOSTER y el método de FLOYD, siendo el de Foster el más fácil de
aplicar.
Algoritmo de Foster
paso 1. Se forma un árbol binario AVL de acuerdo con las siguientes normas:
a) El primer elemento del arreglo se usa como nodo de la raíz del árbol.
b) Cualquier nuevo elemento se compara con la raíz, en forma recursiva, hasta encontrar su posición
en el árbol
c) Si el elemento es menor o igual a la raíz, se coloca en el subárbol izquierdo
d) Si el elemento es mayor que la raíz se coloca en el subárbol derecho
e) Para cualquier nodo, todos los valores del subárbol izquierdo del nodo son menores o iguales al
valor del nodo. Todos los valores del subárbol derecho deben ser mayores que el valor del nodo
f) Si el árbol está sesgado se pueden usar algoritmos de balanceo para corregirlo.
paso 2. Se recorre el árbol en in-orden para obtener la lista ordenada de los elementos del arreglo.
Ejemplo 21
Dado el arreglo {D, F, E, B, A, C, G} al aplicarle el algoritmo de Foster se obtiene el árbol de búsque-
da de la figura 32.
D
B F
A C E G
Figura 32.
Se escoge D como raíz. Se ubica F en el subárbol derecho porque F > D; se ubica E en el subárbol
izquierdo de F porque E < F . Se ubica B en el subárbol izquierdo de D porque B < D. Se ubica A
en el subárbol izquierdo de B porque A < B. Se ubica C en el subárbol derecho de B porque C > B.
Se ubica G en el subárbol derecho de F porque G > F
Ejercicios Capítulo 7
b b b
b
b b b
b b
b b b
b b b b b b
Figura 33.
b c d
e f
g h i
Figura 34.
c. Para el árbol de la figura 34 establecer: a) su altura o profundidad; b) cuáles son sus hojas y c) la
altura de los nodos a, b y c
b b
b b b b
b b
Figura 35.
(3 + (x − y) ÷ 8) − (6 − y) + ((3 × y − 5) − 9 × x)
− ÷
+ ×
× 1
6 − 3 −
3 +
3 + x y
5 x x y
Figura 36.
x × a
y z
− 2 b d
s t
+ 1 c i k e
u
v 2 3 g h j f
a) b) Figura 37.
c)
ñ. Representar en forma de listas enlazadas los tres árboles del ejercicio anterior
o. Convertir en binario el árbol de la figura 38
a
b c d
e f g h i
j k l
Figura 38.
e) ÷ × 2 + 2 5 ↑ + 3 4 2
a) 3 3 4 5 1 − × + +
b) 3 3 + 4 + 5 × 1 −
c) 3 3 4 + 5 × 1 − +
d) 6 3 ÷ 3 + 7 3 − ×
e) 3 2 ↑ 4 2 ↑ + 5 ÷ 2 ×
a) (5x + 9)3
b) (x + 2y)/(x − 2y)
c) (a − b) × (c + (d ÷ e))
s. Construir el árbol de búsqueda para el siguiente arreglo: {35, 20, −12, 40, 60, 18, 38, 26}
8
Ca
ÁRBOLES NO DIRIGIDOS
Definición 8.1
Un árbol no dirigido es aquel en el que todas las aristas son bidireccionales, no posee un nodo raíz
específico y no se analiza teniendo en cuenta niveles de ubicación de sus nodos
Ejemplo 1
Los dos árboles de la figura 1 son no dirigidos
b b
b b
b b
b b b
Figura 1.
Un árbol no dirigido sigue siendo un grafo conexo sin ciclos pero con la propiedad de que corresponde a
una relación simétrica puesto que si a y b son dos nodos del árbol y existe la arista (a, b) entonces también
existe la arista (b, a).
Los siguientes teoremas ayudan a comprender el vínculo que hay entre relación simétrica y árbol no
dirigido
107
108 ÁRBOLES NO DIRIGIDOS
Teorema 1
Si ℜ es una relación simétrica en un conjunto N entonces los siguientes enunciados son equivalentes:
b. ℜ es conexa y acíclica
Nota: Una relación simétrica ℜ es conexa si existe una trayectoria en ℜ desde cualquier nodo a
cualquier otro nodo.
Teorema 2
Sea ℜ una relación simétrica en N . Entonces ℜ es un árbol no dirigido si y sólo si cualquiera de los
siguientes enunciados es verdadero
Definición 8.2
Si ℜ es una relación simétrica conexa en un conjunto N , se dice que un árbol T en N es un árbol
generado por ℜ si T ⊆ ℜ
En otras palabras, un árbol generado T es un árbol con exactamente los mismos nodos que ℜ y que se
puede obtener de ℜ al suprimir algunas aristas hasta que ℜ quede sin ciclos y siga siendo conexa.
Un árbol generado a partir de un grafo G también es llamado árbol expansor de G o árbol ge-
nerador de G o árbol de comunicación de G porque hace que todos los nodos del grafo G queden
intercomunicados entre sí.
Teorema 3
Para verificar que un grafo conexo contiene un árbol generador se pueden seguir dos metodologías dife-
rentes:
Primera: comenzar con un grafo conexo y remover arcos sucesivamente en forma tal que en cada etapa
A. Caicedo B., G. Wagner de G., R. M. Méndez
Árbol Generador de Mínimo Peso 109
el subgrafo resultante sea conexo. Eventualmente al borrar algún arco el subgrafo se desconecta. Por el
enunciado b) del teorema 2, el subgrafo que se tiene hasta el momento es un árbol generador. Este árbol
tendrá n − 1 arcos, donde n es el número de nodos del grafo original.
Segunda: Esta segunda forma de trabajar es totalmente opuesta a la primera. Se comienza suponiendo
un árbol vacío, sin arcos, y se adiciona luego un arco cada vez, teniendo en cuenta que el arco adicionado
no forme un ciclo con los anteriores. Eventualmente la adición de un arco más creará un ciclo. El grafo
construido hasta ese paso será un árbol.
Ejemplo 2
En la figura 2 se muestra una secuencia gráfica de los pasos seguidos para obtener un árbol generador
a partir de un grafo dado, aplicando la primera metodología.
b b b
b b b b b b b b b
b b b b b b
b b
b b b b b b
b b b b
Figura 2.
Algoritmo Arbolgen
paso 0. Entrar el grafo G con n nodos y m arcos: a1 , a2 , . . . , am
paso 1. Hacer T = {N, ∅}
paso 2. Para i = 1 hasta n hacer
a) Adicionar el arco ai al árbol T si él no crea un ciclo con arcos que ya existan en T
b) Si T contiene n−1 arcos, imprimir T como el árbol generador y PARAR. En caso contrario
declarar que G no contiene un árbol generador y PARAR.
Definición 8.3
Un grafo G con una función w = A(G) → R+ es llamado un grafo pesado. Si a es un arco en
A(G) entonces w(a) será el peso de a
Por lo general los valores asignados a los arcos representan costos, capacidad, longitud o algún otro
parámetro de interés en la vida real.
Definición 8.4
Sea G un grafo conexo. Un árbol generador de G de mínimo peso es un árbol no dirigido tal que la
trayectoria única que une cualquier par de nodos es de mímino valor
Cuando se tiene un grafo conexo pesado, es de mucha utilidad determinar cuál es el árbol generador de
mínimo peso, puesto que con él queda determinada la forma de intercomunicar todos los nodos del grafo
con el mínimo costo o la mínima distancia, etc. Una aplicación típica ocurre en el diseño de redes de
comunicación donde los nodos representan ciudades y las aristas son las posibles líneas de comunicación
entre las ciudades. El valor asociado a cada arco representa el costo de seleccionar esa línea para la red.
Se han diseñado diversos algoritmos que hallan el árbol generador de mínimo peso, entre ellos se destacan
el de Sollin, el de Kruskal y el de Prim, siendo el más conocido el de Kruskal que fue presentado en
1956. Este problema de hallar el árbol de mínimo peso ya había sido estudiado por otros matemáticos
anteriores a los ya citados, como es el caso del ingeniero electricista ruso Otakar Boruvka quien formuló
un algoritmo bastante eficiente cuando enfrentó el trabajo de la electrificación del sureste de Moravia en
1928.
Supóngase N = {1, 2, 3, . . . , n}. El algoritmo de Prim comienza con un conjunto U inicializado con
cualquier nodo, por ejemplo {1}. Luego se hace crecer un árbol generador, arco por arco. En cada paso
se encuentra el arco más corto (u, v) que conecta a U y N − U y luego se adiciona v, el nodo en N − U ,
a U . Se repite este paso hasta que U = N .
Algoritmo de Prim
paso 0. Iniciar el grafo T con un solo nodo i escogido al azar. N = {i}, A = ∅, T = ({i}, ∅)
paso 1. Seleccionar el arco (i, j) cuya longitud es la menor entre todos aquellos arcos adyacentes a T .
Adicionar este arco (i, j) a T y j al conjunto de nodos de T
paso 2. Preguntar si T ya es un árbol que contiene todos los nodos de G y detenerse. En caso contrario
repetir el paso 1.
Ejemplo 3
Aplicar el algoritmo de Prim para hallar el árbol de mímino peso a partir del grafo de la figura 3.
a b c
10 6
8
7 14
20 d 16
17
e
Figura 3.
Solución
Supóngase que se tiene un grafo pesado G = (N, A) con N = {1, 2, . . . , n} nodos. Se inicia con T = (N, ∅)
consistente de n nodos y sin arcos. Cada nodo es una componente conexa de sí mismo. Cuando el al-
goritmo procede siempre se tendrá una colección de componentes conexas y para cada componente se
seleccionarán aristas que formen un árbol. Para construir progresivamente las componentes se examinan
los arcos de A en orden creciente de peso. Si el arco conecta dos nodos en dos componentes diferentes,
entonces el arco se adiciona a T . Si conecta dos nodos en la misma componente se descarta pues podría
causar un ciclo. Cuando todos los nodos estén en una componente, T será el árbol generador de mínimo
peso.
Algoritmo de Kruskal
paso 0. Iniciar T con n nodos y sin arcos. T = {1, 2, . . . , ∅}.
paso 1. Crear una lista L de arcos, desde G, en orden ascendente de peso. Los arcos con el mismo
peso son ordenados arbitrariamente.
paso 2. Seleccionar el arco (i, j) del comienzo de L. Si este arco forma un circuito en T se borra de L
y se repite el paso 2; en caso contrario se transfiere de L a T .
paso 3. Si T es un árbol, PARAR; en caso contrario repetir el paso 2.
Ejemplo 4
Aplicar el algritmo de Kruskal para hallar el árbol generador de mínimo peso al grafo de la figura 4.
5
1 2
8 10
10 3
7 4
5 4
6
Figura 4.
Solución
paso 0. Iniciar el árbol con los nodos de G y sin arcos. T = ({1, 2, 3, 4, 5}, ∅)
paso 1. L = {(3, 4)(1, 2)(4, 5)(3, 5)(1, 3)(1, 5)(2, 3)}
paso 2. El arco (3, 4) se pasa de L a T , entonces
L = {(1, 2)(4, 5)(3, 5)(1, 3)(1, 5)(2, 3)}. T = ({1, 2, 3, 4, 5}, {(3, 4)})
paso 3. T no es un árbol de G. Repetir paso 2.
paso 2. El arco (1, 2) se pasa de L a T , entonces
L = {(4, 5)(3, 5)(1, 3)(1, 5)(2, 3)}. T = ({1, 2, 3, 4, 5}, {(3, 4)(1, 2)}). El arco (1, 2) no
forma un círculo en T
paso 3. T no es un árbol de G. Repetir paso 2
paso 2. El arco (4, 5) se pasa de L a T , entonces
L = {(3, 5)(1, 3)(1, 5)(2, 3)}. T = ({1, 2, 3, 4, 5}, {(3, 4)(1, 2)(4, 5)})
paso 3. T no es un árbol de G. Repetir paso 2
paso 2. El arco (3, 5) no se puede pasar de L a T porque forma un ciclo con arcos que ya están
en T . El arco (3, 5) se borrar de L. El arco (1, 3) se pasa de L a T , entonces:
L = {(1, 5)(2, 3)}. T = ({1, 2, 3, 4, 5}, {(3, 4)(1, 2)(4, 5)(1, 3)}). El arco (1, 3) no forma
un ciclo en T
paso 3. T ya es un árbol de G, porque todos los nodos de G están interconectados. Parar
El árbol recubridor de mínimo peso es:
5
1 2
6
5 4
Figura 5.
En un grafo pesado conexo G la distancia entre dos nodos cualquiera x e y se denota por d(x, y) y es
el mínimo valor de w(P ) tomado sobre todas las trayectorias P desde x a y, w(P ) es el peso de una
trayectoria P y es la suma de los pesos de todas las aristas de P . w(P ) también es llamada la longitud
de la trayectoria P .
En un árbol generador también se puede fijar un nodo como nodo origen y hablar entonces de dis-
tancias entre ese nodo y cualquier otro nodo.
Definición 8.5
Un árbol generador de mínima distancia con nodo origen r es un árbol T que contiene una trayectoria
de mínima distancia desde r a cada nodo.
Definición 8.6
Un árbol generador de mínimo peso en un grafo conexo G con nodo origen r, es un árbol T tal que
para cada nodo v de G, la longitud de la trayectoria única en T desde r a v es igual a d(r, v)
Ejemplo 5
El árbol a) de la figura 6 es un árbol de mínima distancia y el árbol b) es un árbol de mínimo peso,
generados a partir del grafo G.
r 8 6
2 3
4 9 5
7 9 7
7
8 3
4 5 6
G
r 8 r 8 5
2 3 2 3
4 5 4
7
3 8 3
4 5 6 4 5 6
a) b)
Figura 6.
deben tener en cuenta para formar el árbol de comunicación. El algoritmo propuesto por E.W. Dijkstra,
que se presenta a continuación, es muy adecuado para este tipo de problema.
Algoritmo de Dijkstra
paso 0. Verificar que G es un grafo conexo
paso 1. Entrar el grafo pesado G y establecer un nodo r como nodo origen
paso 2. Hacer T = {r}
paso 3. Para i=1 hasta N-1 hacer
begin
paso 4. Econtrar z un nodo en G − T cuya distancia desde r sea mínima. Sea e un arco
desde z a un nodo de T y que esté en alguna trayectoria de distancia mínima
desde z a r.
paso 5. Adicionar e a los arcos de T
Adicionar z a los nodos de T
Hacer T = (N (T ), A(T ))
end
paso 6. Imprimir T y PARAR.
Ejemplo 6
Aplicar el algoritmo de Dijkstra al grafo de la figura 7 a) para obtener el grafo generador de mínima
distancia, considerando el nodo r como nodo origen.
r r
2 4 2 4
x s x s
3 3 3 3 3
5
u v 1 w u v 1 w
paso i z N (T ) e A(T )
2 r
4 1 x (r, x)
5 1 x {r, x} {(r, x)}
4 2 s (r, s)
5 2 s {r, x, s} {(r, x)(r, s)}
4 3 u (x, u)
5 3 u {r, x, s, u} {(r, x)(r, s)(x, u)}
4 4 v (x, v)
5 4 v {r, x, s, u, v} {(r, x)(r, s)(x, u)(x, v)}
4 5 w (v, w)
5 5 v {r, x, s, u, v, w} {(r, x)(r, s)(x, u)(x, v)(v, w)}
Ejemplo 7
Aplicar el algoritmo de Dijkstra al grafo de la figura 8 a) para obtener el árbol generador de mínima
distancia que se muestra en la figura 8 b). Usar el nodo a como nodo raíz
a 5 3 c 4 a 5 3 c 4
b d b d
4 3 e 6 2 4 e 2
2 2
f 5 g f 5 g
h h
a) b)
Figura 8.
Ejercicios Capítulo 8
a. Aplicar el algoritmo de remover aristas para hallar un árbol generador en cada uno de los grafos de
la figura 9.
b b b b
b b b b b b
b b b b b
Figura 9.
b. Para el grafo de la figura 10 hallar gráficamente los 16 árboles generadores distintos que posee.
b
b b
Figura 10.
c. Aplicar el algoritmo de Kruskal para hallar el árbol generador de valor mínimo en cada uno de los
grafos de la figura 11.
a 4 7 c a 8 11 c
b b
6 8
3 10
3 2 6 1 5 e 12
12
d 10 9
11
9 e 8 f f g
d
a 2 3
2
1 b
c 2 20 8 10 15 11
4
1 d
2 e 5 7 7
3 1 4 5 6
f 2
5
g 12 15
10 9
6
6 h
i 7
10
j Figura 11.
d. Aplicar el algoritmo de Prim para hallar el árbol generador de valor mínimo en cada uno de los
grafos de la figura 11.
e. Aplicar el algoritmo de Dijkstra para hallar un árbol generador de mínima distancia para cada uno
de los grafos de la figura 12. Considérese el nodo 1 como nodo raíz.
A. Caicedo B., G. Wagner de G., R. M. Méndez
Algoritmo de Dijkstra (Árbol de mínima distancia) 117
5 3 4 4
1 2 3 4 1 2
9 7 11
4 5
3 5 6 2 4 4 5
2
2
5
6 7 8 3
Figura 12.
f. Dada la matriz de costos C, donde cij es el costo de tender una línea de transmisión de energía
entre las ciudades xi y xj , encontrar la red de transmisión de costo mínimo.
x1 x2 x3 x4 x5 x6 x7 x8
x1 − 5 − 4 7 6 6 −
−
x2 − 7 8 − − − −
−
x3 − − 2 9 8 7 −
M= −
x4 − − − 5 − 5 −
−
x5 − − − − 4 9 5
−
x6 − − − − − 7 8
x7 − − − − − − − 8
x8 − − − − − − − −
g. Una empresa constructora se encuentra realizando 3 obras que requieren ciertas cantidades de
cemento y se dispone de 2 fábricas que pueden satisfacer estas necesidades. Existe comunicación
entre las dos fábricas y las 3 obras. El costo cij = cji de transportar una unidad (tonelada) de
cemento del lugar i al j se muestra sobre los arcos del grafo de la figura 13.
2
7
6
1 9
8 3 5
5
5 4
4
Figura 13.
7 2 9 3 4
p 4 q 3
t 5
Figura 14.
[1] Garnier R. y John T. Discrete Mathematics. Adam Hilger. Editorial Philadelphia 1992.
[2] Grassmann W. y Jean- Paul T. Matemática Discreta y Lógica. Editorial Prentice Hall. España 1996.
[3] Brassard y Bratley P. Fundamentos de Algoritmia. Editorial Prentice Hall. España 1997.
[4] Gorcbátov V. A. Fundamentos de Matemática Discreta. Editorial Mir Moscú. URSS 1988.
[5] Skvarcius y Robinson. Discrete Mathematics whit Computer Sciencie Applications. Editorial Benjamin
Diummings. California 1986.
[6] Ross K. A. Y Charles R.B. Matemáticas Discretas. Prentice Hall. México 1988.
[7] Kolman B, Robert C. y Sharon R. Estructuras de Matemáticas Discretas para la Computación. Pren-
tice Hall. México 1997.
[13] Aho A, John E. H. y Jeffrey D. U. The Desing and Analysis of Computer Algorithms. Editorial
Addison Wesley. USA 1974.
[14] Tenenbaum A. y Moshe J. A. Estructura de Datos en Pascal. Editorial Prentice Hall. Colombia 1983.
[15] Aho A, John E. H. y Jeffrey D. U. Estructura de Datos y Algoritmos. Editorial Addison Wesley.
USA 1988.
[16] Jauffred F. y otros. Métodos de Optimización. Centro Regional de ayuda técnica, agencia para el
desarrollo internacional. México 1971.
[18] Phillips D.T. y Alberto G.D. Fundamentals of Network Analysis. Editorial Prentice Hall. USA
1981.bur Me
[19] Minieka E. Optimization Algorithms for Networks and graphs. Editorial Marcel Dekker. New York
[20] Bazaraa M. y John J.J. Programación lineal y flujo en redes. Editorial Limusa. México 1981
119