Académique Documents
Professionnel Documents
Culture Documents
Teoría de Grafos:
Aplicación Matricial
Paralelo: 1
Índice de Ilustraciones
Ilustración 1: Mapa de Königsberg que resalta los puentes (en verde) y el río que cruzaba por la
ciudad. ........................................................................................................................................... 3
Ilustración 2: Abstracción del problema de los puentes del río Königsberg. ................................ 3
Ilustración 3: Representación del problema de los puentes de Königsberg con valores para cada
vértice y lado. ................................................................................................................................ 4
Ilustración 4: Ejemplo de un grafo para ilustrar los conceptos antes mencionados .................... 6
Ilustración 5: Esquema del problema que será resuelto empleando el programa Grafos ........... 9
Ilustración 6: Representación del problema usando el software Grafos.................................... 10
Ilustración 7: El programa posee el algoritmo de Floyd como parte de su código. .................... 11
Ilustración 8: Matrices de distancias mínimas y de caminos óptimos. ....................................... 11
Ilustración 9: Lista de todos los caminos óptimos entre v1 y v2 con la distancia total de cada
camino entre paréntesis. ............................................................................................................ 12
Marco Teórico
Antecedentes
En 1736, Leonhard Euler publicó un artículo titulado: Solutio problematis ad geometriam
situs pertinentis (La solución de un problema relativo a la geometría de la posición). En
este artículo Euler presentó la solución al problema de los puentes de Königsberg, un
problema bastante conocido en el siglo XVIII. La ciudad de Königsberg estaba dividida
en 4 zonas por el río Pregel y había 7 puentes que conectaban esas zonas, como se ve en
la imagen a continuación:
Ilustración 1: Mapa de Königsberg que resalta los puentes (en verde) y el río que cruzaba por la ciudad.
Los habitantes de la ciudad trataban de hallar una manera de recorrer toda la ciudad
cruzando por cada puente una sola vez y regresando al punto de inicio, ésta es la base del
problema. Con el propósito de resolver este problema Euler recurrió a una abstracción
para facilitar el enfoque que se emplearía, por este motivo decidió representar las 4 zonas
de la ciudad como 4 puntos y los puentes que unen las zonas como líneas que unían 2
puntos, tal como se ve en la siguiente imagen:
Esta representación de Euler dio pie a la primera noción de grafo por lo que se le considera
el primer resultado respecto a la teoría de grafos. Más adelante, cuando se defina el
concepto de grafo y se conozcan algunos teoremas al respecto, se hablará sobre la
resolución del problema que dio Eueler.
Luego, en 1847, Gustav Kirchhoff utilizó la teoría de grafos para analizar redes eléctricas,
estos resultados se conocieron como Leyes de Kirchhoff, por medio de estas leyes se
pueden conocer la corriente y la tensión en cualquier punto de un circuito.
Más adelante se hicieron muchos avances respecto a la teoría de grafos, pero no fue sino
hasta 1936 que se publicó el primer libro sobre Teoría de Grafos escrito por Dénes König,
en el que recogía todos los conocimientos referentes al tema hasta ese entonces a la vez
que exponía sus propios avances en la materia.
Ahora bien, hasta ahora solo se ha hablado de grafo y se le ha asociado a un dibujo o
gráfico de puntos que están conectados entre sí por medio de líneas, pero para poder
seguir avanzando en el estudio de este tema se requiere de una definición más formal de
lo que es un grafo. Por ello vamos a definir lo que es un grafo.
Grafo:
Un grafo G es un par (V, E), donde V y E son conjuntos, junto con una aplicación
γG : E → {{u, v} : u, v ∈ V }
Ejemplo:
En el caso de los puentes de Königsberg, el grafo de la figura 3 tiene como conjunto de
vértices al conjunto V = {a, b, c, d}, como conjunto de lados el conjunto
E = {1, 2, 3, 4, 5, 6, 7} y la aplicación de incidencia es la dada por:
γG(1) = γG(2) = {a, c} γG(6) = γG(7) = {a, b} γG(3) = {c, d}
γG(4) = {a, d} γG(5) = {b, d}
Si e1 y e2 son dos lados tales que γG(1) = γG(2), se dice que son lados paralelos.
Un lado tal que γG(e) = {v} se dice un lazo.
Ilustración 3: Representación del problema de los puentes de Königsberg con valores para cada vértice y lado.
Grafo Dirigido:
Un grafo dirigido u orientado es un par (V, E), donde V y E son conjuntos, junto con dos
aplicaciones s, t : E → V . Al conjunto V se le llama conjunto de vértices, al conjunto E
conjunto de lados, y a las aplicaciones s y t aplicaciones dominio y codominio ("source"
y "target").
Subgrafo:
Sea G = (V, E) un grafo con aplicación de incidencia γG. Un subgrafo de G es un nuevo
grafo G’ = (V’, E’) donde V’ ⊆ V ; E’ ⊆ E y se verifica que γG’(e) = γG(e) para cualquier
e ∈ E’.
Si G’ = (V’, E’) es un subgrafo de un grafo G = (V, E), se dice que es un subgrafo
completo si dado e ∈ E tal que γG(e) ⊆ V’ se verifica que e ∈ E’. Dicho de otra forma, si
tiene todos los lados que tenía G y que unen vértices de V ‘.
Observación:
Un subgrafo completo está completamente determinado por el conjunto de vértices. Así,
para determinar un subgrafo de un grafo G en ocasiones explicitaremos únicamente el
conjunto de vértices de dicho subgrafo, sobreentendiendo que se trata del subgrafo
completo con dicho conjunto de vértices.
Por tanto, en un circuito puede haber o puede no haber vértices repetidos. Sin embargo,
no puede haber aristas repetidas. Se tiene entonces, por ejemplo, que todo ciclo es un
circuito, es un camino cerrado y es un camino.
Ejemplo:
Consideramos el siguiente grafo:
Matriz de Adyacencia:
Sea G un grafo cuyo conjunto de vértices es V = {v1, v2, · · ·, vn}. Se define su matriz de
adyacencia como la matriz A ∈ Mn(N) cuyo coeficiente (i, j) es igual al número de lados
e que unen vi con vj (es decir, que verifican que f(e) = {vi, vj}).
Observaciones:
1. La matriz de adyacencia de un grafo es una matriz simétrica, pues cada lado que une vi
con vj une también vj con vi.
2. Si tomáramos otra ordenación de los vértices, la matriz de adyacencia es diferente. Por
tanto, un grafo puede tener varias matrices de adyacencia. En general, si A y C son dos
matrices de adyacencia de un mismo grafo, entonces existe una matriz de permutación P
tal que P-1CP = A (una matriz de permutación es una matriz que tiene en cada fila y en
cada columna un coeficiente que vale "uno" y el resto toman el valor "cero". Es una matriz
que se obtiene a partir de la matriz identidad realizando intercambio de filas y/o
columnas).
3. La existencia de lados paralelos se traduce en la matriz de adyacencia en la existencia
de coeficientes mayores que 1. De la misma forma, la existencia de lazos se traduce en
que algún elemento de la diagonal principal de la matriz de adyacencia es distinto de cero.
4. Si tenemos un grafo dirigido, también podemos definir su matriz de adyacencia. En
este caso, el coeficiente aij es el número de lados que verifican que s(e) = vi y t(e) = vj .
En este caso, la matriz no tiene porqué ser simétrica.
5. La matriz de adyacencia de un grafo determina a éste. Además, toda matriz cuadrada
con coeficientes en N es la matriz de adyacencia de un grafo (dirigido o no) finito.
Podríamos entonces tomar como definición de grafo la de una matriz cuadrada con
coeficientes en N.
Proposición:
Sea G un grafo cuyo conjunto de vértices es {v1, v2, · · · , vn} y sea A su matriz de
adyacencia. Entonces el coeficiente (i, j) de la matriz An es igual al número de caminos
de longitud n que unen vi con vj .
Demostración:
Hagamos la demostración por inducción.
Para n = 1 el resultado no es más que la definición de la matriz de adyacencia.
Supongamos que el resultado es cierto para n − 1 y demostrémoslo para n.
Sea entonces 𝐵 = 𝐴𝑛−1 y 𝐶 = 𝐴𝑛 . Queremos probar que cij es el número de caminos
de longitud n que unen vi con vj .
Es claro que 𝑐𝑖𝑗 = ∑𝑛𝑘=1 𝑏𝑖𝑘 𝑎𝑘𝑗
como queríamos.
Nótese que este razonamiento vale tanto si el grafo G es dirigido como si no lo es.
Matriz de Incidencia:
Sea G un grafo cuyo conjunto de vértices es V = {v1, v2, · · · , vn} y cuyo conjunto de
lados es E = {e1, e2, · · ·, em}. Se define la matriz de incidencia del grafo G como una
matriz n × m que tiene en la posición (i, j) un 1 si vi ∈ f(ej ) y 0 en otro caso.
Observación:
1. Si tomamos otra ordenación de los vértices y/o lados, la matriz de incidencia puede ser
diferente. En este caso, dos matrices de incidencia corresponden al mismo grafo si se
puede pasar de una a otra mediante operaciones elementales por filas y/o columnas Tipo
I (intercambio de filas y/o columnas).
2. El que un grafo tenga lados paralelos se traduce en que tenga dos columnas iguales en
la matriz de incidencia, mientras que los lazos se traducen en filas con un único
coeficiente "uno".
3. Si el grafo es dirigido, se puede definir también la matriz de incidencia. En este caso,
el coeficiente (i, j) puede también tomar el valor −1 (si el lado ej parte del vértice vi). En
tal caso, el grafo no podría tener lazos.
Problema de Grafos resuelto con un software
Problema:
El gráfico adjunto representa los caminos que comunican diversas localidades, con sus
respectivas distancias. Encuentra la matriz de las distancias más cortas.
Ilustración 5: Esquema del problema que será resuelto empleando el programa Grafos
Solución:
El problema nos pide hallar la matriz de distancias más cortas, para esto se recurre al
algoritmo de FloydWarshall, este algoritmo consiste en lo siguiente:
Algoritmo DE FLOYD:
El algoritmo de Floyd determina la ruta más corta entre dos nodos cualquiera de la red.
El algoritmo representa una red de n nodos como una matriz cuadrada de orden n, la
llamaremos matriz C. De esta forma, el valor Cij representa el coste de ir desde el nodo i
al nodo j, inicialmente en caso de no existir un arco entre ambos, el valor Cij será
infinito.
Definiremos otra matriz D, también cuadrada de orden n, cuyos elementos van a ser los
nodos predecesores en el camino hacia el nodo origen, es decir, el valor Dij representará
el nodo predecesor a j en el camino mínimo desde i hasta j. Inicialmente se comienza
con caminos de longitud 1, por lo que Dij = i.
Las diagonales de ambas matrices representan el coste y el nodo predecesor para ir de
un nodo a si mismo, por lo que no sirven para nada, estarán bloqueadas.
Los pasos a dar en la aplicación del algoritmo de Floyd son los siguientes:
Formar las matrices iniciales C y D.
Se toma k=1.
Se selecciona la fila y la columna k de la matriz C y entonces, para i y j, con i≠k, j≠k
e i≠j, hacemos:
Una vez elaborado el grafo y establecido las conexiones o caminos entre vértice y vértice,
procedemos a aplicar el algoritmo de Floyd para hallar la solución al problema propuesto
en este proyecto.
Ilustración 7: El programa posee el algoritmo de Floyd como parte de su código.
Pero en cada posición de la matriz de caminos solo constará el penúltimo vértice de los
caminos mínimos que unen dos vértices, así que si queremos conocer cuáles son todos
los caminos posibles a medida que se van remplazando los valores de los vértices
anteriores, éstos se pueden escribir aparte para poder conocer cuáles son estos caminos.
Afortunadamente para nosotros, este software además de las matrices se encarga también
de llevar registro de todos los caminos mínimos que fueron obtenidos de la matriz de
caminos mínimos, los cuales se muestran a continuación:
Ilustración 9: Lista de todos los caminos óptimos entre v1 y v2 con la distancia total de cada camino entre paréntesis.
http://www.ugr.es/~jesusgm/Curso%202005-2006/Matematica%20Discreta/Grafos.pdf
http://docencia.udea.edu.co/regionalizacion/teoriaderedes/informaci%F3n/C1_Represen
tacionMatrices.pdf
http://arodrigu.webs.upv.es/grafos/doku.php?id=manual
http://profe-alexz.blogspot.com/2012/01/teoria-de-grafos-y-ejercicios-resueltos.html
http://www.matesitalica.es/archivos_macsII/GRAFOS.pdf
http://algoritmodefloyd.blogspot.com/