INTRODUCCIÓN A LA
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
[email protected] Cel: 3113340748 Armenia, Quindío
Contenido PRÓLOGO
ii i
1. GRAFOS 1.1. Conceptos Básicos . . . . . . . . . . 1.2. Representación de un Grafo . . . . . 1.3. Matriz de Adyacencias de un Grafo . 1.4. Lista de Adyacencias . . . . . . . . . 1.5. Coeficiente de estabilidad . . . . . .
. . . . .
1 1 8 9 11 12
. . . . . . . .
17 17 18 19 19 22 25 28 33
3. CONEXIDAD 3.1. Grafo Conexo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. Algoritmo para Conexidad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3. Algoritmo para Grafos no Dirigidos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
39 39 40 42
4. CIRCUITO EULERIANO 4.1. Circuito de Euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.1.1. Puentes de Königsberg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Algoritmo de Euler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45 45 45 48
5. CICLO HAMILTONIANO 5.1. Ciclo de Hamilton . . . . . . . . . 5.2. Algoritmo Hamiciclo . . . . . . . . 5.3. Problema del Agente Viajero . . . 5.4. Algoritmo del Vecino más Cercano
. . . .
53 53 54 55 56
. . . . . . .
61 62 62 63 64 66 73 76
2. RELACIONES Y GRAFOS 2.1. Relaciones . . . . . . . . . . . 2.2. Matriz de una Relación . . . 2.3. Gráfica de una Relación ℜ . . 2.4. Propiedades de una Relación 2.5. Operaciones entre Relaciones 2.6. Producto Lógico de Matrices 2.7. Trayectorias y Relaciones . . 2.8. Algoritmo de Warshall . . . .
6. LA 6.1. 6.2. 6.3. 6.4. 6.5. 6.6. 6.7.
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . .
TRAYECTORIA MÁS CORTA Trayectoria Mínima . . . . . . . . . . Algoritmo del Camino Mínimo . . . Trayectoria del Valor Mínimo . . . . Algoritmo de DIJKSTRA . . . . . . Algoritmo de Floyd-Warshall . . . . Algoritmo Matricial . . . . . . . . . La Trayectoria Óptima . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . i
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . .
ii
CONTENIDO
7. ÁRBOLES 7.1. Conceptos Básicos . . . . . . . . . . . . . . . . . 7.2. Subárboles . . . . . . . . . . . . . . . . . . . . . 7.3. Árbol Binario . . . . . . . . . . . . . . . . . . . . 7.4. Árboles Etiquetados . . . . . . . . . . . . . . . . 7.5. Árbol Posicional . . . . . . . . . . . . . . . . . . 7.6. Otras Formas de Árboles Ordenados . . . . . . . 7.7. Representación Matricial . . . . . . . . . . . . . . 7.8. Representación Secuencial . . . . . . . . . . . . . 7.9. Representación Enlazada . . . . . . . . . . . . . . 7.10. Conversión de un Árbol General a Binario . . . . 7.11. Recorrido de un Árbol Binario . . . . . . . . . . 7.12. Notación Polaca . . . . . . . . . . . . . . . . . . 7.13. Búsqueda y Ordenamiento con Árboles Binarios .
. . . . . . . . . . . . .
8. ÁRBOLES NO DIRIGIDOS 8.1. Árbol No Dirigido . . . . . . . . . . . . . . . . . . 8.2. Árbol Generado de Relaciones Conexas . . . . . . 8.3. Árbol Generador de Mínimo Peso . . . . . . . . . . 8.4. Algoritmo de Prim (Robert C. Prim, 1957) . . . . 8.5. Algoritmo de Kruskal . . . . . . . . . . . . . . . . 8.6. Árbol Generador de Mínima Distancia . . . . . . . 8.7. Algoritmo de Dijkstra (Árbol de mínima distancia)
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
A. Caicedo B., G. Wagner de G., R. M. Méndez
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . .
. . . . . . .
. . . . . . . . . . . . .
83 83 86 87 89 90 91 92 93 94 95 96 99 101
. . . . . . .
107 107 108 109 110 111 113 113
PRÓLOGO 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 árboles 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 profundidad 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. Los Autores, Diciembre de 2010.
iii
iv
PRÓLOGO
A. Caicedo B., G. Wagner de G., R. M. Méndez
tulo
p í
a
C
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. Los grafos son una estructura de datos no lineal, la cual se puede usar para modelar diversas aplicaciones. Es una parte importante de la Teoría Combinatoria en Matemáticas, lo que le da un carácter bastante amplio y complejo. En esta unidad sólo se hará una introducción a los conceptos básicos de la teoría de grafos y a los algoritmos que permiten su aplicación a problemas prácticos.
1.1
Conceptos Básicos
Definición 1.1 Grafo Un grafo G consta de un conjunto de vértices o nodos V y un conjunto de arcos A, cada uno de los cuales une un vértice con otro. G = (V, A) = (N, A)
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. Definición 1.2
Grafo Dirigido
Si en un grafo los arcos tienen una dirección, el grafo se llama grafo dirigido u orientado.
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 v i hasta v j y que v j es adyacente a v i . 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.
Figura 2. Grafo dirigido y no dirigido
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. Definición 1.3
Orden de un Grafo
El número de nodos de un grafo se llama orden del grafo y se denota como: ord(g) = | N (G)| = N El número de aristas o arcos es |A(g)| = A =talla de G = e(G) Otra notación: G n =grafo de orden n. G(n, m) =grafo de orden n y talla m
Definición 1.4
Grado de un Vértice
El grado de un vértice x es el número de vértices adyacentes a él, esto es, el número de arcos incidentes a x y se denota grad(x).
Ejemplo 2
v1
grad(v1 ) = 2
v2
v3
grad(v2 ) = 0
grad(v3 ) = 4
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 Si N (G) = x 1 , x2 ,...,xn ; entonces, grad(x1 ) + . . . + grad(xn ) = 2A. Donde A es el número de aristas incidentes A. Caicedo B., G. Wagner de G., R. M. Méndez
Conceptos Básicos
3
Definición 1.5 Trayectoria Una trayectoria T en un grafo es una secuencia de nodos v1 , v2 , . . . , vn tal que (v1 , v2 ) , (v2 , v3 ) , . . . , (vn−1 , vn ) son arcos.
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
5
3
4 Figura 3. Trayectoria de un grafo
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
b
e3 e4
e2
e7
d
e6
e
e5
c Figura 4. Digrafo etiquetado
El grafo de la figura 4 es un digrafo etiquetado. La trayectoria b − c − d − b es un ciclo y a la vez una trayectoria simple. Este ciclo también se puede nombrar usando las etiquetas de los arcos: e 2 , e5 , e3 o por medio de las parejas de nodos que forman los arcos: (b, c) , (c, d) , (d, b) . El arco e 7 es un bucle. Los arcos e 3 y e 4 se llaman paralelos. Definición 1.6
Grafo Acíclico
Un grafo G es acíclico si no contiene ciclos.
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 segunda 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
2 y 3
5. Adicionar cielo raso
4
6. Instalar plomería
4
7. Instalar redes eléctricas
4 y 5
8. Pegar piso
4 y 6
9. Instalar puertas
4 y 8
10. Pintar paredes interiores
4, 7 , 8 y 9
11. Pulir piso
1
2
10
3
5
7
4
6
8
9
10
11
Figura 5. Digrafo acíclico de tareas
El grafo resultante se muestra en la figura 5 . Determinar si un digrafo es acíclico es equivalente a encontrar un etiquetamiento consistente para el digrafo. Un etiquetamiento consistente es una forma de numerar los nodos en forma tal que cada nodo tenga un número más bajo que cualquier nodo que él preceda. Definición 1.7
Etiquetamiento consistente
Sea G = (N, A) un digrafo. Sea {n1 , n2 , . . . , nn } un etiquetamiento de los nodos. El etiquetamiento es consistente si (ni , nj ) ∈ A ⇒ i < j.
Un digrafo puede tener varios etiquetamientos consistentes diferentes. A. Caicedo B., G. Wagner de G., R. M. Méndez
Conceptos Básicos
5
Teorema 2 Sea G = (N, A) un digrafo. G tiene un etiquetamiento consistente si y solo si G es acíclico.
Prueba
La demostración en el primer sentido se puede hacer en la siguiente forma: supóngase que el digrafo G tiene un etiquetamiento consistente n1 , n2 , . . . , nn . Si existe un ciclo ni1 , ni2 ,...,nik se debe tener que i1 = i k y que i1 < i2 < .. . < ik , pero esto es una contradicción, entonces G no puede tener un ciclo. Para la demostración en el otro sentido se parte del supuesto de que el digrafo es acíclico 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.
Algoritmo de Etiquetamiento Topológico
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 = ∅ hacer Mientras S 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.
A. Caicedo B., G. Wagner de G., R. M. Méndez
6
GRAFOS
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 = ∅ . 2. Desarrollar el bucle principal: a ) n = 1. Etiquetar 1
con E (1) y sacarlo de consideración. S = {2, 6}. Computar nuevo conjunto de antecedentes: para todo u no etiquetado hacer A(u) = A(u) − {n} A(2) = ∅, A(3) = { 2, 4}, A(4) = { 2, 6}, A(5) = { 4, 6}, A(6) = ∅
b ) n = 6 Etiquetar 6 con E (2) y sacarlo de consideración. S = { 2}. Computar nuevo conjunto c ) d ) e ) f )
de antecedentes: A(2) = ∅ , A(3) = { 2, 4}, A(4) = { 2}, A(5) = { 4} n = 2 Etiquetar 2 con E (3) y sacarlo de consideración. S = { 4}. Computar nuevo conjunto de antecedentes: A(3) = { 4}, A(4) = ∅ , A(5) = { 4}. n = 4 Etiquetar 4 con E (4) y sacarlo de consideración. S = {3, 5}. Computar nuevo conjunto de antecedentes: A(3) = ∅ , A(5) = ∅ . n = 3 Etiquetar 3 con E (5) y sacarlo de consideración. S = { 5}. Computar nuevo conjunto de antecedentes: A(5) = ∅ n = 5 Etiquetar 5 con E (6) y sacarlo de consideración. S = ∅
3. Todos los nodos están etiquetados. Parar.
Definición 1.8
Grafo Simple
Un grafo G se denomina simple o sencillo si cumple: 1. No tiene lazos. 2. No existe más que que un arco para cada par de nodos j Un grafo que no es sencillo se le llama grafo múltiple o multigrafo.
A. Caicedo B., G. Wagner de G., R. M. Méndez
Conceptos Básicos
Figura 7. a) Grafo Simple
Definición 1.9
7
b) Grafo Múltiple
Grafo Completo
Es aquel en el que cada par de nodos distintos están unidos por un arco o cualquier nodo está unido a todos los otros.
Un grafo completo con r nodos es llamado un r -grafo y se acostumbra notarlo con K r .
Ejercicio 1
Graficar los siguientes grafos: K 1 , K 2 , K 3 , K 4 , K 5 y K 6 Teorema 3 Un r-grafo no dirigido contiene exactamente
r(r − 1) arcos. 2
Prueba
En K r cada nodo tiene grado r − 1. Luego la suma de los grados es: grad(x1 ) + ... + grad(xr ) = r(r − 1) = a un número par
Por el teorema 1 , esta suma también es igual a 2A. Por lo tanto 2A = r(r − 1) y A = Corolario Para cada grafo K r no dirigido se cumple que: A ≤
N (N − 1) 2
Definición 1.10 Grafo Regular Un grafo en el cual cada nodo tiene grado r se llama regular de grado r o r-regular.
A. Caicedo B., G. Wagner de G., R. M. Méndez
r(r − 1) 2
8
GRAFOS
Ejercicio 2
1. Trazar dos grafos 3-regular con 6 nodos 2. Trazar los siguientes grafos: a) 0-regular b) 1-regular c) 2-regular Teorema 4 Un grafo regular debe tener un número par de nodos
Prueba
Sea S =suma de los grados del grafo r-regular con n nodos, S = grad(x1 ) + grad(x2 ) + · · · + grad(xn ) = n · r = # par ⇒ nr = # par ⇒ si r es impar, n es par
Teorema 5 En un grafo no dirigido de n nodos, el número de nodos de grado impar es par
Ejemplo 7
1.2
Representación de un Grafo
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.
A. Caicedo B., G. Wagner de G., R. M. Méndez
Matriz de Adyacencias de un Grafo
1.3
9
Matriz de Adyacencias de un Grafo
Sea G = (N, A) un grafo de n nodos. La Matriz de Adyacencias M para G es una matriz M nxn de valores booleanos, donde M (i, j) es verdad si y solo si existe un arco desde el nodo i al nodo j . M (i, j) =
1, 0,
si existe el arco (i, j) 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 M (i, j) = c d
a b c 0 1 1 0 0 1 1 0 0 1 0 0
d 0 1 1 0
b
a
d 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
1 2 M (i, j) = 3 4 5
1 2 3 4 5 0 100 0 0 0 0 0 120 0 0 0 0 0 200 0 0 110 0 0 80 0 0 0 0 0
1
100
3 110 200 4
5
80 Figura 9.
A. Caicedo B., G. Wagner de G., R. M. Méndez
10
GRAFOS
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 . a
c
b
d
e 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 M (i, j) = c d e
a b c 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1
d 1 1 1 0 0
e 0 1 1 1 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. a
4
a
b
b
11 c
f
19
6 15
c
16
f
8
5
4 e
d a)
d
Figura 11.
3
e b)
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 .
A. Caicedo B., G. Wagner de G., R. M. Méndez
Lista de Adyacencias
11
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 DIJKSTRA y que se estudiará más adelante.
Lista de Adyacencias
1.4
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
3
4
1
2
2
4
3
2
4
3
3
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
2
2
2
3
3
5
6
4
3
6 2
3
5
5
1 4
6 Figura 13.
Si este grafo no fuera orientado, la lista de adyacencias sería la que se muestra en la figura 14 . A. Caicedo B., G. Wagner de G., R. M. Méndez
12
GRAFOS 1
2
2
1
2
3
3
2
4
5
4
3
5
3
6
3
6
Figura 14.
Ejemplo 14
Otra forma de presentar la lista de adyacencias A
B
P
C
Q
Lista de adyacencias A : B : C : P : Q :
B, P A, C, P, Q B A, B B
G = [A : B, P ; B : A, C, P,Q; C : B; P : A, B; Q : B]
Representación enlazada de G
1.5
Coeficiente de estabilidad
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 ) .
Definición 1.12 Coeficiente de estabilidad interna El coeficiente de estabilidad interna α (G) de G es igual a:
α (G) = m´ax {S } Es decir α (G) es el número de elementos que contiene el mayor subconjunto S interiormente estable.
A. Caicedo B., G. Wagner de G., R. M. Méndez
Coeficiente de estabilidad
Ejemplo 15
1
3
13
2 6
4
5 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´ax {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
q
c
r
d
s
e
t a)
b
a
c
e Figura 16.
d 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 fig. 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. A. Caicedo B., G. Wagner de G., R. M. Méndez
14
GRAFOS
A continuación definiremos el Coeficiente de estabilidad externa Definición 1.13 Coeficiente de estabilidad externa / T está ligado Un subconjunto T de nodos de un grafo G es exteriormente estable si todo nodo n i ∈ al menos a un nodo de T por un arco cuyo extremo inicial es n i .
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
c
b
El coeficiente de estabilidad externa es: β (G) = min{T } = 3, T = {c,e,h}
d
e
f
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
2
A
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
1
f
b
g
d
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 c e
b 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
c
b
e
d
c
b
a
d
f
e
f 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 Figura 22.
A. Caicedo B., G. Wagner de G., R. M. Méndez
3
16
GRAFOS
8. Trazar un grafo completo de 5 nodos. 9. Trazar un K 6 grafo. 10. Probar que un K 7 grafo tiene 21 arcos. Dibujarlo. 11. Trazar un grafo regular de grado 4 . 12. Establecer la matriz de adyacencias para cada uno de los grafos de la figura 23 . a
a
b
c
b c
e
d
g
c
d
f
h
a e
d a 10
e 12 20
f
1
b 5 e
12
2 4
14 c
i
b
3
d
8
20 5
6 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
2
A
3
B
5
6
Figura 24.
A. Caicedo B., G. Wagner de G., R. M. Méndez
7
tulo
p í
a
C
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
Definición 2.1 Relación Sean A y B conjuntos no vacíos. Una relación binaria de A en B es un subconjunto de A × B Si ℜ ⊆ A × B y (a, b) ∈ ℜ, se dice que a está relacionado con b por ℜ y se escribe aℜb.
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. Si el conjunto de referencia para la relación es el conjunto N de puntos (nodos) y la relación binaria es ℜ ⊂ N 2 , entonces la colección formada por N y ℜ se denomina un grafo G . Algunos autores llaman a N el portador del grafo y a ℜ la signatura del grafo. Si ℜ ⊆ A × B es una relación de A en B , existen dos conjuntos asociados a ℜ : 1. El dominio de ℜ que se escribe Dom(ℜ), es el conjunto de elementos de A que están relacionados con algún elemento de B , por lo tanto Dom(ℜ) ⊆ A. 2. El codominio de ℜ que se escribe C od(ℜ) es el conjunto de elementos de B que están relacionados con algún elemento de A , por lo tanto Cod(ℜ) ⊆ B .
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 C od(ℜ) = { 2, 4, 7}.
2.2
Matriz de una Relación Matriz de una Relación
Definición 2.2
Si ℜ es una relación de A en B, es posible representar a ℜ como una matriz M ℜ = [mij ] con elementos de la forma: 1, si (ai , bj ) ∈ ℜ mij = 0, si (ai , bj ) ∈ /ℜ
Ejemplo 3
Sean A = {0, 7, 5, 9} y B = { 1, 3, 10} y la relación dada por: AℜB ⇔ a > b 7 3 0
0 7 M ℜ = 5 9
5 1 9
10
1 0 1 1 1
3 10 0 0 1 0 1 0 1 0
Figura 1.
Entonces: ℜ = { (5, 1), (5, 3), (7, 1), (7, 3), (9, 1), (9, 3)}. La matriz de ℜ se ve en la figura 1:
Nota: En un grafo no dirigido M ℜ = M de adyacencias
Ejemplo 4
Sean X = { 3, 9, 1} e Y = { a, b} . Luego ℜ = { (3, a), (9, b), (1, a), (1, b)}. 3 M ℜ = 9 1
a b 1 0 0 1 1 1
A. Caicedo B., G. Wagner de G., R. M. Méndez
Gráfica de una Relación
2.3
19
ℜ
Gráfica de una Relación ℜ
Si A es un conjunto finito y ℜ es una relación en A, los elementos de A se pueden representar como puntos del plano, unidos por arcos dirigidos si a i ℜaj . La gráfica resultante para esta relación se llama un grafo dirigido. 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
3 Figura 3.
Puesto que ai ℜaj si y solo si existe el arco de a i a a j se tiene: ℜ = { (1, 2), (1, 4), (2, 1), (3, 1), (3, 5), (3, 3), (4, 4), (4, 5)}.
2.4
Propiedades de una Relación
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
Definición 2.3 Irreflexiva ℜ es irreflexiva si algún elemento no está relacionado consigo mismo.
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
Definición 2.4 Antisimétrica ℜ es asimétrica si a ℜb entonces b ℜa , ℜ es antisimétrica si cuando a ℜb y b ℜa ⇒ a = b, ∀a y ∀ b
Ejemplo 8
Sea ℜ = { (a, b) ∈ A × A |a < b }. Luego: 1. Si a < b ⇒ b ≮ a ⇒ ℜ no es simétrica, es asimétrica. = b ⇒ a ≮ b ó b ≮ a ⇒ ℜ es antisimétrica. 2. Si a
Teorema 1 La matriz M ℜ = [mij ] de una relación simétrica satisface: 1. Si m ij = 1 ⇒ m ji = 1. 2. Si m ji = 0 ⇒ m ij = 0. Luego M ℜ = (M ℜ )T entonces M ℜ es simétrica.
Ejemplo 9
Si M ℜ =
1 1 0 1 0 1 0 1 0
, entonces M ℜT =
1 1 0 1 0 1 0 1 0
Teorema 2 La matriz M ℜ de una relación asimétrica satisface: 1. Si m ij = 1 ⇒ m ji = 0. 2. mij = 0 para i = j. A. Caicedo B., G. Wagner de G., R. M. Méndez
Propiedades de una Relación
21
Teorema 3 = j ⇒ mij = 0 ó m ji = 0 La matriz M ℜ de una relación antisimétrica satisface que si i
De los anteriores teoremas se pueden concluir las siguientes afirmaciones: 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 . = j no puede haber un arco desde i a j y un arco desde j a 2. Si ℜ es antisimétrica, entonces para i i. Pueden existir ciclos de longitud 1 .
3. Si ℜ es simétrica, entonces, si existe el arco de i a j , también existe el arco desde j a i . Definición 2.5
Relación Conexa
Una relación simétrica ℜ en A se llama conexa si existe una trayectoria desde cualquier elemento de A a cualquier otro elemento de A, es decir, el grafo es completo
Ejemplo 10
El grafo de la figura 5 representa una relación conexa.
a
c
b 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 m ij = 1 y m jk = 1 ⇒ m ik = 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. Definición 2.6 Transitividad ℜ es transitiva si y solo si ℜ n ⊆ ℜ ∀n ≥ 2. ℜ es transitiva si ℜ2 = ℜ
Ejemplo 11 1 Sea A = { 1, 2, 3} y M R = 2 3
1 1 0 0
2 1 0 0
3 1 1 1
(M R )2⊙ = M R
R es transitiva
→ 2
1
A. Caicedo B., G. Wagner de G., R. M. Méndez
3
22
RELACIONES Y GRAFOS
Ejemplo 12 a
1
b
2 5
c
e
d
3
4
Transitiva
Antisimétrica Transitiva
0 1 0 1 1 0 1 1 0 1 0 0 1 1 0 0 Irreflexiva Simétrica No transitiva
Relación de Equivalencia
Definición 2.7
Una relación ℜ sobre un conjunto A se llama relación de equivalencia si cumple que es reflexiva, simétrica y transitiva.
Ejemplo 13
1
0
0
0
1
1
0 1 1 Relación de equivalencia
2.5
1
0
1
0
1
0
1 0 1 Reflexiva, simétrica, no transitiva
Operaciones entre Relaciones
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. Algunas de las operaciones que se pueden definir sobre relaciones son: Relación Complementaria
Sean A y B dos conjuntos finitos y ℜ una relación de A en B . Se define la relación complementaria ℜ como: aℜb
⇔
aℜb
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)}.
A. Caicedo B., G. Wagner de G., R. M. Méndez
Operaciones entre Relaciones
23
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 Nota: (a, b) ∈ (ℜ ∩ S ), si está en ℜ y también está en S 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 Nota: (a, b) ∈ (ℜ ∪ S ), si está en ℜ o está en S 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
Nota: (b, a) ∈ (ℜ−1 ), si (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 1. Para hallar el complemento se compara la relación dada con A × B, donde, A × B = { (1, x), (1, y), (5, x), (5, 7), (7, x), (7, y), (9, x), (9, y)}
así, el complemento de ℜ es: ℜ = { (5, x), (9, y)}. 2. La intersección ℜ ∩ S se forma con el conjunto de parejas en común entre ℜ y S , así, ℜ ∩ S = { (7, y), (9, x)(1, 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)}.
A. Caicedo B., G. Wagner de G., R. M. Méndez
24
RELACIONES Y GRAFOS
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 composició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
ℜ
y
z
u
w
x
A
B
C
Figura 6.
ℜ◦
S
De la figura anterior se deduce que la composición de relaciones consiste en relacionar elementos de A con elementos de C , usando elementos de B como intermediarios. 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 2
2
3
3
2
3 4 4 A
B
Figura 7.
A. Caicedo B., G. Wagner de G., R. M. Méndez
C
Producto Lógico de Matrices
2.6
25
Producto Lógico de Matrices
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 ,...,c p }. Sea ℜ una relación de A en B y sea S una relación de B en C . ℜ se representa por una matriz M 1m×n ; S se representa por la matriz M 2n× p , entonces la relación compuesta ℜ ◦ S se representa por la matriz M 3m× p . La operación matricial que se busca para representar la composición, se denota con el símbolo ⊙ lo cual permite escribir: M 3 = M 1 ⊙ M 2
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}, M 3 (i, j) = verdad si y solo si ai ℜ ◦ S cj lo cual es cierto si y solo si ∃ k ∈ {1,...,n} tal que a i ℜbj y b k Sc j . Usando las definiciones de las operaciones lógicas ∧ y ∨ (and y or)1 se puede obtener la fórmula como sigue: M 3 (i, j) = [M 1 (i, 1) ∧ M 2 (1, j)] ∨ [M 1 (i, 2) ∧ M 2 (2, j)] ∨ ... ∨ [m1 (i, n) ∧ M 2 (n, j)]
La matriz M 3 obtenida en esta forma se llama el producto lógico o booleano de las matrices M 1 y M 2 .
ℜ
S
a1
b1
c1
a2
b2
c2
.. .
.. .
.. .
ai
bk
cj
.. .
.. .
.. .
am
bn
c p
Figura 8.
1
+/∨
0
1
∗/∧
0
1
0
0
1
0
0
0
1
1
1
1
0
1
A. Caicedo B., G. Wagner de G., R. M. Méndez
26
RELACIONES Y GRAFOS 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: M ℜ =
1 0
1 1
0 , 0
M S =
1 1 0
0 0 1
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 M ℜ◦S
=
M ℜ ⊙ M S =
=
=
1 0
1 1
0 0
⊙
1 1 0
0 0 1
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∨1∨0
0∨0∨0 0∨0∨0
1∨0∨0 0∨0∨0
1∨0∨0 = 0∨0∨0
1 1
0 0
1 0
1 0
Nótese que esta última matriz es equivalente a la matriz de la relación representada en el esquema anterior. A a
ℜ
B a b
b
c
S
C a
A a
ℜ ◦ S
C a
b
b
c
c
d Figura 9.
b ℜ◦
d S
El siguiente teorema establece algunas relaciones interesantes entre las matrices de relaciones y las operaciones booleanas entre ellas. Teorema 4
Sean ℜ y S dos relaciones en A, entonces se cumple que: 1. M ℜ∪S = M ℜ ∨ M S 2. M ℜ∩S = M ℜ ∧ M S 3. M ℜ◦S = M ℜ ⊙ M S 4. (M ℜ )n = M ℜ◦ℜ◦... = M ℜ ⊙ M ℜ . . . (n veces) A. Caicedo B., G. Wagner de G., R. M. Méndez
Producto Lógico de Matrices
Ejemplo 18
Sean M ℜ =
1 1 1
0 0 1
1 0 y M S = 1
0 1 0
M ℜ∪S
=
M ℜ ∨ M S
=
1 1 1
27
1 0 , se tiene entonces, 0
1 1 1
1 1 1
1 0 1
,
M ℜ∩S
=
1 1 1
1 1 1
1 0 1
,
M ℜ ∧ M S
=
0 1 0
0 0 1
1 0 0
0 1 0
0 0 1
1 0 0
Ejemplo 19
Si ℜ = {(a, b), (a, c), (b, a)}, S = {(a, c), (b, a), (b, b), (c, a)}, entonces
M ℜ◦S = M ℜ ⊙ M S = M ℜ × M S =
Ejemplo 20
2 0 0
1 0 0
0 1 0
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 )}
1 M ℜ = 2 3
1 M ℜ◦S = 2 3
a
b
c
0
1
0
1
0
1
0
0
0
x
y
z
1
0
0
0
1
1
0
0
0
a M S = b c
1 M ℜ × M S = 2 3
Nota: M ℜ◦S y M ℜ × M S tienen ceros en las mismas posiciones
A. Caicedo B., G. Wagner de G., R. M. Méndez
x
y
z
0
1
0
1
0
0
0
1
1
x
y
z
1
0
0
0
2
1
0
0
0
28
RELACIONES Y GRAFOS
2.7
Trayectorias y Relaciones
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í sucesivamente. 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.
ℜ∞ se le llama relación de conectividad de ℜ . (clausurativa, transitiva) 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 x 1 , que conoce a x 2 ,. . . ,que conoce a x n−1 , que conoce a b.
A. Caicedo B., G. Wagner de G., R. M. Méndez
Trayectorias y Relaciones
29
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
1ℜ2 4 porque 1ℜ2 y 2 ℜ4
2
5
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 3
4ℜ2 6 porque 4ℜ5 y 5 ℜ6
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)}
M ℜ 3
∞
4
1 2 = 3 4
Figura 11.
1 1 1 0 0
2 3 4 1 1 1 1 1 1 0 0 1 0 0 0
Ejemplo 24
1
2
ℜ∞ = { (1, 2), (1, 3), (1, 4), (3, 2), (3, 3), (3, 4)}
M ℜ
∞
3
4
1 2 = 3 4
1 2 3 4 0 1 1 1 0 0 0 0 0 1 1 1 0 0 0 0
A. Caicedo B., G. Wagner de G., R. M. Méndez
30
RELACIONES Y GRAFOS
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 n i ℜk nj , por lo tanto: ℜ∞ = ℜ ∪ ℜ2 ∪ ℜ3 ∪ . . .
Teorema 6
Sea G = (N, A) un digrafo, ℜ una relación en A y sea n = |N | entonces:
ℜ∞ = ℜ ∪ ℜ2 ∪ ℜ3 ∪ . . . ℜn es decir que las potencias de ℜ mayores que n no son necesarias para calcular ℜ ∞ . Teorema 7
Para n ≥ 1 y ℜ una relación en un conjunto finito A, se tiene: M ℜ = M ℜ ⊙ M ℜ ⊙ . . . ⊙ M ℜ n
n veces
Definición 2.10
xℜ∞ y si y solo si x ℜy o x ℜ2 y o xℜ3 y o . . . Del teorema anterior y teniendo en cuenta que M ℜ∪S = M ℜ ∨ M S se concluye que: M ℜ
∞
= M ℜ ∨ M ℜ ∨ M ℜ ∨ . . . ∨ M ℜ 2
3
n
que también se puede escribir de la forma: 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 . La matriz de la relación de accesibilidad o alcanzabilidad o matriz de caminos se nota M ℜ . ∗
Teorema 8
M ℜ = I n ∨ M ℜ donde I n es la matriz identidad de n × n, luego: M ℜ = I n ∨ M ℜ ∨ M ℜ ∨ . . . ∨ M ℜ ∗
∞
∗
2
n
A. Caicedo B., G. Wagner de G., R. M. Méndez
Trayectorias y Relaciones
31
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
a
c
e
Solución 1. Analizando visualmente el grafo se tiene:
Figura 12.
ℜ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 0 0 0 0
M ℜ =
M ℜ = M ℜ ⊙ M ℜ = 2
1 0 0 0 0
1 0 0 0 0
0 1 0 0 0
0 1 1 1 0
0 0 1 0 0
1 0 0 0 0
0 1 0 0 0
1 0 0 0 0
⊙
0 1 1 1 0
1 0 0 0 0
0 0 1 0 0
0 1 0 0 0
0 1 1 1 0
0 0 1 0 0
=
1 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:
M ℜ =
0 0 1 1
1 0 0 0
0 1 0 0
0 0 0 0
a partir de ella se pueden calcular otros productos: A. Caicedo B., G. Wagner de G., R. M. Méndez
1 0 0 0 0
1 0 0 0 0
1 1 1 1 0
0 1 0 0 0
matriz de = caminos de longitud 2
32
RELACIONES Y GRAFOS
M ℜ = (M ℜ )2⊙ = M ℜ ⊙ M ℜ = 2
4
0 1 0 0
M ℜ = (M ℜ )⊙ = M ℜ ⊙ M ℜ = 4
3
0 0 0 1
0 0 1 1
1 0 1 0
1 0 0 0
0 1 0 0
La matriz de relación de conectividad es M ℜ
∞
0 0 , 0 0
2
=
=
3
0 0 1 1
1 0 0 0
0 1 0 0
0 0 0 0
1 1 1 1
1 1 1 1
1 1 1 1
0 0 0 0
∨
0 1 0 0
3
2
0 0 0 0
= M ℜ ∨ M ℜ ∨ M ℜ ∨ M ℜ
M ℜ = (M ℜ )3⊙ = M ℜ ⊙ M ℜ =
1 0 0 0
0 1 0 0
0 0 1 1
0 0 0 0
4
0 0 1 1
1 0 0 0
0 0 0 0
∨
1 0 0 0
0 1 0 0
0 0 1 1
0 0 0 0
∨
0 0 1 1
1 0 0 0
0 1 0 0
0 0 0 0
Teorema 9
Sea M la matriz de adyacencias de un digrafo G. El elemento de la i-ésima fila y j-ésima columna de M n con n > 0 es igual al número de caminos de longitud n que van desde el i-ésimo nodo hasta el j-ésimo nodo
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
M 2 =
M 3 =
M × M =
M 2 × M =
1 1 0 0 0
v4
Figura 14.
0 0 0 1 0
1 1 0 2 0
1 0 1 1 1
0 0 0 0 1
1 0 0 0 0
=
Los valores diferentes de 0, indican cuántas trayectorias de longitud 2 existen entre cada par de nodos
1 0 0 0 0
2 0 1 1 2
1 1 0 2 1
0 0 0 1 0
0 0 0 0 1
=
Los valores diferentes de 0, indican cuántas trayectorias de longitud 3 existen entre cada par de nodos
A. Caicedo B., G. Wagner de G., R. M. Méndez
Algoritmo de Warshall
M 4 =
M 5 =
M 3 × M =
M 4 × M =
0 0 0 0 1
1 1 0 3 2
2 0 1 2 2
1 0 0 0 0
0 0 0 1 0
=
Los valores diferentes de 0, indican cuántas trayectorias de longitud 4 existen entre cada par de nodos
0 0 0 1 0
3 0 1 3 2
2 1 0 3 2
0 0 0 0 1
1 0 0 0 0
=
Los valores diferentes de 0, indican cuántas trayectorias de longitud 5 existen entre cada par de nodos
T 5 = M + M 2 + M 3 + M 4 + M 5 =
1 0 0 2 2
7 2 3 10 7
6 3 2 9 6
2 0 0 1 2
2 0 0 2 1
33
el elemento de la i-ésima fila y j-ésima columna indica el número de trayecto= rias de longitud 5 o menor entre vi y vj
Si un elemento de esta matriz no es nulo, queda claro que v j es alcanzable o accesable desde v i mediante una trayectoria o camino de longitud máxima 5.
2.8
Algoritmo de Warshall
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 ∗ = M 1 ∨ M 2 ∨ · · · ∨ M n Stephen Warshall propuso en 1962 el siguiente procedimiento para hallar la matriz de alcanzabilidad a partir de la matriz de adyacencias de G. Para un grafo G, sea M su matriz de adyacencias n × n 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
Sea G = (N, A) un digrafo. Se define la familia de relaciones W (k) como sigue: Sea v1 , v 2 , . . ., vn un etiquetamiento de los vértices y 1. Para u, v ∈ N decimos que u W (1) v si y sólo si existe el arco (u, v) o existe una trayectoria de u a v usando a v 1 como vértice intermedio. 2. Para u, v ∈ N decimos que u W (k+1) v si y sólo si u W (k) v o existe una trayectoria de u a v usando algún subconjunto de vértices v 1 , . . . , vk+1 como vértices intermedios.
A. Caicedo B., G. Wagner de G., R. M. Méndez
34
RELACIONES Y GRAFOS
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: W (1) ⊆ W (2) ⊆ . . . ⊆ W (n) así que cada sucesiva relación contiene a las relaciones precedentes. Ejemplo 28
Hallar la matriz M ∗ de alcanzabilidad para el siguiente digrafo, usando el algoritmo de Warshall 1
La matriz de adyacencias es
2
3
4
1 2 M = 3 4
1 2 3 4 0 1 0 0 0 0 1 0 1 0 0 0 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 i = 1, j = 1 j = 2 j = 3 j = 4 i = 2, j = 1 j = 2 j = 3 j = 4 i = 3, j = 1 j = 2 j = 3 j = 4 i = 4, j = 1 j = 2 j = 3 j = 4
W (1, 1) = W (1, 1) ∨ [ W (1, 1) ∧ W (1, 1) ] = 0 0 0 ] ∨ [ ∧ W (1, 2) = W (1, 2) ∨ [ W (1, 1) ∧ W (1, 2) ] = 1 0 1 ] ∨ [ ∧ W (1, 3) = W (1, 3) ∨ [ W (1, 1) ∧ W (1, 3) ] = 0 0 0 ] ∨ [ ∧ W (1, 4) = W (1, 4) ∨ [ W (1, 1) ∧ W (1, 4) ] ∨ [ ∧ = 0 0 0 ] W (2, 1) = W (2, 1) ∨ [ W (2, 1) ∧ W (1, 1) ] ∨ [ ∧ = 0 0 0 ] W (2, 2) = W (2, 2) ∨ [ W (2, 1) ∧ W (1, 2) ] = 0 0 1 ] ∨ [ ∧ W (2, 3) = W (2, 3) ∨ [ W (2, 1) ∧ W (1, 3) ] = 1 0 0 ] ∨ [ ∧ W (2, 4) = W (2, 4) ∨ [ W (2, 1) ∧ W (1, 4) ] = 0 0 0 ] ∨ [ ∧ W (3, 1) = W (3, 1) ∨ [ W (3, 1) ∧ W (1, 1) ] ∨ [ ∧ = 1 1 0 ] W (3, 2) = W (3, 2) ∨ [ W (3, 1) ∧ W (1, 2) ] ∨ [ ∧ = 0 1 1 ] W (3, 3) = W (3, 3) ∨ [ W (3, 1) ∧ W (1, 3) ] = 0 1 0 ] ∨ [ ∧ W (3, 4) = W (3, 4) ∨ [ W (3, 1) ∧ W (1, 4) ] = 0 1 0 ] ∨ [ ∧ W (4, 1) = W (4, 1) ∨ [ W (4, 1) ∧ W (1, 1) ] ∨ [ ∧ = 1 1 0 ] W (4, 2) = W (4, 2) ∨ [ W (4, 1) ∧ W (1, 2) ] ∨ [ ∧ = 0 1 1 ] W (4, 3) = W (4, 3) ∨ [ W (4, 1) ∧ W (1, 3) ] ∨ [ ∧ = 1 1 0 ] W (4, 4) = W (4, 4) ∨ [ W (4, 1) ∧ W (1, 4) ] = 0 0 0 ] ∨ [ ∧
=0 =1 =0 =0 =0 =0 =1 =0 =1 =1 =0 =0 =1 =1 =1 =0
A. Caicedo B., G. Wagner de G., R. M. Méndez
Algoritmo de Warshall
35
Se ha obtenido la siguiente matriz
1 0 0 1 1
2 1 0 1 1
3 4 0 0 1 0 0 0 1 0
Los unos de esta matriz indican cuáles parejas de nodos están 1 comunicados directamente por un arco o usando al nodo v1 2 W (1) = como nodo intermedio. 3 4 Segunda Iteración Para hallar W (2) partimos con todas las trayectorias encontradas en W (1) y establecemos las trayectorias que usan a v1 y v 2 como nodos intermedios. Para k = 2 y usando los valores de W (1) ejecutamos el mismo proceso iterativo y se obtiene:
1 0 0 1 1
2 1 0 1 1
3 4 1 0 1 0 1 0 1 0
1 1 1 1 1
2 1 1 1 1
3 4 1 0 1 0 1 0 1 0
Los unos de esta matriz indican cuales parejas de nodos están 1 comunicados directamente por un arco o por una trayectoria 2 W (2) = que usa los nodos v1 y v 2 como nodos intermedios 3 4 Tercera Iteración Para k = 3 y usando los valores de W (2) , ejecutamos el mismo proceso iterativo y se obtiene:
Los unos de esta matriz indican cuales parejas de nodos están 1 conectados directamente por un arco o por una trayectoria 2 W (3) = que usa los nodos v1 , v 2 y v 3 como nodos intermedios. 3 4 Cuarta Iteración Para k = 4 y usando los valores de W (3) y ejecutando el mismo proceso iterativo se obtiene:
W (4)
1 2 = 3 4
1 1 1 1 1
2 1 1 1 1
3 1 1 1 1
4 0 0 0 0
= Matriz de alcanzabilidad
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 W (4) (1, 1) = 1 W (4) (1, 2) = 1 W (4) (1, 3) = 1 W (4) (2, 1) = 1 W (4) (2, 2) = 1 W (4) (2, 3) = 1 W (4) (3, 1) = 1 W (4) (3, 2) = 1 W (4) (3, 3) = 1 W (4) (4, 1) = 1 W (4) (4, 2) = 1 W (4) (4, 3) = 1
⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒ ⇒
Trayectoria Trayectoria Trayectoria Trayectoria Trayectoria Trayectoria Trayectoria Trayectoria Trayectoria Trayectoria Trayectoria Trayectoria
de acceso: de acceso: de acceso: de acceso: de acceso: de acceso: de acceso: de acceso: de acceso: de acceso: de acceso: de acceso:
1→2→3→1 1→2 1→2→3 2→3→1 2→3→1→2 2→3 3→1 3→1→2 3→1→2→3 4→1 4→3→1→2 4→3
A. Caicedo B., G. Wagner de G., R. M. Méndez
36
RELACIONES Y GRAFOS
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 ℜ ,
M ℜ =
1
0
1
1
1
1
0
0
0
0
1
0
establecer la relación ℜ en forma de conjunto de parejas y trazar el grafo orientado correspondiente. 7. Dada la siguiente matriz de una relación a M ℜ = b c establecer:
x 1 1 0
y 0 1 1
z 1 1 1
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:
M ℜ =
11. Dado el grafo de la figura 16, determinar:
1 0 0 1
1 1 0 0
0 1 1 0
1 0 1 0
a ) M ℜ . b ) Conjunto de parejas. c ) Dominio y codominio de ℜ .
A. Caicedo B., G. Wagner de G., R. M. Méndez
Algoritmo de Warshall
37
4
2 1
5
3 Figura 16.
12. Sea A = {1, 2, 3, 4} y la relación dada por:
ℜ = {(1, 1) , (1, 2) , (2, 1) , (2, 2) , (3, 4) , (4, 3) , (3, 3) , (4, 4)} verificar que ℜ es una relación de equivalencia. 13. Sea A el conjunto de enteros positivos y la relación: aℜb ⇔ a ≡ b (mod 2) Mostrar que ℜ es una relación de equivalencia. 14. Determinar si las relaciones ℜ dadas por los siguientes grafos son reflexiva, irreflexiva, simétrica, asimétrica o transitiva. 2 1 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 = b n , 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. M ℜ =
1
0
1
0
1
1
0
1
1
A. Caicedo B., G. Wagner de G., R. M. Méndez
38
RELACIONES Y GRAFOS
17. Para los ejercicios de a hasta e, considere la relación ℜ cuyo grafo dirigido se ilustra en la figura 18. 1
2
3
7
6 4 5 Figura 18.
a ) Listar todas las trayectorias de longitud 3 que se inicien en el nodo 1. b ) Encontrar un ciclo que se inicie en el nodo 2. c ) Trazar el grafo dirigido de ℜ 2 . d ) Encontrar M ℜ2 , ℜ∞ y M ℜ . ∞
e ) Encontrar todas las trayectorias de longitud 4 que se inicien en el nodo 4.
18. Sean ℜ y S las siguientes relaciones sobre A = {1, 2, 3, 4} S =
{(2, 1) , (3, 3) , (3, 4) , (4, 1) , (4, 2)} y
ℜ
{(1, 1) , (1, 3) , (3, 2) , (3, 4) , (4, 2)}
=
Encontrar cada una de las siguientes relaciones compuestas: a ) ℜ ◦ S b ) S ◦ ℜ c ) ℜ ◦ ℜ d ) S ◦ S
19. Para las relaciones del ejercicio 18 hallar: a ) ℜ b ) S c ) ℜ−1 d ) S −1
20. Aplicar el algoritmo de Warshall para hallar la matriz de alcanzabilidad del siguiente grafo 1
2
4
3
5
Figura 19.
A. Caicedo B., G. Wagner de G., R. M. Méndez
tulo
p í
a
C
3
CONEXIDAD
El concepto de conexidad en la teoría de grafos es uno de los conceptos más importantes y de mayor aplicabilidad. Para desarrollar este concepto se hace uso de otros que ya fueron tratados en la unidad anterior, tales como trayectoria y ciclo o circuito. Como en la mayoría de las situaciones de optimización en redes y árboles se requiere que el grafo o red inicial sea conexa, es conveniente establecer un algoritmo que determine si un grafo es conexo o nó. Este es el propósito central de la presente unidad.
3.1
Grafo Conexo
Definición 3.1
Grafo Conexo
Un grafo se dice ser conexo si para cada par de vértices x e y existe una trayectoria desde x hasta y la cual use máximo n-1 arcos.
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. Definición 3.2
Grafo Fuertemente Conexo
Un grafo orientado es fuertemente conexo si para cada par de vértices x e y existe una trayectoria desde x hasta y y una trayectoria desde y hasta x. Las trayectorias pueden ser diferentes
Definición 3.3
Grafo Dirigido Conexo
Un grafo dirigido es llamado conexo si para cada par de vértices x e y existe una trayectoria desde un nodo al otro.
Sea M una matriz de adyacencias del grafo G donde cada elemento mij de M es de la forma mij =
1, si existe el arco (i, j) 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) − e´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. A partir de la matriz de adyacencias se puede determinar si un grafo es conexo o nó siguiendo el algoritmo que a continuación se describe.
3.2
Algoritmo para Conexidad
paso 0.
Entrar la matriz de adyacencias M . Hacer n el número de nodos.
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 .
paso 4.
Parar, Imprimir el grafo es conexo.
paso 5.
Parar, Imprimir, el grafo no es conexo.
Ejemplo 1
Usando el algoritmo anterior, determinar si el grafo de la figura 1 es conexo 2
1
3 4
5 Figura 1.
A. Caicedo B., G. Wagner de G., R. M. Méndez
6
Algoritmo para Conexidad
41
Solución Paso 0. Matriz de adyacencias. n = 6.
M =
paso 1. Hacer C = M , I = 1
0 1 0 1 0 0
1 0 1 0 0 0
0 1 0 0 1 1
1 0 0 0 1 0
0 0 1 1 0 1
0 0 1 0 1 0
paso 2. C no tiene todas las filas libres de cero. Continuar paso 3. Hacer I = I + 1 = 2 I = n, hacer C = C + M 2 .
C =
0 1 0 1 0 0
1 0 1 0 0 0
0 1 0 0 1 1
1 0 0 0 1 0
0 0 1 1 0 1
0 0 1 0 1 0
+
2 0 1 0 1 0
0 2 0 1 1 1
1 0 3 1 1 1
0 1 1 2 0 1
1 1 1 0 3 1
0 1 1 1 1 2
2 1 4 1 4 2
=
=
2 1 1 1 1 0
1 2 1 1 1 1
1 1 3 1 2 2
1 1 1 2 1 1
1 1 2 1 3 1
0 1 2 1 2 2
2 2 6 2 6 4
paso 2. C no tiene todas las filas libres de cero. Continuar paso 3. Hacer I = I + 1 = 3 I = n, Hacer C = C + M 3 .
C =
2 1 1 1 1 0
1 2 1 1 1 1
1 1 3 1 2 2
1 1 1 2 1 1
1 1 2 1 3 1
0 1 2 1 2 2
+
0 3 1 3 1 2
3 0 4 1 2 1
1 4 2 2 5 4
3 1 2 0 4 1
1 2 5 4 2 4
2 4 2 4 2 2
4 2 5 2 3 2
2 5 5 3 7 6
4 2 3 2 5 2
2 3 7 5 5 6
paso 2. C tiene todas las líneas libres de cero. Ir al paso 4. paso 4. Parar. Imprimir el grafo es conexo. 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. El conjunto de vértices puede ser particionado en clases 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.
A. Caicedo B., G. Wagner de G., R. M. Méndez
42
CONEXIDAD
Definición 3.4 Sea el grafo G (N, A) y ni ∈ N uno de los nodos. Se denota C n el conjunto formado por el nodo ni y todos los nodos de G ligados a n i , por una trayectoria. i
Definición 3.5 Se llama componente conexa de G a un subgrafo de G engendrado por un conjunto de la forma C n . i
Ejemplo 2
En el grafo siguiente las dos subgráficas son componentes conexas del grafo dado. 2 4 5
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 G es conexo si y solo si C (G) = 1.
3.3
Algoritmo para Grafos no Dirigidos
El siguiente algoritmo calcula el número de conectividad C (G) de un grafo G . Sea G (N, A) un grafo no dirigido. Sea C (G) el número de conexidad de G. El procedimiento es el siguiente: Se parte de cualquier nodo y se procede a encontrar todos los nodos que son vecinos al nodo original. 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 = ∅ haga mientras N ′ 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
1
6
7
3
10 8
4
9 Figura 3.
SOLUCIÓN N ′ = { 1, 2, . . . , 10} C = 0
Primera iteración: N ′ = ∅ 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 ′ = ∅ 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 ′ = ∅ 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. A. Caicedo B., G. Wagner de G., R. M. Méndez
44
CONEXIDAD
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
Figura 4.
3. Verificar si los siguientes enunciados son ciertos o no. a )
Un grafo con A ≥ N es conexo. b ) Un grafo con A ≤ V − 2 no es conexo. c ) Un grafo que contiene un ciclo permite la remoción de algún arco y sigue siendo conexo.
4. Use el algoritmo anterior para verificar si el grafo de la figura 5 es conexo o no. c b e a d Figura 5.
5. Aplique un algoritmo para mostrar si el siguiente grafo no dirigido es conexo o no. a
b
e c d
f Figura 6.
A. Caicedo B., G. Wagner de G., R. M. Méndez
tulo
p í
a
C
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. Este tipo de problema se resuelve hallando un circuito euleriano de longitud mínima.
4.1
Circuito de Euler
Definición 4.1
Circuito Euleriano
En una red conexa, un circuito que recorra todos los nodos y todos los arcos pasando una vez por cada arco, se llama circuito euleriano.
Si la red no es conexa puede ocurrir que no exista un circuito euleriano. Definición 4.2
Trayectoria Euleriana
Una trayectoria euleriana es una trayectoria que incluye cada arco exactamente una sola vez.
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.
4.1.1.
Puentes de Königsberg
La ciudad de Königsberg, situada en Prusia Oriental, en la época de Euler (1707-1783) y hoy perteneciente a Rusia con el nombre de Kaliningrado es atravesada por el río Pregel o Pregolia. La parte central de la ciudad se encuentra sobre una isla del río llamada Kniphof que se une a las dos orillas por cuatro puentes, dos a cada lado; un quinto puente une a Kniphof con otra isla que también está unida a las orillas por dos puentes, uno hacia cada orilla. 45
46
CIRCUITO EULERIANO
Figura 1. 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. A
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 G es un gafo conexo y de grado par si y solo si G tiene un ciclo euleriano.
Teorema 2 Un grafo conexo es euleriano si y solo si cada nodo tiene grado par.
A. Caicedo B., G. Wagner de G., R. M. Méndez
Circuito de Euler
47
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 B D 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
B
D
C
A
B
D
C a)
B
D
C 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.
4.2
Algoritmo de Euler
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 . c. Si t diferente de s , repetir paso 1b, en caso contrario continuar. d. Inserta U en V , en el punto donde el nodo s es alcanzado por primera vez. U queda vacío. Encontrar un nodo t que esté visitado en V pero que tenga arcos incidentes no usados. Si tal nodo no existe PARAR. En caso contrario hacer s = t y repetir paso 1b.
Ejemplo 2
Hallar la trayectoria del cartero para el grafo de la figura 4 aplicando el algoritmo anterior. 2 3
4 5
6
1 2 3
3
4
7 5 Figura 4.
paso 0 .
La matriz de distancias es
D =
0 4 2 ∞ ∞
4 0 5 3 6
2 ∞ ∞ 5 3 6 0 3 7 3 0 ∞ 7 ∞ 0
A. Caicedo B., G. Wagner de G., R. M. Méndez
Algoritmo de Euler
49
El grado de los nodos es: nodo 1 grado 2 nodo 2 grado 4 nodo 3 grado 4 nodo 4 grado 2 nodo 5 grado 2 No hay nodos de grado impar. S = 0 , ejecutar paso 3 . paso 1 .
Hallar un ciclo euleriano de G . 1a. Hacer s = 1 y t = s . U = V = ∅. Todos los arcos de A están sin usar. 1b. Escoger el arco (1, 2) y marcarlo como usado. U = { (1, 2)}, t = 2. 1c. Aún t diferente de s , repetir paso 1b. 1b. Escoger el arco (2, 5) y marcarlo como usado. U = { (1, 2)(2, 5)}, t = 5 1c. Aún t diferente de s , repetir paso 1b. 1b. Escoger el arco (5, 3) y marcarlo como usado. U = { (1, 2)(2, 5)(5, 3)}, t = 3 1c. Aún t diferente s , repetir paso 1b. 1b. Escoger el arco (3, 1) y marcarlo como usado. U = { (1, 2)(2, 5)(5, 3)(3, 1)}, t = 1. 1c. Ahora t = s . continuar 1d. Insertar U en V . Como V = ∅ entonces: V = U = { (1, 2)(2, 5)(5, 3)(3, 1)}. Hacer U = ∅ En V hay dos nodos que tienen arcos incidentes no usados: Nodo 2 tiene 2 arcos no usados: (3, 2), (4, 2). Nodo 3 tiene 2 arcos no usados: (2, 3), (4, 3). Escoger uno de estos nodos y hacerlo igual a t . Sea t = 2 = s. Repetir paso 1b 1b. Escoger el arco (2, 4) y marcarlo como usado. U = { (2, 4)}, t = 4. 1c. Aún t es diferente de s repetir paso 1b. 1b. Escoger el arco (4, 3) y marcarlo como usado. U = { (2, 4)(4, 3)}, t = 3. 1c. Aún t es diferente de s repetir paso 1b. 1b. Escoger el arco (3, 2) y marcarlo como usado. U = { (2, 4)(4, 3)(3, 2)}, t = 2. 1c Ahora t = s , continuar. Insertar U en V en la posición donde se encuentre t por primera vez V = { (1, 2), U, (2, 5)(5, 3)(3, 1)} V = { (1, 2)(2, 4)(4, 3)(3, 2)(2, 5)(5, 3)(3, 1)}
Hacer U = ∅ En V ya no hay nodos con arcos incidentes sin usar. PARAR. El ciclo óptimo es V = { (1, 2)(2, 4)(4, 3)(3, 2)(2, 5)(5, 3)(3, 1)} 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: A. Caicedo B., G. Wagner de G., R. M. Méndez
50
CIRCUITO EULERIANO
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 anterioridad. 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
8
7
9
3
4
6
5
Figura 5.
Obsérverse que el grafo tiene todos sus nodos de grado par. La aplicación sucesiva del algoritmo se muestra en la siguiente tabla, escogiendo el nodo 9 como nodo inicial y N = { 1, 2, 3, 4, 5, 6, 7, 8, 9} Paso 1 2 3 4 5 6 2 3 4 5 6 2 3 4 5 6 2
X
9
C {9}
D
|A(G)| > 0
A(G)
si
9 {9, 6, 7, 9}
11 − 3 = 8
{9, 6, 7, 9}
si
6 {6, 3, 4, 5, 6}
8−4= 4
{9, 6, 3, 4, 5, 6, 7, 9}
si
7 {7, 2, 1, 8, 7}
4−4= 0
{9, 6, 3, 4, 5, 6, 7, 2, 1, 8, 7, 9}
A. Caicedo B., G. Wagner de G., R. M. Méndez
no
parar
Algoritmo de Euler
51
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 b c
d
e g
f Figura 6.
2. Mostrar que el grafo de la figura 7 tiene una trayectoria euleriana, pero no un circuito euleriano. Construir la trayectoria. a c
b
e
d Figura 7.
3. Mostrar que el grafo de la figura 8 no tiene trayectoria euleriana.
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
1
3
14
18
9
18
25 7
10
6
4
5 11
Figura 9.
A. Caicedo B., G. Wagner de G., R. M. Méndez
52
CIRCUITO EULERIANO
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 18 R1
35
30 R4
30
R3
26 24 R5
32 35
72 Figura 10.
A. Caicedo B., G. Wagner de G., R. M. Méndez
30 R6
80
tulo
p í a
C
5
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”.
5.1
Ciclo de Hamilton
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.
Teorema 2
de la existencia de las trayectorias
= y, grad(x)+grad(y) ≥ n − 1, Sea G un grafo conexo sin lazos, con n nodos, n ≥ 3. Si ∀x, y ∈ N, x 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. Basado en el teorema anterior De Dirac, se obtiene el siguiente algoritmo
5.2
paso 1 paso 2 paso 3
paso 6
Algoritmo Hamiciclo Entrar el grafo G con N nodos todos de grado ≥ N/2 Hacer P = (trayectoria vacía) Repita Hasta | N (c)| = N begin paso 4. Escoger z ∈ {N (G) − N (P )}. P trayectoria maximal que contiene a N (P ) y a z paso 5. Hallar C un ciclo sobre N (P ) end Imprimir C y parar.
Ejemplo 2
Aplicar el algoritmo anterior al grafo de la figura 2 para hallar un ciclo hamiltoniano C u
x
v
w
t
y
Figura 2.
Solución El seguimiento del algoritmo se muestra en la tabla siguiente: paso 2 4 5 4 5 6
z x u
P ∅ {x,v,t,w,y }
C
|N (C ) = N |
{x,t,w,y,v,x}
no
{u,w,y,v,x,t,u} {u,w,y,v,x,t,u}
si parar
{u,t,w,y,v,x}
A. Caicedo B., G. Wagner de G., R. M. Méndez
Problema del Agente Viajero
5.3
55
Problema del Agente Viajero
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 hamiltoniano óptimo como se observa en el siguiente gráfico. b
2 2
15 4
a
4
c
Figura 3.
El único circuito hamiltoniano en este grafo es: (a, b)(b, c)(c, a)
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, expresada 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 = x = 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 algoritmo del vecino más cercano. cercano. Este algoritmo algoritmo se describe a continu continuación ación..
5.4
Algoritmo Algoritmo del del Vecino Vecino más Cercano Cercano
paso paso 0.
Entr En trar ar un graf grafoo G = (N, A) completo.
paso paso 1.
Escoge Escogerr cualqu cualquier ier nodo n 1 ∈ N ′ Hacer n = n 1 y w = 0 ( w es el valor del arco, o longitud de la trayectoria) Adicionar n ′ a la lista de nodos en la trayectoria.
paso paso 2.
Marc Ma rcar ar n ′ Mientras existan nodos sin marcar, hacer: begin paso paso 3. 3.
Escoger Escoger cualqu cualquier ier nodo u no marcado que sea el más ′ cercano a n y adicionarlo a la lista de nodos en la trayectoria.
paso paso 4.
= w+ + el valor del arco (n ( n′ , u) Hace Hacerr w = w
paso paso 5.
Hace Hacerr n ′ = u
end paso paso 6.
Adici dicion onar ar n 1 a la lista de nodos en la trayectoria.
paso paso 7.
= w+ + el valor del arco (n ( n′ , n1 ) Hace Hacerr w = w
paso 8.
Imprimir Imprimir la trayect trayectoria. oria. Parar Parar
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
7 6
d
3 c 8 Figura 4.
A. Caicedo B., G. Wagner de G., R. M. Méndez
Algoritmo del Vecino más Cercano
Solución pasoo 0. pas 0. pasoo 1. pas 1.
57
El gra grafo fo dad dadoo es es compl completo eto.. Escogerr arbi Escoge arbitra traria riamen mente te a b como nodo inicial. ′ Hacer n = b , y w = 0 Adicionar n ′ a la lista de nodos en la trayectoria. T = { b}
paso pa so 2.
Marc Ma rcar ar n′ . Aún quedan nodos sin marcar. Ejecutar pasos 3 a 5.
paso pa so 3.
Escoge Esco gerr el nodo nodo a que es el más cercano a b de los adyacentes sin marcar. Adicionarlo a la trayectoria. T = {b, a}.
paso pa so 4.
= w w+ + valor de ( (b, b, a) = 0 + 5 = 5. Hace Ha cerr w =
paso pa so 5.
Hace Ha cerr n ′ = a.
paso pa so 2.
Marc Ma rcar ar n′ . Aún quedan nodos sin marcar. Ejecutar pasos 3 a 5
paso pa so 3.
Esco Es coge gerr el nodo nodo c que es el más cercano a a de los adyacentes sin marcar. Adicionarlo a la trayectoria. T = {b,a,c}.
paso pa so 4.
= w w+ + valor de ( (b, b, c) = 5 + 6 = 11 Hace Ha cerr w =
paso pa so 5.
Hace Ha cerr n ′ = c.
paso pa so 2.
Marc Ma rcar ar n′ . Aún quedan nodos sin marcar. Ejecutar pasos 3 a 5
paso pa so 3.
Escoge Esco gerr el nodo nodo d que es el más cercano a c de los adyacentes sin marcar. Adicionarlo a la trayectoria. T = {b,a,c,d}
paso pa so 4.
= w w+ + valor de ( (c, c, d) = 11 + 3 = 14 Hace Ha cerr w =
paso pa so 5.
Hace Ha cerr n ′ = d
paso pa so 2.
Marc Ma rcar ar n′ . No quedan nodos sin marcar. Continuar
paso 6.
Adicionar Adi cionar nodo inicial inicial a la tra trayect yectoria. oria. T = { b,a,c,d,b }
paso pa so 7.
= w w+ + valor de ( (d, d, b) = 14 + 10 = 24 . Hace Ha cerr w =
pasoo 8. pas
Imprimir Imprim ir la tra traye yecto ctoria ria:: T = {b,a,c,d,b }. El valor del circuito es de 24 unidades. Parar
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.
A. Caicedo B., G. Wagner de G., R. M. Méndez
58
CICLO HAMILTONIANO
Teorema 4 n ≥ 3 3.. Entonces ∀ x, y ∈ N, si grad( Sea G un Sea G un grafo conexo sin lazos, con n con n nodos, nodos, n grad(x) + grad grad((y) ≥ n y x e y no están conectados por un arco, entonces G entonces G es hamiltoniano
Ejemplo 4
1
2
n = 5 y
3 4
5
(2, 3) (2, 3),, no existe (3,, 4) (3 4),, no existe (1,, 5) (1 5),, no existe
Figura 6.
grad(2) + grad(3) = 3 + 2 =5 ≥ 5 grad(3) + grad(4) = 2 + 3 =5 ≥ 5 grad(1) + grad(5) = 3 + 3 =6 ≥ 5
=⇒ G es hamiltoniano
Teorema 5 = n n ≥ 3 3.. Si G tiene al menos 12 (n − 1)( 1)(n n − 2) + 2 arcos, 2 arcos, Sea G un grafo conexo sin lazos, |N (G)| = Sea G Si G G es hamiltoniano entonces G entonces
Ejemplo 5
n = 5 y 12 (5 − 1)(5 − 2 2)) + 2 = 8 aristas, entonces G es hamiltoniano
Figura 7.
Nota: Observe que los grafos de los ejemplos 4 y 5 son hamiltonianos pero no cumplen el teorema de Dirac.
A. Caicedo B., G. Wagner de G., R. M. Méndez
Algoritmo del Vecino más Cercano
59
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
1 12
5
5
6
4
11
2
5
7
3
3 9
10
6
2
4
10
6
7
8
3
8
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
Figura 10.
4. Encontrar un circuito hamiltoniano en el grafo de la figura 11.
A. Caicedo B., G. Wagner de G., R. M. Méndez
60
CICLO HAMILTONIANO Figura 11.
5. Aplique el algoritmo HAMICICLO al grafo de la figura 12. a
b
c
d
f
Figura 12.
A. Caicedo B., G. Wagner de G., R. M. Méndez
e
tulo
p í
a
C
6
LA TRAYECTORIA MÁS CORTA 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. d. Las compañías manufactureras deben enfrentar el problema de reposición de maquinaria después de un período de tiempo dado, por lo cual pueden planear una política de reemplazo que minimice el costo total de operación para la máquina durante dicho periodo. Esta política se puede establecer partiendo de plantear el modelo como un problema de ruta más corta en una red orientada. 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
Algoritmo de FLOYD-WARSHALL (1962): permite encontrar el valor de la trayectoria más corta entre cualquier par de nodos de un grafo dirigido o no dirigido, usando en cada iteración un nodo intermedio.
6.1
Trayectoria Mínima
Definición 6.1 Dados los nodos n i y n j de un grafo G = (N, A) se llama trayectoria mínima o camino mínimo de ni a n j al número de arcos del camino de longitud mínima que va desde n i a n j 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 n i = n j se escribe d(ni , nj ) = 0. Si n i , nj y n k son nodos adyacentes, entonces: d(ni , nj ) + d(nj , nk ) ≥ d(ni , nk )
Si el grafo es simétrico, entonces d(ni , nj ) = d(nj , ni )
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.
6.2
Algoritmo del Camino Mínimo
Para determinar el o los caminos mínimos que van desde el nodo n p 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
paso 1 .
Se marca con 0 el nodo n p (n p = nodo de partida)
paso 2 .
Se marcan con 1 a todos los nodos ni no marcados, adyacentes a n p , y tales que (n p , ni ) ∈ A (o sea que debe existir arco entre n p y n i )
paso 3 .
Se marcan con 2 los nodos nj no marcados, adyacentes a los nodos ni marcados en el paso anterior y tales que (ni , nj ) ∈ A
paso 4 .
Continuar el proceso hasta llegar a marcar el nodo n f , los caminos mínimos quedan determinados por las secuencias de nodos que están marcados en secuencia ascendente 0, 1, 2, . . .
Ejemplo 2
En el grafo de la figura 2 determinar el camino mínimo desde n 0 a n7 n3 n5
n0
n2
n7
n1 n4
n6
Figura 2.
Solución
paso 1 .
Se marca con 0 el nodo n0 , n 0 = n p
paso 2 .
Se marcan con 1 los nodos n 1 , n2 , n3 adyacentes a n0 .
paso 3 .
Se marcan con 2 los nodos n 4 , n5 adyacentes a n 1 , n2 , n3 .
paso 4.
Se marcan con 3 los nodos n6 , n7 adyacentes a n 4 , n5 . Ya se marcó el nodo final n 7. Parar. El camino mínimo desde n0 a n 7 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.
6.3
Trayectoria del Valor Mínimo
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. A. Caicedo B., G. Wagner de G., R. M. Méndez
64
LA TRAYECTORIA MÁS CORTA
6.4
Algoritmo de 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 permanentes. 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 permanentemente. 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 asignado 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. paso 1. paso 2
= s. Fijar l(s) = 0 y p = s. Hacer Asignar un etiqueta temporal l(i) = ∞ a todos los nodos i l(s) permanente ( p es el último nodo al que se le haya asignado una etiqueta permanente). s es el nodo de partida 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) 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 7
4 3 3
a
b 2
2 c
3
d
2
Figura 3.
A. Caicedo B., G. Wagner de G., R. M. Méndez
t
Algoritmo de DIJKSTRA
65
Para efectos de aplicación del algoritmo, el centro de consumo t se llamará el nodo terminal t Solución
Matriz de adyacencias (o de costos); si el grafo no es dirigido 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
paso 0.
Se asignan etiquetas. Hacer p = s y l(s) = permanente s
a
b
c
d
t
0 ∞
∞
∞
∞
∞
si
no
no
no
no
no
s
a
b
c
d
t
l() =
0
4
7
3
∞
∞
permanentes?
si
no
no
si
no
no
l() =
permanentes? paso 1.
Redefinir etiquetas: l(a) = m´ın{∞, 0 + 4} = 4 l(b) = m´ın{∞, 0 + 7} = 7 l(c) = m´ın{∞, 0 + 3} = 3 l(d) = m´ın{∞, 0 + ∞} = ∞ l(t) = m´ın{∞, 0 + ∞} = ∞
Hacer p = c y l(c) = permanente
paso 2.
El nodo t tiene etiqueta temporal. Repetir paso 1.
paso 1.
Redefinir etiquetas: l(a) = m´ın{4, 3 + ∞} = 4 l(b) = m´ın{7, 3 + ∞} = 7 l(d) = m´ın{∞, 3 + 3} = 6 l(t) = m´ın{∞, 3 + ∞} = ∞
Hacer p = a y l(a) = permanente s
a
b
c
d
t
l() =
0
4
7
3
6
∞
permanentes?
si
si
no
si
no
no
A. Caicedo B., G. Wagner de G., R. M. Méndez
66
LA TRAYECTORIA MÁS CORTA
paso 1.
Redefinir etiquetas: l(b) = m´ın{7, 4 + 3} = 7 l(d) = m´ın{6, 4 + 2} = 6 l(t) = m´ın{∞, 4 + ∞} = ∞
Hacer p = d y l(d) = permanente s
a
b
c
d
t
l() =
0
4
7
3
6
∞
permanentes?
si
si
no
si
si
no
paso 2.
El nodo t tiene etiqueta temporal. Repetir paso 1.
paso 1.
Redefinir etiquetas: l(b) = m´ın{7, 6 + ∞} = 7 l(t) = m´ın{∞, 6 + 2} = 8
Hacer p = b y l(b) = permanente s
a
b
c
d
t
l() =
0
4
7
3
6
8
permanentes?
si
si
si
si
si
no
paso 2.
El nodo t tiene etiqueta temporal. Repetir paso 1.
paso 1.
Redefinir etiquetas: l(t) = m´ın{8, 7 + 2} = 8
Hacer p = t y l(t) = permanente
paso 2.
6.5
s
a
b
c
d
t
l() =
0
4
7
3
6
8
permanentes?
si
si
si
si
si
si
El nodo t tiene etiqueta permanente. PARAR La trayectoria más corta a través de la red desde el nodo s hasta t tiene longitud de 8 unidades (el valor de la etiqueta de t )
Algoritmo de Floyd-Warshall
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 . Si Dist[i, k] + Dist[k, j] < Dist[i, j] entonces Dist[i, j] = Dist[i, k] + Dist[k, j] 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 CAMINO. Esta información se puede utilizar para generar los nodos que se encuentran en cada uno de los caminos mínimos. La matriz CAMINO se inicializa en cero y cuando el proceso termina CAMINO[i, j] contiene el número de nodos que ha dado lugar a un cambio en Dist[i, j]. Si CAMINO[i, j] = 0 el camino más corto es un camino que va directo de i a j Si CAMINO[i, j] = k el camino más corto que va de i a j pasa por el nodo k Si Dist[i, k] < ∞ y Dist[k, j] < ∞, entonces el camino va desde i a k y luego de k a j Si Dist[i, k] = ∞ entonces se puede hallar recursivamente un camino desde i hasta k Si Dist[k, j] = ∞ entonces se puede hallar recursivamente un camino desde k hasta j
A. Caicedo B., G. Wagner de G., R. M. Méndez
68
LA TRAYECTORIA MÁS CORTA
Procedimiento (1) Entrar Dist[i, j] =matriz inicial de valores de G begin para i = 1 hasta n para j = 1 hasta n hacer CAMINO[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] CAMINO[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. 3
1 1 8
5
1
4
2
1
4
1
3
Dist =
0 ∞ ∞
1
3
0
1
∞
5
1
0
∞
8
1
4
0
0 0 0 0
CAMINO =
0 0 0 0 0 0 0 0 0 0 0 0
Figura 4.
k = 1 i = 1, j = 1, Dist[1, 1] + Dist[1, 1] = 0 + 0 = 0 < 0?
(no) ⇒
j = 2, Dist[1, 1] + Dist[1, 2] = 0 + ∞ = ∞ < ∞? (no) ⇒ j = 3, Dist[1, 1] + Dist[1, 3] = 0 + ∞ = ∞ < ∞? (no) ⇒ j = 4, Dist[1, 1] + Dist[1, 4] = 0 + 1 = 1 < 1?
(no) ⇒
i = 2, j = 1, Dist[2, 1] + Dist[1, 1] = 3 + 0 = 3 < 3?
(no) ⇒
j = 2, Dist[2, 1] + Dist[1, 2] = 3 + ∞ = ∞ < 0? (no) ⇒ j = 3, Dist[2, 1] + Dist[1, 3] = 3 + ∞ = ∞ < 1? (no) ⇒
A. Caicedo B., G. Wagner de G., R. M. Méndez
Dist[1, 1], CAMINO[1, 1],
no cambia no cambia
Dist[1, 2], CAMINO[1, 2],
no cambia no cambia
Dist[1, 3], CAMINO[1, 3],
no cambia no cambia
Dist[1, 4], CAMINO[1, 4],
no cambia no cambia
Dist[2, 1], CAMINO[2, 1],
no cambia no cambia
Dist[2, 2], CAMINO[2, 2],
no cambia no cambia
Dist[2, 3] CAMINO[2, 3]
no cambia no cambia
Algoritmo de Floyd-Warshall
69
j = 4, 4 , Di Dist st[2 [2,, 1] + Dist + Dist[1 [1,, 4] = 3 + 1 = 4 < 4 < ∞? (si) ⇒ i = 3, j = 1, 1 , Di Dist st[3 [3,, 1] + Dist + Dist[1 [1,, 1] = 5 + 0 = 5 < 5 < 5? 5?
(no) ⇒
j = 2, 2 , Di Dist st[3 [3,, 1] + Dist + Dist[1 [1,, 2] = 5 + ∞ = ∞ < ∞? (no) ⇒ j = 3, 3 , Di Dist st[3 [3,, 1] + Dist + Dist[1 [1,, 3] = 5 + ∞ = ∞ < 0? (no) ⇒ j = 4, 4 , Di Dist st[3 [3,, 1] + Dist + Dist[1 [1,, 4] = 5 + 1 = 6 < 6 < ∞? (si) ⇒ i = 4, j = 1, 1 , Di Dist st[4 [4,, 1] + Dist + Dist[1 [1,, 1] = 8 + 0 = 8 < 8 < 8? 8?
(no) ⇒
j = 2, 2 , Di Dist st[4 [4,, 2] + Dist + Dist[1 [1,, 2] = 1 + ∞ = ∞ < 1? (no) ⇒ j = 3, 3 , Di Dist st[4 [4,, 3] + Dist + Dist[1 [1,, 3] = 4 + ∞ = ∞ < 4? (no) ⇒ j = 4, 4 , Di Dist st[4 [4,, 4] + Dist + Dist[1 [1,, 4] = 0 + 1 = 1 < 1 < 0? 0?
(no) ⇒
Dist[2,, 4] Dist[2 cambia cam bia a 4 CAMINO[2 CAMINO [2,, 4] = 1 Dist[3,, 1] Dist[3 CAMINO[3 CAMINO [3,, 1]
no cambia no cambia
Dist[3,, 2] Dist[3 CAMINO[3 CAMINO [3,, 2]
no cambia no cambia
Dist[3,, 3] Dist[3 CAMINO[3 CAMINO [3,, 3]
no cambia no cambia
Dist[3,, 4] Dist[3 cambia cam bia a 6 CAMINO[3 CAMINO [3,, 4] = 1 Dist[4,, 1] Dist[4 CAMINO[4 CAMINO [4,, 1]
no cambia no cambia
Dist[4,, 2] Dist[4 CAMINO[4 CAMINO [4,, 2]
no cambia no cambia
Dist[4,, 3] Dist[4 CAMINO[4 CAMINO [4,, 3]
no cambia no cambia
Dist[4,, 4] Dist[4 CAMINO[4 CAMINO [4,, 4]
no cambia no cambia
Las matrices revisadas al final de estas iteraciones son: Para k = 1 (nodo intermedio o pivote) Dist1 =
Para k = 2 Dist2 =
Para k = 3 Dist3 =
Para k = 4
0 ∞ ∞ 1 3 0 1 4 5 1 0 6 8 1 4 0
0 ∞ ∞ 1 3 0 1 4 4 1 0 5 4 1 2 0
0 ∞ ∞ 1 3 0 1 4 4 1 0 5 4 1 2 0
Dist4 =
0 3 4 4
2 0 1 1
3 1 0 2
1 4 5 0
CAMINO1 =
0 0 0 0
0 0 0 0
0 0 0 0
0 1 1 0
CAMINO2 =
0 0 2 2
0 0 0 0
0 0 0 2
0 1 2 0
CAMINO3 =
0 0 2 2
0 0 0 0
0 0 0 2
0 1 2 0
CAMINO4 =
0 0 2 2
A. Caicedo B., G. Wagner de G., R. M. Méndez
4 0 0 0
4 0 0 2
0 1 2 0
70
LA TRAYECTORIA MÁS CORTA
La matriz Dist4 posee los valores de las distancias más cortas entre cualquier par de nodos. Por Dist(1 (1,, 3) = 3, Dist Dist(3 (3,, 4) = 5, etc. ejemplo Dist La matriz CAMINO4 sirve para establecer cuáles nodos conforman los caminos más cortos. Por CAMINO[3,, 4] = 2 indica que 2 es un nodo ejemplo establecer el camino más corto de 3 a 4. CAMINO[3 intermedio entre 3 y 4, es decir, 3
2
4
CAMINO[2 [2,, 4] = 1 indica que 1 es un nodo intermedio entre 2 y 4, es decir, Pero CAMINO 3
2
1
4
CAMINO[3,, 2] = 0, CAMINO[2 CAMINO[2,, 1] = 0, CAMINO CAMINO[1 [1,, 4] = 0, entonces no hay más nodos Como CAMINO[3 intermedios.
El camino óptimo entre 3 y 4 es 3
1
2
3
1
1
4
Dist[3 [3,, 4] = 5 con longitud= 5 como lo indica la matriz Dist
Otra forma de presentar el procedimiento de Floyd-Warshall es:
Procedimiento (2) Entrar la matriz de distancias Dist del grafo G Para k = 1 hasta n = k, 1 hasta n Para i = k, 1 hasta n Para j Dist[i, j ] = m´ın(Dist( Dist(i, j ),Dist( ,Dist(i, k ) + Dist( Dist(k, j )) hacer Dist[
Ejemplo 5
Hallar la matriz de distancias más cortas entre todas las parejas de nodos del siguiente grafo no dirigido 5 1
1
4
3
2
9
5 4
3
7
1
6
1 2 3 Dist = Dist = 4 5 6
7
1 2 3 4 5 6 0 3 5 1 ∞ ∞ 3 0 ∞ ∞ 9 ∞ 5 ∞ 0 7 7 1 1 ∞ 7 0 ∞ 4 ∞ 9 7 ∞ 0 ∞ ∞ ∞ 1 4 ∞ 0
Figura 5.
A. Caicedo B., G. Wagner de G., R. M. Méndez
Algoritmo de Floyd-Warshall
Dist = Dist =
71
0 3 5 1 ∞ ∞ 3 0 ∞ ∞ 9 ∞ 5 ∞ 0 7 7 1 1 ∞ 7 0 ∞ 4 ∞ 9 7 ∞ 0 ∞ ∞ ∞ 1 4 ∞ 0
Aplicamos el algoritmo de Floyd-Warshall, Floyd-Warshall, y para ello en cada iteración fijamos un vértice intermedio. k = = 1 1 Iteración: nodo intermedio = k La matriz en simétrica, por lo que solamente hará falta calcular el triángulo superior de las distancias. a
d23 = m´ın(d23 , d21 + d13 ) = 8,
d24 = m´ın(d24 , d21 + d14 ) = 4
d25 = m´ın(d25 , d21 + d15 ) = 9,
d26 = m´ın(d26 , d21 + d16 ) = ∞
d34 = m´ın(d34 , d31 + d14 ) = 6,
d35 = m´ın(d35 , d31 + d15 ) = 7
d36 = m´ın(d36 , d31 + d16 ) = 1,
d45 = m´ın(d45 , d41 + d15 ) = ∞
d46 = m´ın(d46 , d41 + d16 ) = 4,
d56 = m´ın(d56 , d51 + d16 ) = ∞
La matriz de distancias después de la primera iteración es:
Dist1 =
0 3 3 0 5 8 1 4 ∞ 9 ∞ ∞
k = = 2, usando Dist1 2 Iteración: nodo intermedio = k a
5 1 ∞ ∞ 8 4 9 ∞ 0 6 7 1 6 0 ∞ 4 7 ∞ 0 ∞ 1 4 ∞ 0
d13 = m´ın(d13 , d12 + d23 ) = 5 ,
d14 = m´ın(d14 , d12 + d24 ) = 1
d15 = m´ın(d15 , d12 + d25 ) = 12,
d16 = m´ın(d16 , d12 + d26 ) = ∞
d34 = m´ın(d34 , d32 + d24 ) = 6 ,
d35 = m´ın(d35 , d32 + d25 ) = 7
d36 = m´ın(d36 , d32 + d26 ) = 1 ,
d45 = m´ın(d45 , d42 + d25 ) = 13
d46 = m´ın(d46 , d42 + d26 ) = 4 ,
d56 = m´ın(d56 , d52 + d26 ) = ∞
La matriz de distancias después de esta iteración es:
Dist2 =
0 3 3 0 5 8 1 4 12 9 ∞ ∞
5 1 12 12 ∞ 8 4 9 ∞ 0 6 7 1 6 0 13 13 4 7 1133 0 ∞ 1 4 ∞ 0
A. Caicedo B., G. Wagner de G., R. M. Méndez
72
LA TRAYECTORIA MÁS CORTA
3 Iteración: nodo intermedio = k = 3, usando Dist2 a
d12 = m´ın(d12 , d13 + d32 ) = 3,
d14 = m´ın(d14 , d13 + d34 ) = 1
d15 = m´ın(d15 , d13 + d35 ) = 12,
d16 = m´ın(d16 , d13 + d36 ) = 6
d24 = m´ın(d24 , d23 + d34 ) = 4,
d25 = m´ın(d25 , d23 + d35 ) = 9
d26 = m´ın(d26 , d23 + d36 ) = 9,
d45 = m´ın(d45 , d43 + d35 ) = 13
d46 = m´ın(d46 , d43 + d36 ) = 4,
d56 = m´ın(d56 , d53 + d36 ) = 8
La matriz de distancias después de esta iteración es:
Dist3 =
0 3 5 1 12 6
3 0 8 4 9 9
5 1 12 6 8 4 9 9 0 6 7 1 6 0 13 4 7 13 0 8 1 4 8 0
4 Iteración: nodo intermedio = k = 4, usando Dist3 a
d12 = m´ın(d12 , d14 + d42 ) = 3 ,
d13 = m´ın(d13 , d14 + d43 ) = 5
d15 = m´ın(d15 , d14 + d45 ) = 12,
d16 = m´ın(d16 , d14 + d46 ) = 5
d23 = m´ın(d23 , d24 + d43 ) = 8 ,
d25 = m´ın(d25 , d24 + d45 ) = 9
d26 = m´ın(d26 , d24 + d46 ) = 8 ,
d35 = m´ın(d35 , d34 + d45 ) = 7
d36 = m´ın(d36 , d34 + d46 ) = 1 ,
d56 = m´ın(d56 , d54 + d46 ) = 8
La matriz de distancias después de esta iteración es:
Dist4 =
0 3 5 1 12 5
3 0 8 4 9 8
5 1 12 5 8 4 9 8 0 6 7 1 6 0 13 4 7 13 0 8 1 4 8 0
5 Iteración: nodo intermedio = k = 5, usando Dist4 a
d12 = m´ın(d12 , d15 + d52 ) = 3 ,
d13 = m´ın(d13 , d15 + d53 ) = 5
d14 = m´ın(d14 , d15 + d54 ) = 1 ,
d16 = m´ın(d16 , d15 + d56 ) = 5
d23 = m´ın(d23 , d25 + d53 ) = 8 ,
d24 = m´ın(d24 , d25 + d54 ) = 4
d26 = m´ın(d26 , d25 + d56 ) = 8 ,
d34 = m´ın(d34 , d35 + d54 ) = 6
d36 = m´ın(d36 , d35 + d56 ) = 1 ,
d46 = m´ın(d46 , d45 + d56 ) = 4
La matriz de distancias después de esta iteración es: A. Caicedo B., G. Wagner de G., R. M. Méndez
Algoritmo Matricial
Dist5 = Dist4 =
0 3 5 1 12 5
3 0 8 4 9 8
73
5 1 12 5 8 4 9 8 0 6 7 1 6 0 13 4 7 13 0 8 1 4 8 0
6 Iteración: nodo intermedio = k = 6, usando Dist5 a
d12 = m´ın(d12 , d16 + d62 ) = 3,
d13 = m´ın(d13 , d16 + d63 ) = 5
d14 = m´ın(d14 , d16 + d64 ) = 1,
d15 = m´ın(d15 , d16 + d65 ) = 12
d23 = m´ın(d23 , d26 + d63 ) = 8,
d24 = m´ın(d24 , d26 + d64 ) = 4
d25 = m´ın(d25 , d26 + d65 ) = 9,
d34 = m´ın(d34 , d36 + d64 ) = 5
d35 = m´ın(d35 , d36 + d65 ) = 7,
d45 = m´ın(d45 , d46 + d65 ) = 12
La matriz de distancias después de esta iteración es:
Dist6 =
0 3 5 1 12 5
3 0 8 4 9 8
5 1 12 5 8 4 9 8 0 5 7 1 5 0 12 4 7 12 0 8 1 4 8 0
Ya se han hecho todas las iteraciones posibles. Por tanto, el camino mínimo entre dos vértices cualesquiera del grafo será el obtenido en la matriz final. En este caso, el camino mínimo entre 3 y 4 vale 5.
6.6
Algoritmo Matricial
Este algoritmo propuesto por SHUMBEL en Structure in Communication Nets, Symposium of Information 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 m ij se definen de dos formas. a. Si se desea encontrar la trayectoria de valor mínimo, se establece: mij =
valor, vr del arco, si el arco existe X, si el arco no existe. Con X → ∞ 0, si hay un bucle o si i = j
A. Caicedo B., G. Wagner de G., R. M. Méndez
74
LA TRAYECTORIA MÁS CORTA
b. Si se desea encontrar la trayectoria de valor máximo, se define:
mij =
vr del arco, si el arco existe si el arco no existe. Con X → ∞ si hay un bucle o si i = j
valor, −X, 0,
La matriz de trayectorias de valor óptimo es M n−1 en donde n es el número de nodos del grafo. Si en un momento dado se obtiene que M m = M m−1 , siendo m < n − 1 la matriz M m es la matriz de trayectorias de valor óptimo, o sea qu la matriz de valor óptimo se obtiene del cálculo de las siguientes potencias: M , M 2 , M 3 , M 4 , . . . donde las operaciones matriciales se definen de la siguiente forma: a. Si se trata de hallar la trayectoria de valor mínimo: El producto de las dos matrices dará origen a otra matriz C obtenida así: cij =mínk (aik + bkj ) =mínk (ai1 + b1j , ai2 + b2j , ai3 + b3j , . . . , ain + bnj )
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. b. Si se trata de hallar la trayectoria de valor máximo: Los elementos de la matriz producto son de la forma: cij =máxk (aik + bkj ) =máxk (ai1 + b1j , ai2 + b2j , ai3 + b3j , . . . , ain + bnj )
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 8
x2
3 x1
4
x4
5
1
3
4
x6
3
7
6 x3
4
x5
Figura 6.
A. Caicedo B., G. Wagner de G., R. M. Méndez
Algoritmo Matricial
75
Solución La matriz de costos asociados al grafo es: 1 2 3 M = 4 5 6
1 0 X X X X X
2 3 4 3 7 X 0 3 8 X 0 1 X X 0 X X 4 X X X
5 X 4 4 3 0 X
6 X X X 5 6 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:
M 2 =
0 X X X X X
3 0 X X X X
6 8 3 4 0 1 X 0 X 4 X X
7 4 4 3 0 X
X 10 6 5 6 0
El segundo producto es: M 2 × M = M 3 Se continua el proceso de obtener nuevas matrices potencias de M hasta hallar dos matrices potencias que coincidan en todos sus elementos. Para este ejemplo se llegó a que:
M 5 = M 6 =
0 X X X X X
3 0 X X X X
6 7 3 4 0 1 X 0 X 4 X X
7 4 4 3 0 X
12 9 6 5 6 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.
A. Caicedo B., G. Wagner de G., R. M. Méndez
76
LA TRAYECTORIA MÁS CORTA
6.7
La Trayectoria Óptima
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 pro cede de la siguiente forma: Sea S una matriz cuyos elementos sij son determinados de la siguiente forma: S ij =
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 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 S = 4 5 6
1 2 3 4 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0
5 6 0 0 1 0 1 0 1 1 0 1 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: 3 4 1
5
6
6
⇒ V r = 16
5
⇒ V r = 12
6
3 4
3
4 5
1
3
4 5
4
5
6
⇒ V r = 19
6
2 4
4
5
6
⇒ V r = 16
6
⇒ V r = 16
6
⇒ V r = 13
6 Figura 7.
A. Caicedo B., G. Wagner de G., R. M. Méndez
La Trayectoria Óptima
77
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 maquinaria. 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
7 1
5
10
5
10
10 6 8
3
5
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.
A. Caicedo B., G. Wagner de G., R. M. Méndez
78
LA TRAYECTORIA MÁS CORTA
Aplicación del grafo anterior M
M 2
M
0 x 10 x 8 7 0 5 7 11 5 x 0 6 8 8 6 7 0 10 x 10 8 x 0 M
0 x 10 x 8 7 0 5 7 11 5 x 0 6 8 8 6 7 0 10 x 10 8 x 0
⊕
⊕
0 x 10 x 8 7 0 5 7 11 5 x 0 6 8 8 6 7 0 10 x 10 8 x 0 M 2
0 18 10 16 7 0 5 7 5 12 0 6 8 6 7 0 15 10 8 14
8 11 8 10 0
=
=
0 18 10 16 7 0 5 7 5 12 0 6 8 6 7 0 13 10 8 14
8 11 8 10 0
M 3 0 18 10 16 7 0 5 7 5 12 0 6 8 6 7 0 13 10 8 14
8 11 8 10 0
Se encontró que M 2 = M 3 , 3 ≤ n − 1, entonces M 3 contiene los valores de las trayectorias mínimas. Por ejemplo, para ir del nodo 1 al 2 la trayectoria mínima vale 18 pasando por el nodo 5. Para facilitar la búsqueda de las trayectorias mínimas, Shumbel definió una mtriz S de la siguiente forma: S ij =
si el valor del arco n o cambió entre M y M m en la diagonal, si se conservó la x en M m , y en cualquier otro caso
1, 0,
Comparando M y M 3 se obtiene: 1 2 S = 3 4 5
1 2 3 4 5 0 0 1 0 1 1 0 1 1 1 1 0 0 1 1 1 1 1 0 1 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
= 33
5
10
2
= 36
10
2
7
4
= 35
5
3
6
4
= 29
4
7
3
= 32
4
6
2
= 28
6 6 3 10
4
10
Si se inicia con la pintura 1 la secuencia óptima es
8 5
1−5−3−4−2
1 8
10
2
7
5 8
3
6
con un costo de 28
Figura 9.
A. Caicedo B., G. Wagner de G., R. M. Méndez
La Trayectoria Óptima
6 1
3
10 8
8
5
3
6
5
2
1 7 6
8
4 5
= 33
3
6
4
= 29
1
8
5
= 27
5 10
3
8
5
= 33
8
5
8
3
= 31
5
1
8
5
= 27
8 7 10
5
5
4
5
10
5
1 7
4
79
3
2−3−4−1−5 2−4−3−1−5
8
8
3
2−5−3−4−1
las tres con un costo de 27
5
5
Si se inicia con la pintura 2 existen 3 secuencias óptimas
5
1
= 30
8
1
= 27
1
3
6
4
Figura 10.
1
8
5
5
10
2
7
4
= 30
1
8
5
10
2
= 30
1
8
5
= 27
2
7 11
6 3
6
4
6
5
10 8
5
10
5
10
2 1
2
7 7
4
Si se inicia con la pintura 3 la secuencia óptima es 3−4−2−1−5
7
1
= 33
8
1
= 33
Figura 11.
A. Caicedo B., G. Wagner de G., R. M. Méndez
con un costo de 27
80
LA TRAYECTORIA MÁS CORTA
3
8
5
10
2
= 36
2
5
5
= 31
5
10 8
3
8
5
= 31
5
8
3
= 29
1
8
5
= 24
10 1
8
3 8
1
10 8
7 4
6
2
5
3
5 8
Si se inicia con la pintura 4 la secuencia óptima es
con un valor de 24
5 11 7 10 3
5
5 8
10
5
8
3
5
1
= 30
1
8
5
10
2
= 30
5
10
2
7
1
= 32
1
10
3
= 37
2
7 5
3
5
1
= 30
4
= 33
8 3
5
4−2−3−1−5
En este orden se debe producir las 5 pinturas para que el costo sea mínimo.
1 Figura 12.
7 2
1
10
3 1
3
5 6
5
10
4
6
8
1
Iniciando con la pintura 5 la secuencia óptima es
= 29
5 8
5 3
5−3−4−2−1
1
6 4
8 2
con un costo de 27.
1 2
7
1
= 27
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.
A. Caicedo B., G. Wagner de G., R. M. Méndez
La Trayectoria Óptima
81
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 11
A
3
D 5
10
6
2 4
3
G
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 3
1
5
4 2
5 2
7 4
6
7
2
5
3
8 8
6 8
3 3
2
9 4 11
4 6
1 10
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
1
2
3
4
5
12
19
33
49
14
23
38
16
26
2 3 4
1
2
3
4
5
13 Figura 17.
Tabla 1.
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
1 2
5 2
4 1
3
2 2 5
3
2 10
4
1
5
2
3 4
1 6
2
4
5
1
1
4
4 2
a)
b)
7
7
1
10
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 2
3
1 4
5 4
3
5
6
7
3
A. Caicedo B., G. Wagner de G., R. M. Méndez
5
tulo
p í
a
C
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.
7.1
Conceptos Básicos
Una definición amplia del concepto de árbol es la siguiente: Definición 7.1 Un grafo G conexo que no tenga ciclos es llamado un árbol.
Dicho de otra forma se tiene: 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 v 0 en N con la propiedad de que haya una trayectoria única en T de v 0 a cualquier otro vértice en N , pero ninguna trayectoria de v 0 a v 0
El vértice v0 es único y es llamado la raíz del árbol T ; a T se le llamará árbol arraigado en v0 y se notará (T, v0 )
83
84
ÁRBOLES
Ejemplo 1
Los grafos de la figura 1 son árboles
Figura 1.
Ejercicio 1
Determinar cuáles de los grafos de la figura 2 son árboles
Figura 2.
Algunas de las propiedades simples de un árbol se encuentran en el siguiente teorema. 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 A. Caicedo B., G. Wagner de G., R. M. Méndez
Conceptos Básicos
85
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
En un árbol arraigado en v 0 , la trayectoria entre v 0 y cualquier otro vértice v n es única y la longitud de dicha trayectoria se llama el nivel del vértice v n El nivel donde terminan las aristas adyacentes a v 0 se llaman vértices de nivel 1 y se considera que v 0 está en el nivel 0. A v 0 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 v 0 . Recursivamente, los descendientes de v 0 pueden ser designados como raíces de los subárboles obtenidos al borrar la raíz del árbol original. En la figura 3 se muestra un árbol con sus correspondientes niveles o grupos de descendientes. nivel 0
v0
v4
v1
v2
v5
v6
nivel 1
v3
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 v 3 es antecesor de los vástagos v 7 , v 8 , v 9 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 v 4 , v 5 , v 6 , v7 , v 8 , v 9 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. A. Caicedo B., G. Wagner de G., R. M. Méndez
86
ÁRBOLES
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, arreglando (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 c
b e
d
g
f
h
i
Figura 4. Arbol ordenado
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 . Sea T (v) la restricción de la relación T a B que es T ⊂ (B × B) entonces T (v) también es un árbol arraigado con raíz v . Luego T (v) es un subárbol de T . 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
v9
v5
v4
v2
v6
v10
v7
Figura 5.
A. Caicedo B., G. Wagner de G., R. M. Méndez
v8
Árbol Binario
v9 T (v5 )
87
v5
v4
v2
v6
v10
v7
T (v4 )
v8 T (v2 )
Figura 6.
7.3
Árbol Binario
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 Si n ∈ Z+ , se dice que T es un árbol n-ario si cada vértice tiene máximo n vástagos. Si todos los vértices de T , excepto las hojas, tienen exactamente n vástagos, se dice que T es un árbol n-ario completo . Particularizando, un árbol binario es aquel que tiene como máximo dos descendientes (vástagos) para cada vértice excepto para las hojas.
Definición 7.11 Un árbol binario es un conjunto finito de cero o más nodos tal que 1. Existe un nodo denominado la raíz del árbol. 2. Cada nodo puede tener 0, 1 ó 2 vástagos conocidos como vástago izquierdo y vástago derecho.
Ejemplo 5
Los árboles de la figura 7 son binarios. El de la derecha es un árbol binario completo.
Figura 7.
A. Caicedo B., G. Wagner de G., R. M. Méndez
88
ÁRBOLES
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
Figura 8.
Teorema 2 Un árbol binario completo de altura h tiene a lo máximo 2h vértices en el nivel h
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 N k = número de vértices en el nivel k , entonces:
N k+1 ≤ 2N k ≤ 2 2k = 2 k+1 A. Caicedo B., G. Wagner de G., R. M. Méndez
Árboles Etiquetados
89
Corolario Un árbol binario completo de altura h tiene como máximo 2 h+1 − 1 vértices Prueba Por el teorema anterior se sabe que en el nivel k hay como máximo 2 k vértices. Así, el número total de vértices en el árbol es a lo máximo 1 + 2 + 4 + . . . + 2 k + . . . + 2h =
7.4
1 − 2h+1 = 2 h+1 − 1 1−2
Árboles Etiquetados
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. Reglas para representar expresiones:
a. Cada hoja es etiquetada por un solo operando b. Cada nodo interior es etiquetado por un operador A. Caicedo B., G. Wagner de G., R. M. Méndez
90
ÁRBOLES
Ejemplo 8
El árbol de la figura 10 representa la expresión: (x − (y − (x + y))) × ((3 ÷ (2 × y)) × 7)
7.5
Árbol Posicional
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 sucesió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, . . . Un árbol etiquetado en esta forma se le llama árbol posicional ×
−
×
x
−
÷
y
+
7 ×
3 y
x
y
2
Figura 10.
Ejemplo 9
El árbol de la figura 11 es 3-ario posicional.
1 1
3
2
1
1 3
1
2
3
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 v D 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 v D
I
I
D
D
D
D
D
I
I
D
I
Figura 12.
7.6
Otras Formas de Árboles Ordenados
A) Árbol posicional 3-ario, ordenado mediante etiquetamiento lexicográfico numérico 0
1 2 1.1
3
2.1
3.3
1.2
1.1.1
1.1.2
1.1.3
2.3
2.1.2
2.1.3
3.2.1
3.2
3.2.2
3.2.3
3.3.3
Figura 13.
B) Árbol binario posicional, ordenado mediante etiquetamiento lexicográfico alfabético r a
a.a
a.a.a
a.a.b a.b.a
b
a.b
b.a
a.b.b b.a.a
b.b
b.a.b b.b.a
Figura 14.
A. Caicedo B., G. Wagner de G., R. M. Méndez
b.b.b
92
ÁRBOLES
C) Árbol binario posicional, ordenado mediante etiquetamiento binario r 0
0.0
0.0.0
1
0.1
0.0.1 0.1.0
1.0
0.1.1 1.0.0
1.1
1.0.1 1.1.0
1.1.1
Figura 15.
7.7
Representación Matricial
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. En la representación matricial se usan dos arreglos: vástagos izquierdos y vástagos derechos. Si n es el número de vértices de un árbol binario, entonces: VASTIZQ[i] = j si y solo si j es un vástago izquierdo de i . Si i no tiene vástagos izquierdos, entonces V ASTIZQ[i] = 0. Similarmente: V ASTDER[i] = j si y solo si j es un vástago derecho de i . Si i no tiene vástagos derechos, entonces, V ASTDER[i] = 0. Ejemplo 10
En la figura 16 se muestra un árbol binario no posicional y su correspondiente representación matricial i
1 2 3 4 5 6 7 8 9
hijoizq 2 3 0 0 0 7 0 0 0
hijoder 6 4 0 5 0 8 0 9 0
1 2 3
6 4
7 5
8 9
Figura 16.
Ejemplo 11
La figura 17 muestra un árbol binario etiquetado y su correspondiente representación matricial
A. Caicedo B., G. Wagner de G., R. M. Méndez
Representación Secuencial i
1 2 3 4 5 6 7 8 9
hijoizq 2 4 6 0 0 0 8 0 0
dato × − −
a b c ÷
d e
93 1
hijoder 3 5 7 0 0 0 9 0 0
−
×
2
3
−
a
b
c
÷
4
5
6
7 8
9
d
e
Figura 17.
7.8
Representación Secuencial
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: a. La raíz se guarda en T [1] 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] = NULO 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 1
2
3
4
5
6
7
T [I ] 60
31
70
10
40
−
100
I
8
9
10
11
12
13
14
...
− 14
20
−
−
−
80
...
1 31
60
2 4 10
3 40 5
14 9
20 19
70 7 80 14
100
Figura 18.
A. Caicedo B., G. Wagner de G., R. M. Méndez
94
ÁRBOLES
7.9
Representación Representación Enlazada
Un árbol binario también se puede mantener en memoria mediante una representación enlazada de 3 DER R y una variable puntero llamada RAIZ que arreglos paralelos que se pueden llamar I ZG , DATO, DE contendrá la posición de la raíz R de T . Cada nodo N de T corresponde a una posición K , tal que: DATO[ DATO[K ] : contiene los datos del nodo N . I ZQ[ ZQ [K ] : contiene la localización del vástago izquierdo del nodo N DER DE R[K ] : contiene la localización del vástago derecho del nodo N . Una representación que haga uso de estos tres conceptos se llama una lista doblemen doblemente te enlazada 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.
DATO
Figura 19.
Cada célula corresponde a un nodo; la parte del dato contiene el valor de la etiqueta del nodo. Los apuntadores 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 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
b
e
c
f
d
a)
1)
Inicio
2)
a
3)
b
6)
e
g
Figura 20.
4) 7)
c
5)
f b)
A. Caicedo B., G. Wagner de G., R. M. Méndez
8)
d g
Conversión de un Árbol General a Binario
i 1 2 3 4 5 6 7 8
IZQ 2 3 6 0 0 0 0 0
DAT O nil a b c d e f g
95
DE R 0 0 4 5 0 7 8 0
Tabla 1.
Conversión Conversión de un Árbol Árbol General General a Binario Binario
7.10
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
a. Tomar la raíz de A como la raíz de B 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 Repetir los pasos pasos 2 y 3 con los nodos del nivel 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 resultante aproximad aproximadamen amente te 30o a la derecha para poder diferenciar entre los subárboles 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
c
b
e
d
c f
e
g
f
h
i
d g
j
i
k k
l
l
Figura 21.
A. Caicedo B., G. Wagner de G., R. M. Méndez
h
j
96
ÁRBOLES
7.11
Recorrido Recorrido de un Árbol Árbol Binario Binario
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: posicional: recorrido pre-orden, pre-orden, recorrido recorrido in-orden y recorrido recorrido post-o p ost-orden. rden. Las subrutinas 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. Visi Visita tar r raíz raíz (v ) T (vI ),vi ) 2. Si vI existe llamar llamar Anterior( Anterior(T ( T (vD ),vD ) 3. Si vD existe llamar llamar Anterior Anterior( (T ( Fin subrutina subrutina
B. Recorrido in-orden o interior o simétrico Subrutina Interior(T ,v ) T (vi ),vi ) 1. Si vi existe llamar llamar Interior( Interior(T ( 2. Visi Visita tar r raíz raíz (v ) 3. Si vD existe llamar llamar Interior Interior( (T ( T (vD ),vD ) Fin subrutina subrutina
C. Recorrido post-orden o posterior Subrutina Posterior(T ,v ) T (vi ),vi ) 1. Si vi existe llamar llamar Posterior( Posterior(T ( T (vD ),vD ) 2. Si vD existe llamar llamar Posterior Posterior( (T ( 3. Visi Visita tar r raíz raíz (v ) Fin subrutina 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 izquierdo, 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 A
T L
Z R
N
Figura 22.
A. Caicedo B., G. Wagner de G., R. M. Méndez
Recorrido de un Árbol Binario
97
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 ÷
−
×
y
x 2
−
2 3
5
1
x
+ 7
y
20 9
10 8 6 4
Figura 23.
Haciendo el recorrido se obtiene:
subárbol izquierdo
raíz
subárbol derecho
(x − y)
÷
(2 × (x − (y + 20)))
Ejemplo 17
Ejecutar los recorridos PRE-ORDEN, IN-ORDEN y POST-ORDEN al siguiente árbol r
a
c
b
e
d
g
h
i
Figura 24.
A. Caicedo B., G. Wagner de G., R. M. Méndez
f
98
ÁRBOLES
a) Recorrido PRE-ORDEN o anterior T r = r, T a , T b = r, a, T c , T d , T b
r
= r, a, c, d, T g , T h , T i , T b = r,a,c,d,g,h,i,b,T e , T f
a
c
= r,a,c,d,g,h,i,b,e,f
b
e
d
g
h
f
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 B) Recorrido IN-ORDEN o interior Este recorrido también es llamado recorrido HOJAS-RAIZ-HOJAS porque para cada subárbol primero se leen las hojas del hijo izquierdo, luego la raíz y después las otras hojas del subárbol. Primero se recorre el subárbol izquierdo, luego la raíz y después el subárbol derecho. T r = T a ,r,T b = T c , a , Td ,r,T b
r
= c, a, T g ,d,T h , T i ,r,T b = c,a,g,d,h,i,r,T e , b , Tf
a
c
= c,a,g,d,h,i,r,e,b,f
b
e
d
g
h
f
i
Figura 26.
C) Recorrido POST-ORDEN o posterior Este recorrido también es llamado recorrido HOJAS-RAICES porque para cada subárbol primero se leen las hojas y luego la raíz. La raíz principal del árbol se lee de último.
A. Caicedo B., G. Wagner de G., R. M. Méndez
Notación Polaca
99
T r = T a , T b , r = T c , T d , a , Tb , r
r
= c, T g , T h , T i ,d,a,T b , r = c,g, h, i, d, a, T e , T f , b , r
a
c
= c,g,h,i,d, a, e, f,b,r
b
e
d
g
h
f
i
Figura 27.
7.12
Notación Polaca
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. El recorrido preorden produce la notación polaca directa o prefija El recorrido inorden produce la notación infija o algebraica normal El recorrido postorden produce la notación polaca inversa o sufija Cuando el árbol representa una expresión algebraica, el recorrido inorden produce la expresión algebraica, 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 original. 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: a. F x y , en la notación polaca directa b. x y F , en la notación polaca inversa donde F =operador algebraico, x, y = operandos (variables)
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
+
a
b
x
b
Figura 28.
a) El recorrido inorden retornará la expresión algebraica dada. b) El recorrido preorden produce: ÷ − + x ÷ a b y × − ÷ a + b x y x
Notación polaca directa de la expresión algebraica inicial c) El recorrido postorden produce: xab ÷ xy − abx + ÷ y − x × ÷
Notación polaca inversa de la expresión algebraica inicial. La evaluación numérica de las dos últimas expresiones cuando a = 10, b = 2, x = 3, y = 4 es: Preorden (F x y) ÷ − + 3 ÷ 10 2 4 × − ÷ 10 + 2 3 4 3
÷ − + 3 ÷ −
5
÷
4
÷
4
4 × − ÷ 10 4 × −
8
×
4/(−6) = − 2/3
Postorden (x y F )
5
2
43
4 3
(−2)
3
(−6)
3 10 2 ÷ + 4 − 10 2 3 + ÷ 4 − 3 × ÷
3
5
+ 4 − 10
5
÷ 4 − 3 × ÷
4 −
2
4 − 3 × ÷
8
4
4
(−2)
3 × ÷
(−6)
4/(−6) = − 2/3
A. Caicedo B., G. Wagner de G., R. M. Méndez
÷
Búsqueda y Ordenamiento con Árboles Binarios
7.13
101
Búsqueda y Ordenamiento con Árboles Binarios
Los algoritmos de búsqueda y ordenamiento tienen un lugar preponderante en la teoría de la computación puesto que facilitan la tarea de organizar grandes grupos de datos y buscar un dato específico dentro de un archivo de datos. En esta unidad se hará uso de la estructura de árbol para realizar un ordenamiento de un conjunto de elementos. 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. Definición 7.16 Árbol Binario de Búsqueda Sea T un árbol binario. T se dice ser un árbol binario de búsqueda o árbol ordenado, si cada nodo N de T cumple la siguiente propiedad: “El valor de N es menor que cualquier valor de su subárbol derecho y es mayor que cualquier valor de su subárbol izquierdo”
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 <
8
50 >
>
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 A. Caicedo B., G. Wagner de G., R. M. Méndez
102
ÁRBOLES
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.
Siguiendo el algoritmo anterior se tiene: paso 0. Construir el árbol de búsqueda. Escoger arbitrariamente a 35 como ráiz 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
8
40
26
38
19
52
45
20
Figura 31.
El camino recorrido al aplicar el algoritmo se muestra con línea doble. paso 3. Se recorre el árbol en In-orden y se obtiene A = { 8, 17, 19, 20, 26, 35, 38, 45, 52} A. Caicedo B., G. Wagner de G., R. M. Méndez
Búsqueda y Ordenamiento con Árboles Binarios
103
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úsqueda de la figura 32. D
B
A
F
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 El recorrido in-orden produce el arreglo ordenado {A,B,C,D ,E,F,G}
A. Caicedo B., G. Wagner de G., R. M. Méndez
104
ÁRBOLES
Ejercicios Capítulo 7
a. Determinar cuáles de los grafos de la figura 33 son árboles
Figura 33.
b. Para el árbol de la figura 34 establecer cada uno de los subárboles a
c
b
d
e
g
f
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 d. Trazar un árbol ordenado según un orden alfabético y de 3 niveles e. Trazar un árbol trinario ordenado de 4 niveles f. Trazar un árbol binario incompleto y uno completo g. Trazar un árbol binario equilibrado o balanceado h. Determinar si el árbol binario de la figura 35 es AVL y explique por qué.
Figura 35.
i. Trazar un árbol binario incompleto de profundidad 4 j. Trazar un árbol binario completo de altura 3 k. Trazar un árbol trinario incompleto de altura 2 A. Caicedo B., G. Wagner de G., R. M. Méndez
Búsqueda y Ordenamiento con Árboles Binarios
105
l. Representar con un árbol binario la siguiente expresión (3 + (x − y) ÷ 8) − (6 − y) + ((3 × y − 5) − 9 × x)
m. Escribir la expresión algebraica representada por el siguiente árbol ÷
−
×
÷
+
1
−
6 +
3
−
3 +
3 x
5
×
y
x y
x
Figura 36.
n. Elaborar el análisis (recorrido) anterior, interior y posterior de los árboles de la figura 37 x
a
×
y
z s
−
2
b
d
t
+
u v
2
3
a)
c
1
b)
g
i
j
h
c)
Figura 37.
ñ. Representar en forma de listas enlazadas los tres árboles del ejercicio anterior o. Convertir en binario el árbol de la figura 38 a
e
b
c
d
f
g
h
i
j
k
l
Figura 38.
p. Evalue las siguientes expresiones dadas en notación polaca directa a ) − × 3 ↑ 5 2 2 b) ↑ × 3 5 − 2 2 c ) − ↑ × 3 5 2 2 d ) × + ÷ 6 3 3 − 7 3 A. Caicedo B., G. Wagner de G., R. M. Méndez
e
k
f
106
ÁRBOLES
e ) ÷ × 2 + 2 5 ↑ + 3 4 2
q. Evalue las siguientes expresiones dadas en notación polaca inversa 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 ×
r. Escriba en notación polaca directa e inversa las siguientes expresiones 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} t. Mediante el algoritmo BUSQUEDA, insertar el elemento k = 22 en el arreglo del ejercicio anterior. u. Dado el arreglo {C,F,B,A,G,H,E } aplicar el algoritmo de FOSTER para ordenarlo ascendentemente. v. Determinar si k = 2 se encuentra en el siguiente arreglo, usando un algoritmo de búsqueda binaria M {−18, 4, 18, 40, 17, −15, 2, 9, 14, 7, 9, 8}
w. Mediante un árbol binario de búsqueda insertar el valor k = − 2 en el siguiente arreglo y ordenar el arreglo R = {−7, 7, 8, 22, −1, 6, −9, 18, 14, 0, 15, −5, 5}
x. Ordenar ascendentemente el arreglo A = { x,a,p,m,b,c,t,y,d,o,q } usando el algoritmo de Foster y. Construir un árbol de búsqueda para el siguiente arreglo B = { 35, 72, −2, 12, 8, 4, −18, 30, 32, 3, 26}
e insertar k = 22 usando el algoritmo de búsqueda e inserción.
A. Caicedo B., G. Wagner de G., R. M. Méndez
tulo
p í a
C
8
ÁRBOLES NO DIRIGIDOS En la unidad anterior se han estudiado árboles en los cuales se ha especificado claramente un nodo raíz, y se ha considerado su análisis haciendo un recorrido descendente desde la raíz hasta sus hojas, ahora en esta unidad se estudiará un nuevo tipo de árbol al cual no se le considera un nodo raíz y que se puede recorrer en cualquier sentido. Esta clase de árboles son de gran aplicación en el estudio de redes eléctricas, de redes locales de comunicación entre computadores, sistemas de riego, etc.
8.1
Árbol No Dirigido
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
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: a. ℜ es un árbol no dirigido con n − 1 arcos 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 a. ℜ es acíclica y si se añade a ℜ cualquier arista no dirigida, la nueva relación no será acíclica. b. ℜ es conexa y si cualquier arista no dirigida se remueve de ℜ, la nueva relación no será conexa. c. ℜ es acíclica con n − 1 arcos
8.2
Árbol Generado de Relaciones Conexas
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 generador de G o árbol de comunicación de G porque hace que todos los nodos del grafo G queden intercomunicados entre sí. Teorema 3 Un grafo G contiene un árbol generador si y solo si es conexo. Si el grafo es disconexo contiene un árbol generador para cada componente conexa
Para verificar que un grafo conexo contiene un árbol generador se pueden seguir dos metodologías diferentes: 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.
Figura 2.
La segunda metodología se puede resumir en el siguiente algoritmo: Algoritmo Arbolgen
paso 0.
Entrar el grafo G con n nodos y m arcos: a 1 , a2 , . . . , am
paso 1.
Hacer T = { N, ∅}
paso 2.
Para i = 1 hasta n hacer a) Adicionar el arco a i 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.
8.3
Árbol Generador de Mínimo Peso
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 A. Caicedo B., G. Wagner de G., R. M. Méndez
110
ÁRBOLES NO DIRIGIDOS
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.
8.4
Algoritmo de Prim (Robert C. Prim, 1957)
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 . El algoritmo es resumido en los siguientes pasos: 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.
A. Caicedo B., G. Wagner de G., R. M. Méndez
Algoritmo de Kruskal
111
Ejemplo 3
Aplicar el algoritmo de Prim para hallar el árbol de mímino peso a partir del grafo de la figura 3. a
10 7 20
b
8 d
6
c
14 16
17 e
Figura 3.
Solución paso 0. paso 1. paso 2. paso 1. paso 2. paso 1. paso 2. paso 1. paso 2.
8.5
A = ∅ . U = {e}. T = ( {e}, ∅) De los arcos adyacentes a T , el arco (e, c) es el de menor peso. Adicionar (e, c) a A y nodo c a U . T = ({e, c}, {(e, c)}) T todavía no es un árbol. Repetir paso 1. De los arcos adyacentes a T , el arco (c, b) es el de menor peso. Adicionar (c, b) a A y nodo b a U . T = ({e,c,b}, {(e, c)(c, b)}) T aún no es un árbol. Repetir paso 1. De los arcos adyacentes a T , el arco (b, d) es el de menor peso. Adicionar (b, d) a A y nodo d a U . T = ({e,c,b,d}, {(e, c)(c, b)(b, d)}) T aún no es un árbol. Repetir paso 1 De los arcos adyacentes a T , el arco (d, a) es el de menor peso. Adicionar (d, a) a A y nodo a a U . T = ( {e,c,b,d,a }, {(e, c)(c, b)(b, d)(d, a)}) T ya es un árbol porque U = N . Parar
el el el el
Algoritmo de Kruskal
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 algoritmo 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. A. Caicedo B., G. Wagner de G., R. M. Méndez
112
ÁRBOLES NO DIRIGIDOS
Ejemplo 4
Aplicar el algritmo de Kruskal para hallar el árbol generador de mínimo peso al grafo de la figura 4. 1
5
2 8
10
10
3 7
5
4
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: 1
5
2
8 3 4
5
6
4
Figura 5.
A. Caicedo B., G. Wagner de G., R. M. Méndez
Árbol Generador de Mínima Distancia
8.6
113
Árbol Generador de Mínima Distancia
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 distancias 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 . 8
r
4
6
2 9
3 5
7
9
7 7
8
4
3
5
6
G r
7
4
8
2
4
3
r
3
2
5
3
4
5
5
8
6
4
8
a)
5
3
6
b) Figura 6.
8.7
Algoritmo de Dijkstra (Árbol de mínima distancia)
Como el problema de establecer un árbol generador a partir de un nodo origen en un grafo conexo G se presenta frecuentemente al tratar de intercomunicar una central de comunicaciones con una serie de puntos, es conveniente contar con un algoritmo rápido que establezca cuál es el conjunto de aristas que se A. Caicedo B., G. Wagner de G., R. M. Méndez
114
ÁRBOLES NO DIRIGIDOS
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
2
r
2
4
x
s
3
3
u
v
x
3
5 1
i
z
1 1 2 2 3 3 4 4 5 5
x x s s u u v v w v
s
3 w
3
u
Figura 7.
a) Grafo inicial
paso 2 4 5 4 5 4 5 4 5 4 5
4
N (T ) r
v
1
w
b) Arbol Generador de mínima distancia
e
A(T )
(r, x)
{r, x}
{(r, x)} (r, s)
{r,x,s}
{(r, x)(r, s)} (x, u)
{r,x,s,u}
{(r, x)(r, s)(x, u)} (x, v)
{r,x,s,u,v }
{(r, x)(r, s)(x, u)(x, v)} (v, w)
{r,x,s,u,v,w }
{(r, x)(r, s)(x, u)(x, v)(v, w)}
El árbol resultante se muestra en la figura 7 b) A. Caicedo B., G. Wagner de G., R. M. Méndez
Algoritmo de Dijkstra (Árbol de mínima distancia)
115
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 5
a
3
b
4
c
d
a
5
3
b
c
4
d
3 4
6
e
3
2
4
e
2 f
5
2
g
i
z
2 3-4
1
f
2
b
3 4
5
(b, c)
g
{(a, f )(a, b)(b, c)} (f, g)
{a,f,b,c,g}
5
e
{(a, f )(a, b)(b, c)(f, g)} (g, e)
{a,f,b,c,g,e}
6
d
5 3-4
{(a, f )(a, b)}
{a,f,b,c}
5 3-4
(a, b)
c
5 3-4
A(T )
{(a, f )}
{a,f,b}
5 3-4
h
(a, f )
{a, f }
5 3-4
g
{a}
5 3-4
arco (e)
5
b)
Figura 8.
N (t)
f
h
a) paso
2
{(a, f )(a, b)(b, c)(f, g)(g, e)} (c, d)
{a,f,b,c,g,e,d}
7
h
{(a, f )(a, b)(b, c)(f, g)(g, e)(c, d)} (d, h)
{a,f,b,c,g,e,d,h}
{(a, f )(a, b)(b, c)(f, g)(g, e)(c, d)(d, h)}
A. Caicedo B., G. Wagner de G., R. M. Méndez
116
ÁRBOLES NO DIRIGIDOS
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.
Figura 9.
b. Para el grafo de la figura 10 hallar gráficamente los 16 árboles generadores distintos que posee.
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. 4
a
7
b
c
8
a
2
1
6
5
e
8
e
f
g
2 1
b
2
c
1
9
f
a
2
20
4
d
2
e
3
2
f
1
5
8
4
5
6
3 10
7 12
g
10
12
10
11 9
8
12 d
d
c
6
10
3 3
11
b
15 5 9
11 7
6
15
h
6
i j
10
7
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) 1
5
3
2
3
4
4
4
1
3
5
2
6
4
5
11 5
4
5
2
2 6
2
7
9 4
117
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 x i y x j , encontrar la red de transmisión de costo mínimo. x1 x2 x3 x M = 4 x5 x6 x7 x8
x1 − − − − − − − −
x2 5 − − − − − − −
x3 x4 x5 − 4 7 7 8 − − 2 9 − − 5 − − − − − − − − − − − −
x6 6 − 8 − 4 − − −
x7 6 − 7 5 9 7 − −
x8 − − − − 5 8 8 −
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
4
5
4
Figura 13.
Determinar la red de abastecimiento de costo mínimo. h. Aplique el algoritmo de Dijkstra para hallar el árbol generador de mínima distancia del siguiente grafo, tomando r como nodo raíz. a
7
p
5
2
4
b
9
q
4
r
6
4
3
t
c
3
Figura 14.
A. Caicedo B., G. Wagner de G., R. M. Méndez
5
118
ÁRBOLES NO DIRIGIDOS
A. Caicedo B., G. Wagner de G., R. M. Méndez