Escolar Documentos
Profissional Documentos
Cultura Documentos
Estructuras Discretas
Grafos
Autores
esteban.plaza@ceinf.cl
Ingeniera en Informtica
ayeromand@gmail.com
Ingeniera en Informtica
sebanicosp@gmail.com
Ingeniera en Informtica
2
Resumen Ejecutivo
El siguiente informe est pensado para demostrar soluciones a problemas tpicos con grafos a
travs del lenguaje de programacin Python en su versin 2.7.
3
ndice
1. Introduccin 5
2. Teora 6
a. Grafos 6
b. Dgrafos 6
c. Arboles 7
d. Representacin a travs de matrices. 7
i. Matriz de adyacencia. 7
ii. Matriz de incidencia. 7
d. Algoritmo de Dijkstra. 12
e. Algoritmo de Coloracin. 13
5. Conclusiones. 14
6. Bibliografa. 15
7. Anexos. 16
a. Resultados y simulacin paso a paso. 16
i. Algoritmo de Verificacin. 16
ii. rbol mnimo va Prim. 17
iii. Algoritmo de bsqueda DFS. 18
iv. Algoritmo de Dijkstra. 19
v. Algoritmo de coloracin. 20
4
1 Introduccin
Una de las partes de la matemtica discreta que estos ltimos aos ha experimentado un desarrollo notable es
la teora de grafos, esta teora permite modelar de forma simple cualquier sistema en el cual exista una
relacin binaria, es por esto que su aplicacin es muy general tanto as que podemos modelar problemticas
de matemtica, probabilidades, anlisis numrico, electricidad, telecomunicaciones, informtica e incluso en
sociologa y lingstica.
Bajo esta perspectiva es interesante poder utilizar la computacin para resolver estas problemticas.
Es por esto que este trabajo e informe tienen como objetivo comprender y aplicar los distintos algoritmos
utilizados para resolver problemas relacionados a grafos a travs de un lenguaje de programacin que en los
ltimos aos ha recibido una explosiva aceptacin y utilizacin desde la comunidad acadmica y cientfica.
5
2 Teora
Para la resolucin de las problemticas que vendrn en los apartados siguientes nos ser necesario
conocer algunos conceptos para comprender el problema y dar solucin a travs de la
programacin y modelado del mismo.
a) Grafos
Llamaremos grafo a una estructura combinatoria constituida por un conjunto {V, E}, donde a V
le denominaremos Vrtice y a E le denominaremos Arista.
Donde las circunferencias rojas sern los Vrtices y las lneas sern las
Aristas.
b) Dgrafos
Llamaremos Dgrafo a una estructura combinatoria por un conjunto {V, E} donde E mantienen
una conexin o direccin. Por lo cual imaginaremos a un grafo como lo muestra la siguiente
imagen.
c) Arboles
6
d) Representaciones a travs de matrices
i) Matriz de adyacencia
La matriz de adyacencia de un grafo G, donde cada filas y columnas son un vrtices de orden nxn,
es decir una matriz cuadrada, donde se ven representadas las conexiones (incidencias) entre grafos.
Matriz de adyacencia de un grafo G, donde cada i y j son un vrtices y aristas. Esta matriz conecta
vrtice con arista.
Matriz de incidencia
Grafo
7
3 Presentacin del Problema
Al momento de hablar de grafos y su utilizacin en ingeniera nos surgen algunas dudas tales
como:
2) Cmo puedo recorrer todos los vrtices, optimizando recursos (obteniendo el peso mnimo)?
5) Es posible colorear (pintar) las aristas de un grafo para que ninguna arista hermana a esta
(adyacente) tenga su mismo color? Cules son los colores o permutacin posible?
Cada una de estas preguntas se resolver a travs de algoritmos conocidos pero que esta vez sern
escritos en Python. Tales como:
2) Algoritmo de Prim.
4) Algoritmo de Dijkstra.
8
4 Metodologa para la resolucin de los problemas
Para poder representar grafos podemos hacerlo indicando sus Valencias las cuales indican el
nmero de vrtices al cual apunta cada nodo.
9
b) rbol mnimo va Prim.
Para la obtencin de un rbol generador de coste mnimo existen dos metodologas o algoritmos,
por un lado esta Prim y por otro Kruskal, pero para este caso, solucionaremos el problema
mediante Prim, el cual consiste en incrementar continuamente el tamao de un rbol, comenzando
por un vrtice inicial al que se le van agregando sucesivamente vrtices cuya distancia a los
anteriores es mnima. Esto significa que en cada paso, las aristas a considerar son aquellas que
inciden en vrtices que ya pertenecen al rbol.
El rbol generador mnimo est completamente construido cuando no quedan ms vrtices por
agregar.
10
c) Algoritmo de Bsqueda DFS.
El algoritmo de bsqueda en Profundidad o DFS, es un algoritmo que nos permite recorrer todos
los nodos de un grafo o rbol de manera ordenada pero no uniforme. Su funcionamiento consiste
en ir expandiendo todos y cada uno de los nodos que va localizando, de forma recurrente, en un
camino concreto. Cuando ya no quedan ms nodos que visitar en dicho camino, regresa
(Backtracking), de modo que repite el mismo proceso con cada uno de los hermanos del nodo ya
procesado
11
d) Algoritmo de Dijkstra.
12
e) Algoritmo de Coloracin.
En el algoritmo de Brelaz tendremos en cuenta la suma de los grados de los vecinos de cada
vrtice y los colores ya asignados a dichos vecinos
Secuencia
PASO 1
Calcular el grado de todos los vrtices y colorear un vrtice de grado mximo con el color 1.
PASO 2
Seleccionamos un vrtice, an sin colorear, con grado de saturacin o color mximo. Si existen
varios vrtices con el mismo grado de saturacin mximo escogemos el de mayor grado entre esos
vrtices. Si adems coinciden en grado seleccionamos el primero comenzando por la izquierda de
la tabla.
PASO 3
PASO 4
Si todos los vrtices se han coloreado, FIN. En caso contrario, volver al paso 3.
13
5 Conclusin
Como ya recopilamos toda la informacin y teora necesaria para solucionar los problemas
planteado solo queda implementar en un sistema integral estas soluciones a travs del
lenguaje de Programacin Python 2.7.
14
6 Bibliografa
15
7 Anexos
i) Algoritmo de Verificacin
Simulacin
{2, 3, 3, 2, 2} {6, 2, 1}
{2, 2, 2}
16
ii) rbol mnimo va Prim.
Simulacin
17
iii) Algoritmo de bsqueda DFS.
Para simular este problema abriremos el programa principal Principal_Menu.py.
3) Para cada uno de los vrtices anteriores indicaremos sus vrtices adyacentes.
Simulacin
18
iv) Algoritmo de Dijkstra.
3) Para cada uno de los vrtices anteriores indicaremos sus vrtices adyacentes.
Simulacin
Para el siguiente Grafo, entre el vrtice A y C.
Para confirmar este resultado lo contrastaremos con uno entregado por el programa GraphThing
versin 1.3.2, el cual entrega el siguiente camino mnimo.
19
v) Algoritmo de coloracin.
3) Luego de esto asociaremos a cada key (vrtice) con sus respectivas valencias y vrtices
adyacentes
Simulacin
20