- Grafos
- Aristas – Vértices –
Caminos - Clasificación de
grafos - Grafos
Eulerianos. - Grafos
Conexos - Árboles.
- Bosques de
árboles. - Recorrido de un
grafo. - Representación de grafos
en programas. - Dígrafo (grafo
dirigido). - Aplicaciones de los
dígrafos - Grado de un
grafo. - Ciclo de un
grafo. - Estructuras no lineales:
Grafos - Anexo
Hoy en día podemos ver muchas cosas que nos
pueden parecer de lo mas cotidianas, carreteras, líneas
telefónicas, líneas de televisión
por cable, el transporte
colectivo metro, circuitos
eléctricos de nuestras casas, automóviles, y
tantas cosas mas; lo que no pensamos frecuentemente es que estos
forman parte de algo que en matemáticas se denomina como grafos.
En este trabajo se
tratará de explicar lo que son los grafos, sus tipos, y
algunas derivaciones de ellos, así como su
representación gráfica y en algunos casos, su
representación en algún programa
informático, así como en la
memoria.
En este trabajo, se explicando de manera muy
sencilla los conceptos y algunas metodologías con un
lenguaje no
tan rebuscado para su mayor entendimiento.
Desafortunadamente no existe una terminología
estandarizada en la teoría
de los grafos, por lo tanto es oportuno aclarar que las presentes
definiciones pueden variar ligeramente entre diferentes
publicaciones de estructura de
datos y de teoría de grafos, pero en general se puede
decir que un grafo como indica su nombre lo indica es la
representación (para nuestro caso) gráfica de los
datos de una
situación particular, ejemplo:
Los datos contienen, en algunos casos,
relaciones entre ellos que no es necesariamente
jerárquica. Por ejemplo, supongamos que unas líneas
aéreas realizan vuelos entre las ciudades conectadas por
líneas como se ve en la figura anterior (más
adelante se presentaran grafos con estructuras de
datos); la estructura de
datos que refleja esta relación recibe el nombre de
grafo.
Se suelen usar muchos nombres al referirnos a los
elementos de una estructura de datos. Algunos de ellos son
"elemento", "ítem", "asociación de ítems",
"registro",
"nodo" y "objeto". El nombre que se utiliza depende del tipo de
estructura, el contexto en que usamos esa estructura y quien la
utiliza.
En la mayoría de los textos de estructura de
datos se utiliza el termino "registro" al hacer referencia a
archivos y
"nodo" cuando se usan listas enlazadas, árboles
y grafos.
También un grafo es una terna G = (V,A,j
), en donde V y A son conjuntos
finitos, y j es una aplicación que hace
corresponder a cada elemento de A un par de elementos de
V. Los elementos de V y de A se llaman,
respectivamente, "vértices" y "aristas" de
G, y j asocia entonces a cada arista con sus dos
vértices.
Esta definición da lugar a una representación
gráfica, en donde cada vértice es un punto del
plano, y cada arista es una línea que une a sus dos
vértices.
Son las líneas con las que se unen las aristas de un
grafo y con la que se construyen también caminos.
Si la arista carece de dirección se denota indistintamente {a,
b} o {b, a}, siendo a y b los vértices que
une.
Si {a ,b} es una arista, a los vértices a y b
se les llama sus extremos.
- Aristas Adyacentes: Se dice que dos aristas son
adyacentes si convergen en el mismo vértice. - Aristas Paralelas: Se dice que dos aristas son
paralelas si vértice inicial y el final son el
mismo. - Aristas Cíclicas: Arista que parte de un
vértice para entrar en el mismo. - Cruce: Son dos aristas que cruzan en un
punto.
Son los puntos o nodos con los que esta conformado un
grafo. Llamaremos grado de un vértice al número de
aristas de las que es extremo. Se dice que un vértice es
`par' o `impar' según lo sea su grado.
- Vértices Adyacentes: si tenemos un par de
vértices de un grafo (U, V) y si tenemos un arista que
los une, entonces U y V son vértices adyacentes y se
dice que U es el vértice inicial y V el vértice
adyacente. - Vértice Aislado: Es un vértice de grado
cero. - Vértice Terminal: Es un vértice de grado
1.
Sean x, y " V, se dice que hay un camino en G de x a
y si existe una sucesión finita no vacía de
aristas {x,v1}, {v1,v2},…,
{vn,y}. En este caso
- x e y se llaman los extremos del camino
- El número de aristas del camino se llama la
longitud del camino. - Si los vértices no se repiten el camino se dice
propio o simple. - Si hay un camino no simple entre 2 vértices,
también habrá un camino simple entre
ellos. - Cuando los dos extremos de un camino son iguales, el
camino se llama circuito o camino cerrado. - Llamaremos ciclo a un circuito simple
- Un vértice a se dice accesible desde el
vértice b si existe un camino entre ellos. Todo
vértice es accesible respecto a si mismo
Los grafos se pueden clasificar en dos grupos: dirigidos
y no dirigidos. En un grafo no dirigido el par de vértices
que representa un arco no está ordenado. Por lo tanto, los
pares (v1, v2) y (v2, v1) representan el mismo arco. En un grafo
dirigido cada arco está representado por un par ordenado
de vértices, de forma que y representan dos arcos
diferentes.
Ejemplos
G1 = (V1, A1)
V1 = {1, 2, 3, 4} A1 = {(1, 2), (1, 3), (1, 4), (2, 3), (2,
4), (3, 4)}
G2 = (V2, A2)
V2 = {1, 2, 3, 4, 5, 6} A2 = {(1, 2), (1, 3), (2, 4), (2, 5),
(3, 6)}
G3 = (V3, A3)
V3 = {1, 2, 3} A3 = { <1, 2>, <2, 1>, <2, 3>
}
Gráficamente estas tres estructuras de vértices
y arcos se pueden representar de la siguiente manera:
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
Algunos de los principales tipos de grafos son los que
se muestran a continuación:
- Grafo regular: Aquel con el mismo grado en
todos los vértices. Si ese grado es k lo llamaremos
k-regular.
Por ejemplo, el primero de los siguientes grafos es
3-regular, el segundo es 2-regular y el tercero no es
regular
- Grafo bipartito: Es aquel con cuyos
vértices pueden formarse dos conjuntos disjuntos de modo
que no haya adyacencias entre vértices pertenecientes al
mismo conjunto
Ejemplo.- de los dos grafos siguientes el primero es
bipartito y el segundo no lo es
- Grafo completo: Aquel con una arista entre
cada par de vértices. Un grafo completo con n
vértices se denota Kn.
A continuación pueden verse los dibujos de
K3, K4, K5 y
K6
- Un grafo bipartito regular: se denota
Km,n donde m, n es el grado de cada conjunto
disjunto de vértices.
A continuación ponemos los dibujos de
K1,2, K3,3, y
K2,5
- Grafo nulo: Se dice que un grafo es nulo
cuando los vértices que lo componen no están
conectados, esto es, que son vértices
aislados. - Grafos Isomorfos: Dos grafos son isomorfos
cuando existe una correspondencia biunívoca (uno a uno),
entre sus vértices de tal forma que dos de estos quedan
unidos por una arista en común.
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
- Grafos Platónicos: Son
los Grafos formados por los vértices y aristas de los
cinco sólidos regulares (Sólidos
Platónicos), a saber, el tetraedro, el cubo, el
octaedro, el dodecaedro y el icosaedro.
Para ver el gráfico seleccione la
opción "Descargar" del menú superior
Para definir un camino euleriano es importante
definir un camino euleriano primero. Un camino euleriano se
define de la manera más sencilla como un camino que
contiene todos los arcos del grafo.
Teniendo esto definido podemos hablar de los grafos
eulerianos describiéndolos simplemente como aquel grafo
que contiene un camino euleriano. Como ejemplos tenemos las
siguientes imágenes:
El primer grafo de ellos no contiene caminos
eulerianos mientras el segundo contiene al menos
uno.
Un grafo se puede definir como conexo si cualquier
vértice V pertenece al conjunto de vértices y es
alcanzable por algún otro. Otra definición que
dejaría esto más claro sería: "un grafo
conexo es un grafo no dirigido de modo que para cualquier par de
nodos existe al menos un camino que los une".
Un árbol se define como un
tipo de grafo que no contiene ciclos, es decir es un grafo
también acíclico, pero a su vez es conexo. Tal es
el caso de los siguientes dos grafos en donde se puede notar que
ninguno de los dos contiene repeticiones (ciclos).
Los bosques de árboles son un
caso similar a los árboles, son acíclicos, pero no
son conexos. Como ejemplo tenemos la siguiente
figura.
Para ver el gráfico seleccione
la opción "Descargar" del menú
superior
Recorrer un grafo significa tratar de alcanzar todos
los nodos que estén relacionados con uno que llamaremos
nodo de salida. Existen básicamente dos
técnicas para recorrer un grafo: el
recorrido en anchura; y el recorrido en
profundidad.
- Recorrido en anchura:
El recorrido en anchura supone
recorrer el grafo, a partir de un nodo dado, en niveles, es
decir, primero los que están a una distancia de un
arco del nodo de salida, después los que están
a dos arcos de distancia, y así sucesivamente hasta
alcanzar todos los nodos a los que se pudiese llegar desde el
nodo salida. - Recorrido en profundidad: el recorrido en
profundidad trata de buscar los caminos que parten desde el
nodo de salida hasta que ya no es posible avanzar más.
Cuando ya no puede avanzarse más sobre el camino
elegido, se vuelve atrás en busca de caminos
alternativos, que no se estudiaron previamente.
Representación de grafos en programas.
Hay tres maneras de representar un grafo en un programa:
mediante matrices,
mediante listas y mediante matrices dispersas.
- Representación mediante matrices:
La forma más fácil de guardar la
información de los nodos es mediante la
utilización de un vector que indexe los nodos, de manera
que los arcos entre los nodos se pueden ver como relaciones
entre los índices. Esta relación entre
índices se puede guardar en una matriz, que
llamaremos de adyacencia. - Representación mediante listas:
En las listas de adyacencia lo que haremos
será guardar por cada nodo, además de la
información que pueda contener el propio nodo, una lista
dinámica con los nodos a los que se puede
acceder desde él. La información de los nodos se
puede guardar en un vector, al igual que antes, o en otra lista
dinámica. - Representación mediante matrices
dispersas: Para evitar uno de los
problemas
que teníamos con las listas de adyacencia, que era la
dificultad de obtener las relaciones inversas, podemos utilizar
las matrices dispersas, que contienen tanta información
como las matrices de adyacencia, pero, en principio, no ocupan
tanta memoria como
las matrices, ya que al igual que en las listas de adyacencia,
sólo representaremos aquellos enlaces que existen en el
grafo.
A un grafo dirigido se le puede definir como un
grafo que contiene aristas dirigidas, como en el siguiente
caso.
Una de las aplicaciones mas importantes
es de hallar el camino mas corto hacia un destino, ya sea de una
ciudad a otra, de unos departamentos a otros, para el recorrido
de árboles, sirve para la representación de
algoritmos,
etc. Un ejemplo de esto es la tarea de freír un
huevo.
- Grado de incidencia positivo: El grado
de incidencia positivo de un nodonjes el número de arcos
que tienen como nodo inicial anj. Ejemplo: El grado de
incidencia de 1 es igual a 3. - Grado de incidencia negativo: El grado
de incidencia negativo de un nodonjes el número de arcos
que terminan ennj. Ejemplo: El grado de incidencia negativo de
1 es igual a 1. - Grado de un nodo: Paradigrafoses el
grado de incidencia positivo menos el grado de incidencia
negativo del nodo. Ejemplo: El grado de 1 es igual a 3 –1
= 2, el grado del nodo 4 es 2 –2 = 0. Para grafos no
dirigidos es el número de líneas asociadas al
nodo.
Ciclo: Es una cadena finita
donde el nodo inicial de la cadena coincide con el nodo terminal
de la misma.
- Ciclo simple: Es el ciclo que a su vez
es una cadena simple.
Estructuras no lineales:
Grafos
Las estructuras de datos no lineales se
caracterizan por no existir una relación de adyacencia,
entre sus elementos, es decir, un elemento puede estar
relacionado con cero, uno o más
elementos.
La estructura no lineal de datos más
general es el grafo donde sus nodos pueden relacionarse de
cualquier manera sin una relación de orden
predefinida.
Estructuras no lineales: Grafos Entre las múltiples
aplicaciones que tienen estas estructuras podemos
mencionar:•Para modelar diversas situaciones tales como:
sistemas de
aeropuertos, flujo de tráfico, y responder a preguntas
como: ¿Qué tiempo es
más corto?, ¿Cómo es más barato?, o
¿Qué camino es más corto?. •Los grafos
también son utilizados para realizar planificación de actividades, tareas del
computador,
planificar operaciones en
lenguaje de máquinas
para minimizar tiempo de ejecución.¿Qué
tarea debo hacer primero?. •Para representar circuitos
eléctricos, de aguas etc… , y preguntar, están
todas las componentes conectadas.
Grafos Los grafos pueden ser utilizados como la
estructura básica para múltiples aplicaciones en el
área de la Computación. Un grafo G (N, A, f) es un
conjunto no vacío, donde:•N={n1, n2, … ,nM) es el
conjunto de nodos o vértices•A={a1, a2, …, a K} es
el conjunto de aristas y•La función f
: R →ΜΧΜindica los pares de nodos que
estαn relacionados.•Grafos Dirigidos
(Dígrafos) En estos grafos, las aristas que comunican dos
nodos tienen un único sentido, una arista puede ir de x a
y, pero no de y a x. Se expresa gráficamente con flechas
que indican el sentido de la relación entre cada par de
nodos.
Grafos•Grafos no dirigidos En estos grafos,
las aristas que comunican dos nodos tienen dos sentidos. Si una
arista va de x a y, la misma arista va de y a x. Se expresa
gráficamente por líneas. La representación
gráfica de un grafo se define con un círculo o
rectángulo para los nodos y las relaciones con
líneas o flechas según sea un grafo no dirigido o
un dígrafo, respectivamente.
Las representaciones de grafos más
habituales están basadas en matrices de adyacencia
y listas de adyacencia. En este ejercicio se pretende
representar distintos grafos utilizando tanto matrices como
listas de adyacencia.
El plan de estudios
de determinada titulación se compone de 6 asignaturas, que
por simplicidad, denominaremos y . A la hora de matricularse de las distintas
asignaturas se ha de tener en cuenta una serie de dependencias
entre ellas (prerrequisitos). De esta forma, un alumno no se
puede matricular en una asignatura hasta haber aprobado aquellas
otras que sean prerrequisito de dicha asignatura. Representaremos
a continuación los prerrequisitos del plan de estudios
como un grafo dirigido de dependencias.
Por ejemplo, un arco del nodo al nodo indica que no es posible matricularse de sin haber aprobado previamente . A continuación se muestran las operaciones
del TAD grafos necesarios para construir el grafo de
dependencias.
Para ver el gráfico
seleccione la opción "Descargar" del menú
superior
Teniendo en cuenta que una operación de la
forma
Para ver el gráfico
seleccione la opción "Descargar" del menú
superior
añade al grafo
Para ver el gráfico
seleccione la opción "Descargar" del menú
superior
un arco con origen en
Para ver el gráfico
seleccione la opción "Descargar" del menú
superior
y destino en
Para ver el gráfico
seleccione la opción "Descargar" del menú
superior
, se pide: Representar gráficamente
y mediante matrices de adyacencia cada uno de los
grafos
Para ver el gráfico
seleccione la opción "Descargar" del menú
superior
Solución
propuesta:
A continuación se muestra la
representación gráfica de los
grafos.
Para ver el gráfico
seleccione la opción "Descargar" del menú
superior
La representación basada en matrices de
adyacencia utiliza dos componentes. El primero es un conjunto que
contiene los nodos del grafo. El segundo es una matriz booleana
que representa los arcos. Existe un arco entre un nodo y otro si la posición de fila y columna tiene el valor
(representado por una ). Las casillas vacías tienen
valor
Para ver el gráfico
seleccione la opción "Descargar" del menú
superior
Una compañía telefónica
desea realizar un estudio sobre las llamadas que realizan sus
abonados. Para ello, se desea construir un grafo cuyos nodos son
los abonados (identificados por su número de teléfono). La existencia de un arco con
origen en el nodo y destino en el nodo indica que el abonado ha llamado alguna vez al abonado . En este grafo se realizan también borrados
cuando alguno de los abonados se da de baja de la
compañía telefónica. A continuación
se muestra una serie de operaciones para la obtención del
grafo de llamadas entre usuarios:
Se pide: Representar gráficamente y
mediante listas de adyacencia cada uno de los grafos
, y .
Solución
propuesta:
Para ver el gráfico
seleccione la opción "Descargar" del menú
superior
- Teniendo en cuenta que el conjunto de
asignaturas del plan de estudios no varía (aunque si lo
pueden hacer los prerrequisitos), es posible representar el
grafo del apartado a) ¿utilizando listas de
adyacencia? ¿Por qué?
Solución
propuesta:
Sí. De hecho, la representación
basada en listas de adyacencia es más general que la
basada en matrices de adyacencia. Por tanto, como es posible
representarlo utilizando matrices de adyacencia, también
es posible representarlo utilizando listas de
adyacencia.
- Teniendo en cuenta que el conjunto de abonados
varía continuamente y es infactible dar una cota
máxima del número de abonados, sería
posible representar el grafo del apartado b) utilizando
matrices de adyacencia? Por qué?
Solución
propuesta:
No, ya que no podemos fijar de antemano las
dimensiones de la matriz de adyacencia ni tampoco el nombre de
los nodos a que corresponde cada fila y columna de dicha
matriz.
Margareth Iglesias
República Bolivariana de Venezuela.
Ministerio de Educación, Cultura y
Deporte.
I U. Politécnico "Santiago
Mariño"
Barcelona – Edo.
Anzoátegui.