Documentos de Académico
Documentos de Profesional
Documentos de Cultura
y Estructura de Datos
Unidad IV
Grafos
En matemáticas y en ciencias de la computación, la teoría de grafos (también
llamada teoría de las gráficas) estudia las propiedades de los grafos. Un grafo
es un conjunto, no vacío, de objetos llamados nodos (o vértices) conectados
por líneas llamadas aristas (edges en inglés) que representan una relación
binaria entre (obviamente…) dos nodos.
El primer artículo científico en donde se los menciona fue escrito por el suizo
Leonhard Euler en 1736, para resolver el problema de los puentes de
Königsberg.
Muchas redes de uso cotidiano pueden ser modeladas con un grafo: una red
de carreteras que conecta ciudades, una red eléctrica, la red de drenaje de una
ciudad, las interconexiones en una red de computadoras, etc.
Formalización
Un grafo es una pareja de conjuntos G=(V , A) donde V representa el
conjunto de vértices y A representa el conjunto de aristas, este último es un
conjunto de pares de la forma (a, b) tal que a , b∈V , tal que a≠b . Para
simplificar la notación, la arista (a, b) se formalizará como ab.
1/12 RMS
Tecnología Computacional y Estructura de Datos
Definiciones:
Subgrafo: grafo que es subconjunto de otro grafo.
Orden: el número de vértices o nodos
Grado: cantidad de aristas que llegan a un nodo.
Bucle: arista con origen y destino en el mismo nodo. A efectos del grado se
cuenta doble.
Aristas adyacentes: son aquellas que inciden en un mismo nodo.
Aristas paralelas: son aquellas que tienen el mismo nodo de origen y destino
pero representan relaciones binarias distintas
Camino: sucesión de aristas que comunican dos vértices cualesquiera.
Ciclo: es una sucesión de aristas adyacentes, donde no se recorre dos veces
la misma arista, y donde se regresa al punto inicial.
Ciclo hamiltoniano: es un ciclo que recorre todos los vértices exactamente
una vez (excepto el vértice del que parte y al cual llega).
Grafo simple: Es el grafo que no contiene ciclos, es decir, lineas que unan un
punto consigo mismo, ni aristas paralelas.
Grafo dirigido o digrafo: Es el grafo que indica un sentido de recorrido de
cada linea mediante una flecha. Dicho de otro modo, es un grafo donde las
relaciones binarias no son reflexivas (constituyen pares ordenados).
Propiedades:
Adyacencia: dos aristas son adyacentes si tienen un vértice en común, y dos
vértices son adyacentes si una arista los une.
Incidencia: una arista es incidente a un vértice si ésta lo une a otro vértice.
Ponderación: valor asignado a una arista.
Etiquetado: Distinción única que se hace a los vértices y/o aristas.
Clasificación de grafos:
Grafo plano: se puede representar sin cruces entre aristas.
Grafo regular: cuando todos sus nodos tienen el mismo grado.
Multigrafo: si tiene aristas paralelas
Pseudografo: si tiene ciclos.
2/12
Tecnología Computacional y Estructura de Datos
Estructuras matriciales
Matriz de incidencias - El grafo está representado por una matriz de A
(aristas) por V (vértices), donde [arista, vértice] contiene la información de la
arista (1 - conectado, 0 - no conectado)
Matriz de adyacencias - El grafo está representado por una matriz cuadrada
M de tamaño n2 donde n es el número de vértices. Si hay una arista entre un
vértice x y un vértice y, entonces el elemento mx,y es 1 de lo contrario, es 0.
Veamos un ejemplo. Para el grafo:
3/12
Tecnología Computacional y Estructura de Datos
Aristas
nodo 1 2 3 4
s
1 1 1 1 0
2 1 0 0 0
3 0 1 0 1
4 0 0 1 1
Algoritmo matrizIncidencias
Dimension M[4,4]
cargaArista(M,1,1,2)
cargaArista(M,2,1,3)
cargaArista(M,3,1,4)
cargaArista(M,4,3,4)
FinAlgoritmo
4/12
Tecnología Computacional y Estructura de Datos
Nodos final
inicial 1 2 3 4
1 0 1 1 1
2 1 0 0 0
3 1 0 0 1
4 1 0 1 0
Algoritmo matrizAdyacencias
Dimension M[4,4]
adyacencia(M,1,2)
adyacencia(M,1,3)
adyacencia(M,1,4)
adyacencia(M,3,4)
FinAlgoritmo
Estructura de lista
• lista de incidencias - Las aristas son representadas con un vector de pares
(ordenados, si el grafo es dirigido), donde cada par representa una de las
aristas.
• lista de adyacencias - Cada vértice tiene una lista de vértices los cuales son
adyacentes a él. Esto causa redundancia en un grafo no dirigido (ya que A
existe en la lista de adyacencia de B y viceversa), pero las búsquedas son
más rápidas, al costo de almacenamiento extra.
5/12
Tecnología Computacional y Estructura de Datos
En esta estructura de datos la idea es asociar a cada vertice i del grafo una
lista que contenga todos aquellos vértices j que sean adyacentes a él. De esta
forma sólo reservará memoria para los arcos adyacentes a i y no para todos
los posibles arcos que pudieran tener como origen i. El grafo, por tanto, se
representa por medio de un vector de n componentes (si |V|=n) donde cada
componente va a ser una lista de adyacencia correspondiente a cada uno de
los vértices del grafo. Cada elemento de la lista consta de un campo
indicando el vértice adyacente. En caso de que el grafo sea etiquetado, habrá
que añadir un segundo campo para mostrar el valor de la etiqueta.
Veamos un ejemplo. Para el grafo:
# coding: utf-8
# Grafo como lista de adyacencias
la = [None, 1, 2, 3, 4]
la[1] = [ 2, 3, 4 ]
la[2] = [1]
6/12
Tecnología Computacional y Estructura de Datos
la[3] = [1, 4]
la[4] = [1, 3]
7/12
Tecnología Computacional y Estructura de Datos
Donde:
• IC : Inicio más cercano, es decir, lo más pronto que puede comenzar la
actividad.
• TC : Término más cercano, es decir, lo más pronto que puede terminar la
actividad.
• IL : Inicio más lejano, es decir, lo más tarde que puede comenzar la actividad
sin retrasar el término del proyecto.
• TL : Término más lejano, es decir, lo más tarde que puede terminar la
actividad sin retrasar el término del proyecto.
Adicionalmente se define el término Holgura para cada actividad que
consiste en el tiempo máximo que se puede retrasar el comienzo de una
actividad sin que esto retrase la finalización del proyecto.
La holgura (indicado con la letra S) de una actividad se puede obtener con
cualquiera de los siguientes cálculos:
S = IL - IC = TL – TC
EJEMPLO: A continuación se presenta un resumen de las actividades que
requiere un proyecto para completarse. El tiempo de duración de cada
actividad en semanas es fijo. Se solicita que estime la duración total del
proyecto a través del método CPM.
8/12
Tecnología Computacional y Estructura de Datos
Para elaborar el gráfico se puede optar por indicar una tarea ficticia para
representar un único punto de inicio, ya que existen realmente dos comienzos.
Este paso es opcional.
Luego se representan las dos tareas iniciales A y B que confluyen en la tarea
C, y así sucesivamente con todos los nodos del grafo y sus aristas.
El siguiente paso es comenzar por asignar en la parte superior de cada nodo
el inicio temprano y el término cercano de cada tarea, siendo 0 y 6 para el nodo
A, 0 y 8 para el nodo B. Luego se calcula el inicio temprano del nodo C
tomando como referencia el mayor Termino Cercano de todos sus nodos
padres que en este caso es el 8 perteneciente a B. Los nodos D y E toman el
final temprano del nodo C que es el antecesor y que en este caso es 20 (8+12).
De la misma forma, tomando como IC el TC mayor de todos los nodos padres,
se va completando el grafo hasta el final.
9/12
Tecnología Computacional y Estructura de Datos
El objetivo del análisis sería evaluar cual es el tiempo total de la tarea hasta
concluir con la prueba de funcionamiento como para decirle al cliente cuando
debe retirarlo y además, pensando en optimizar el tiempo y los recursos:
¿Cuantos operarios como mínimo se requieren para realizar toda la tarea sin
que haya retrasos?
Primero nos concentraremos en desarrollar el grafo CPM:
Conclusiones:
10/12
Tecnología Computacional y Estructura de Datos
11/12
Tecnología Computacional y Estructura de Datos
Información adicional
• Wikipedia: Problema de los puentes de Königsberg
https://es.wikipedia.org/wiki/Problema_de_los_puentes_de_K%C3%B6nigsberg
• TUTORIAL RUTA CRÍTICA, diagrama de red y cálculo de holguras | CPM en 10
minutos: https://www.youtube.com/watch?v=W42iXCU8hjk
• Camino Critico (CPM): https://www.youtube.com/watch?v=2M3J63evb2k
12/12