Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
3)
AUTOR O AUTORES
Apellidos Completos Nombres Completos
PROGRAMA: Carrera _X_ Licenciatura ___ Especialización ____ Maestría ____ Doctorado ____
NÚMERO DE PÁGINAS 86
TIPO DE ILUSTRACIONES:
- Tablas y gráficos
ESPAÑOL INGLÉS
Arista no dirigida Edge not addressed
Arista dirigida Directed edge
Aristas múltiples Multiple edges
Bucle Loop
Grafo no dirigido Graph not addressed
Grafo simple Simple graph
Grafo dirigido Directed graph
Multigrafo dirigido Multigraph directed
Adyacente Adjacent
Incidente Incident
Grafo bipartito Bipartite graph
Hoja Sheet
Grafo regular Regular graph
Subgrafo Subgraph
ESPAÑOL
El principal objetivo es conformar un proyecto que muestre algunas de las aplicaciones de la
teoría de grafos en las redes de comunicaciones, manejo de información y secuencia de
programas. También mostrar ejemplos y aplicaciones de la teoría de grafos en el diseño y
estructura de redes de comunicaciones, establecer situaciones donde se muestra la importancia
de los grafos dirigíos en la ejecución de programas y diseñar estructuras de bases de datos
mostrando la utilidad de los grafos a través de ejemplos ilustrados.
La finalidad de nuestro trabajo es proveer de un texto en donde se encuentren algunas de las
mas grandes e importantes aplicaciones informáticas, teoría y terminología básica de la teoría
de grafos, a los estudiantes de informática matemática e ingeniería de Sistemas de los primeros
semestres, los cuales empiezan a estudiar la teoría de grafos y a comprender que ésta puede ser
de gran ayuda para la ciencia de la computación, por ende así para sus carreras respectivas.
INGLES
The main objective is to build a project that shows some of the applications of graph theory in
communication networks, information management and sequencing programs. We also show
examples and applications of graph theory in the design and structure of communication
networks, establish situations, showing the importance of the graph directed in program
implementation and design of database structures showing the usefulness of a graph illustrated
through examples.
The purpose of our work is to provide a text where some of the biggest and important
applications, theory and basic terminology of graph theory, students of mathematics and
computer engineering of the first semester, the are beginning to study the theory of graphs and
understand that it can be very helpful for computer science, and hence for their respective
careers.
APLICACIONES DE LA TEORIA DE GRAFOS EN LA
INFORMÁTICA
1
TRABAJO DE GRADO
INFORMATICA MATEMATICA
FACULTAD DE CIENCIAS
Bogotá, D. C.
10 de julio de 2009
2
DEDICATORIA
3
RESUMEN
4
AGRADECIMIENTOS
10 de julio de 2009
5
INDICE
1 INTRODUCCIÓN .................................................................................................................... 7
2 MARCO TEÓRICO Y REVISIÓN DE LITERATURA ......................................................... 8
3 FORMULACION DEL PROBLEMA Y JUSTIFICACION .................................................. 9
4 OBJETIVOS ........................................................................................................................... 10
5 HISTORIA DE LA TEORIA DE GRAFOS .......................................................................... 11
7 TÉRMINOS CLAVE .............................................................................................................. 19
8 DEFINICIONES ..................................................................................................................... 20
9 MODELOS CON GRAFOS ................................................................................................... 29
10 APLICACIONES INFORMÁTICAS USANDO LA TEORÍA DE GRAFOS ..................... 33
11 GRAFOS BIPARTITOS ......................................................................................................... 36
12 GRAFOS ISOMORFOS ......................................................................................................... 37
13 CONEXIÓN ............................................................................................................................ 39
13.1 CAMINOS ....................................................................................................................... 39
13.2 CONEXIÓN EN GRAFOS NO DIRIGIDOS .................................................................... 41
13.3 CONEXIÓN EN GRAFOS DIRIGIDOS ........................................................................... 43
13.4 APLICACIONES INFORMATICAS PARA LA CONEXIÓN ENTRE GRAFOS ............ 45
14 CAMINOS EULERIANOS Y HAMILTONIANOS .............................................................. 47
15 ALGORITMO DE DIJKSTRA .............................................................................................. 51
16 ÁRBOLES ............................................................................................................................... 52
17 INTRODUCCION A LOS ÁRBOLES................................................................................... 54
18 ARBOL BINARIO .................................................................................................................. 56
19 ALGORITMOS DE RECORRIDOS ..................................................................................... 57
19.1 IN-ORDEN ...................................................................................................................... 57
19.2 PREORDEN ..................................................................................................................... 58
19.3 POSTORDEN .................................................................................................................. 58
20 ÁRBOLES DE DECISIÓN ..................................................................................................... 61
20.2 APLICACIONES DE ÁRBOLES BINARIOS .................................................................. 64
20.3 APLICACIONES INFORMATICAS DE ÁRBOLES DE DECISION ............................... 70
20.4 ÁRBOLES DE JUEGOS .................................................................................................. 72
21 ARBOL RECUBRIDOR ........................................................................................................ 78
22 ALGORITMO DE KRUSKAL .............................................................................................. 79
23 ALGORITMO DE PRIM ....................................................................................................... 83
24 BIBLIOGRAFIA..................................................................................................................... 91
6
1 INTRODUCCIÓN
La teoría de grafos también llamada teoría de las gráficas, es una disciplina que es
importante tanto para las matemáticas como para la teoría de la computación. En esta
última disciplina todo es manejado a través de los grafos que son estructuras discretas
que constan de puntos y de líneas que se conectan entre sí. Es importante saber que
existen diferentes tipos de grafos, que se distinguen entre si por el tipo y el número de
líneas que pueden conectarse a través de pares de puntos.
Para este caso serán representados algunos de los diferentes problemas informáticos
que pueden ser resueltos a través de la teoría de grafos, dichos problemas pueden ser
como calcular el número de combinaciones diferentes de vuelo entre dos ciudades de
una red aérea, el problema del viajante, que trata de resolver cual es la manera en que
una persona debería viajar para conocer diferentes ciudades sin volver a pasar por la
misma ciudad, como utilizar grafos predecibles para la creación de sistemas
operativos, diseño de bases de datos entre otras aplicaciones.
7
2 MARCO TEÓRICO Y REVISIÓN DE LITERATURA
El problema de los puentes de Konigsberg, resuelto por Leonhard Euler, en 1736, fue
el comienzo de la teoría de grafos, ya que es considerado el primer resultado de esta
disciplina.
Después de estudiar la bibliografía nos dimos cuenta que hacía falta en la bibliografía
un texto donde se encontraran en un sólo lugar algunas de las aplicaciones más
importantes en la informática en el tema de la teoría de grafos. De ahí es de donde
surge nuestro objetivo final de este proyecto.
8
3 FORMULACION DEL PROBLEMA Y JUSTIFICACION
9
4 OBJETIVOS
10
5 HISTORIA DE LA TEORIA DE GRAFOS
La teoría de grafos es una disciplina que hoy en día presenta un desarrollo vertiginoso
debido a su importancia en el diseño de programas, circuitos etc. Sus ideas básicas las
introdujo el matemático suizo Leonhard Euler en el siglo XVIII.
Los grafos desde sus inicios se han empleado para resolver problemas de diversas
áreas. Dicha disciplina se puede utilizar, por ejemplo, para determinar si se puede o
no implementar un circuito sobre una placa de una sola capa; también a través de ella
se pueden diferenciar dos compuestos químicos que tengan la misma fórmula
molecular, pero distinta estructura. Como es también de gran importancia para
nuestra área, Informática, ya que a través de los grafos se pueden estudiar las
estructuras de redes en Internet, redes neuronales, análisis de los diferentes algoritmos
ya existentes, manejo de las estructuras de datos, la creación de los diferentes
sistemas operativos manejados hoy en día, entre otras aplicaciones.
Esta disciplina fue creada por el respetado matemático Leonhard Euler nacido el 15
de abril de 1707 en Brasilea, Suiza, y fallecido el 18 de septiembre de 1783 en San
Petersburgo. Quien es considerado como el principal matemático del siglo XVIII y
como uno de los más grandes de todos los tiempos.
Euler Vivió en Rusia y Alemania la mayor parte de su vida y realizó múltiples aportes
a la matemática, siendo uno de los más importantes la teoría de grafos, en 1736 con el
trabajo de los puentes de Konigsberg que fue considerado el primer resultado de
dicha disciplina.
Dicho problema consistía en que existen dos islas en el Rio Pregel en tierras de
Konigsberg, y que existen 7 puentes que se cruzan entre dichas islas, por lo cual
Euler se pregunto ¿Es posible dar un paseo empezando por cualquiera de las cuatro
11
partes de tierra firme, cruzando cada puente una sola vez y volviendo al punto de
partida?
Euler enfocó dicho problema representando cada parte de tierra por un punto y cada
puente, por una línea. Al final de esto se llega a la misma pregunta ¿Se podrá recorrer
todas las líneas del dibujo terminando en el mismo punto de partida sin repetir las
líneas?
Euler demostró que no era posible puesto que el número de líneas que inciden en cada
punto no es par, (condición necesaria para entrar y salir de un mismo punto). Así
nació la teoría de grafos.
12
dos variables Jk(t) y Vk(t) están relacionadas por una ley física (Ohm, etc.). Además,
por el hecho de estar interconectados deben cumplir los postulados conocidos como
leyes de Kirchhoff :
La suma algebraica de las intensidades (corrientes) asociadas a los arcos incidentes a
un vértice dado ha de ser 0 (CP). (No se acumula intensidad en ningún nodo).
La suma algebraica de los voltajes asociados a los arcos de cualquier ciclo ha de ser
0 (VP). (La diferencia de potencial ha de ser 0).
Modelización: Imponiendo dichos postulados a cada uno de los nodos y ciclos del
grafo que modela la red eléctrica se obtiene un sistema de ecuaciones lineales a
solucionar. El trabajo de Kirchhoff consistió en determinar un sistema equivalente y
reducido de dichas ecuaciones. Tal reducción se obtiene considerando únicamente las
ecuaciones asociadas a un sistema fundamental de ciclos y cortes asociados a un árbol
generador del grafo subyacente que, en total, da lugar a un sistema de tantas
ecuaciones lineales como elementos eléctricos. Dado un árbol generador T de un
grafo G de orden n, un ciclo fundamental asociado a T se obtiene añadiendo a T una
arista de G no perteneciente a T. De este modo pueden obtenerse m - (n - 1) ciclos
distintos, donde m es la medida de G. Por otro lado, un corte fundamental está
formado por el conjunto de arcos que unen pares de vértices situados en las dos
componentes conexas que resultan de suprimir en el árbol generador una de sus
aristas. Así, en total, hay n - 1 conjuntos de corte fundamentales.
13
EL PROBLEMA DE LOS CUATRO COLORES
Augustus de Morgan probó que no es posible que cinco países estén situados de
modo que cada país tenga frontera común con cada uno de los otros cuatro. Ahora
bien, en general, del hecho que en un determinado mapa se observe que no puede
haber k países adyacentes dos a dos no puede deducirse que pueda pintarse con k
colores.
En 1878 Arthur Cayley, incapaz de probar o refutar la conjetura de los cuatro colores,
presentó el problema a la London Mathematical Society. Antes de transcurrir un año,
Alfred Kempe (abogado y miembro de la sociedad) publicó un artículo en el que
hablaba de haber demostrado la conjetura de los cuatro colores.
Noción de mapa normal: es aquélla donde ningún país engloba otros países y donde,
además, nunca hay más de tres países que tengan un punto común.
14
Kempe demostró que era suficiente probar la conjetura de los cuatro colores para los
mapas normales ya que si hubiera un mapa que precisara de cinco colores, entonces
también habría un mapa pentacromático normal. También se percató que era
suficiente trabajar con mapas normales minimales, en el sentido que contienen el
mínimo número de países. Así, pues, el esquema de la demostración de Kempe
consistía en suponer la existencia de un mapa pentacromático normal y minimal y
concluir de ella una contradicción.
Kempe demostró primero que todo mapa normal debe tener un país con cinco, o
menor número, de países vecinos (en términos de grafos, a cada mapa normal se le
puede asociar un grafo plano (grafo dual) cuyas caras serán triángulos y, como grafo
plano, debe tener al menos un vértice de grado menor o igual que cinco). De aquí
dedujo que el conjunto de configuraciones (un país tiene dos vecinos, tres vecinos,
cuatro vecinos o cinco vecinos) es “inevitable" en cuanto todo mapa normal debe
contener alguna de ellas. Entonces su objetivo era probar que cada una de estas
configuraciones era también “reducible" en el sentido que si un mapa pentacromático
minimal contenía una de ellas, entonces habría un mapa pentacromático con menor
número de países, lo cual es absurdo. Su demostración es incompleta ya que la prueba
que presenta para el caso de la configuración de un país con cinco vecinos es
incorrecta. (De alguna manera puede decirse que la demostración de Appel y Hakel
corrige esta deficiencia analizando, mediante un programa informático, unas 1500
configuraciones).
15
posterioridad a Kempe haya afirmado públicamente que la conjetura de los cuatro
colores podría demostrarse encontrando un conjunto de configuraciones inevitables y
reducibles. Heesch utilizó un método muy conveniente para la representación de
configuraciones. Esta representación se conoce hoy como el grafo dual del mapa
original. Dicho grafo (plano) se obtiene considerando como vértices las capitales de
los distintos países y como aristas las trazas que unen las capitales correspondientes a
países vecinos y que cortan la frontera común. Así, asociado a un mapa normal
tenemos un grafo plano cuyas caras son triángulos. Por otro lado, con el objetivo de
hallar configuraciones inevitables, Heesch introdujo un método que puede asimilarse
al desplazamiento de cargas eléctricas de una malla.
16
Estos trabajos desarrollados por dichos matemáticos fueron de gran importancia ya
que dieron inicio a lo que miraremos en todo el transcurso del trabajo que lo
llamaremos teoría de grafos y aplicaciones informáticas.
A C
17
A B C
A -1 0 0
B -1 -1 0
C -1 -1 -1
A B C
18
7 TÉRMINOS CLAVE
Arista no dirigida: una arista asociada al conjunto {u, v}, donde u y v son vértices.
Arista dirigida: una arista asociada al par ordenado (u, v), donde u y v son vértices.
Aristas múltiples: aristas distintas conectando a los mismos vértices.
Bucle: una arista que conecta a un vértice consigo mismo.
Grafo no dirigido: un conjunto de vértices junto con un conjunto de aristas no
dirigidas que conectan a estos vértices entre si.
Grafo simple: un grafo no dirigido sin bucles ni aristas múltiples.
Grafo dirigido: un conjunto de vértices junto con un conjunto de aristas dirigidas que
conectan a estos vértices entre si.
Multigrafo dirigido: un grafo con aristas dirigidas que puede tener aristas dirigidas
múltiples.
Adyacente: dos vértices son adyacentes si hay una arista entre ellos.
Incidente: una arista es incidente con un vértice, si el vértice es un extremo de la
arista.
δ(v) (grado del vértice v de un grafo no dirigido): el número de aristas incidentes con
v.
δ+(v) (grado de salida del vértice v de un grafo dirigido): el número de aristas que
tienen a v como vértice inicial.
δ-(v) (grado de entrada del vértice v de un grafo dirigido): el número de aristas que
tienen a v como vértice final.
Grafo bipartito: un grafo cuyo conjunto de vértices esta dividido en dos subconjuntos
V1 y V2 tales que cada arista del grafo conecta un vértice de V1 con un vértice de V2.
Vértice aislado: un vértice de grado cero.
Hoja: un vértice de grado uno.
Grafo regular: un grafo en el que todos los vértices tienen el mismo grado.
19
Subgrafo de un grafo G = {V, E}: un grafo (W, F) tal que W es subconjunto de V y F
es subconjunto de E.
8 DEFINICIONES
DEFINICIÓN1: Vértice
Un vértice es la unidad fundamental de la que están formados los grafos. Los vértices
son tratados como un objeto indivisible y sin propiedades, aunque puedan tener una
estructura adicional dependiendo de la aplicación por la cual se usa el grafo; por
ejemplo, una red semántica es un grafo en donde los vértices representan conceptos o
clases de objetos.
tiene
EMPRESA EMPLEADOS
Tiene pertenecen
DEPARTAMENTOS
FIGURA 5. Representación de una red semántica.
DEFINICIÓN 2: Grafo
Un grafo simple G= {V, E} consta de V, un conjunto no vacío de vértices, y de E, un
conjunto de pares no ordenados de elementos distintos de V. A estos pares se les
llama arista. A continuación podemos dar una representación de lo que es un grafo:
20
V1 arista V2
V3 V4
DEFINICIÓN 3: Subgrafo
Un subgrafo de un grafo G es un grafo cuyos conjuntos de vértices y aristas son
subconjuntos de los de G. Se dice que un grafo G contiene a otro grafo H si algún
subgrafo de G es H o es isomorfo a H (dependiendo de las necesidades de la
situación)
El subgrafo inducido de G es un subgrafo G' de G tal que contiene todas las aristas
adyacentes al subconjunto de vértices de G.
A contiene a B
FIGURA 7. Grafo dirigido.
A B
FIGURA 8. Grafo no dirigido.
21
Las aristas no orientadas se consideran bidireccionales para efectos prácticos
(equivale a decir que existen dos aristas orientadas entre los nodos, cada una en un
sentido).
a c b
d e
FIGURA 9. Representación de grafo dirigido.
En la FIGURA 9 V = {a, b, c, d, e} y A = {(a, c), (d, a), (d, e), (a, e), (b, e), (d, b)}.
Se considera la característica de "grado" (positivo o negativo) de un vértice v (y se
indica como (v)), como la cantidad de aristas que llegan o salen de él; para el caso de
grafos no orientados, el grado de un vértice es simplemente la cantidad de aristas
incidentes a este vértice. Por ejemplo, el grado positivo (salidas) de d es 3, mientras
que el grado negativo (llegadas) de d es 0.
DEFINICIÓN 5: Multigrafo
Un multigrafo G= {V, E} consta de un conjunto V de vértices, un conjunto de E
aristas y una función f de E en {{u, v} |u, v € V, u≠v}. Se dice que las aristas e₁ y e₂
son aristas múltiples o paralelas su f(e₁)= f (e₂).
22
V4
V3
V1 V2
Como podemos ver en el anterior grafo V1,V2, V3, Y V4 tienen más de una arista
que conectan un mismo vértice a eso se le denomina un multigrafo.
Cuando hay mucho tráfico de información en diferentes servidores, es importante
tener varias líneas telefónicas simples esto se hace para que el flujo de información
que se este mandando quepa en varias líneas telefónicas (modelo multigrafo), ya que
si se esta mandando mucha información en los diferentes servidores y se toma una
sola línea telefónica (grafo simple), pueda que esa línea no tenga la capacidad
suficiente para mandar toda la información necesaria en consecuencia traerá perdida
de información y por lo cual hay una inestabilidad en las redes ya que no esta
mandando toda la información necesaria.
Como podemos ver en el anterior grafo si tomamos que los servidores son los vértices
y las líneas telefónicas son las aristas y se esta enviando un flujo de información
grande en V1 a V2, como podemos ver, V1 y V2 están utilizando dos aristas o sea
dos líneas telefónicas por lo que se esta enviado un flujo de información grande, pero
si podemos ver en V2 a V4 o V2 a V3 se esta enviando un flujo de información
pequeño por lo que nada más es necesario utilizar una sola arista en el cual representa
una sola línea telefónica.
Por lo tanto una forma de manejar redes entre servidores para el manejo de mucha
información es utilizando un modelo de multigrafos.
23
DEFINICION 7: Pseudografo
Un pseudografo G= {V, E} consta de un conjunto V de vértices, un conjunto E de
aristas y una función f de E en {{u, v}| u, v € V}. Una arista e es un bucle, o lazo, si
f(e) = {u, u} = {u} para algún u € V.
V1 V2
V4
V3
24
Vemos que en la FIGURA 11, V1, V3, V4 tienen bucles; dichos bucles están
puestos en los vértices para saber que si hay una pérdida de información, a ellos les
toque volver a retransmitir dicha información.
V2
V1 Arista con dirección
25
DEFINICIÓN 9: Multigrafo Dirigido
Un multigrafo dirigido G= (V, E) consta de un conjunto V de vértices, un conjunto E
de aristas y una función f de En E= {(u, v) | u, v€ V}. Se dice que la aristas e₁ y e₂ son
aristas múltiples si f (e₁)= f (e₂).
V2
V1 e3 e5
e4
e6
e1 e2 V5
V4 e7
e8
V3
FIGURA13. Representación de un multígrafo dirigido
26
V1
V3
V2
NOTA: Es importante que para hacer un buen diseño en teoría de grafos para
aplicaciones informáticas se necesita que las terminologías explicadas anteriormente
estén bien entendidas para eso se mostrara una tabla resumida con las terminologías
ya explicadas, con el fin de tener un mejor entendimiento en la hora de querer hacer
diseños para manejos aplicativos a través de los grafos.
¿Se admite
Tipos Aristas aristas ¿Se admiten
múltiples? bucles?
Multigrafo No dirigido Si No
Pseudografo No dirigido Si Si
Multigrafo Dirigido Si No
dirigido
Dirigido Si Si
Pseudografo
dirigido
27
DEFINICIÓN 11: Se dice que dos vértices u y v de un grafo no dirigido G son
adyacentes (o vecinos) en G si {u, v} es una arista de G. Si e = {u, v}, se dice que la
arista e es incidente con los vértices u y v. también se dice que la arista e conecta a u
y v. se dice que los vértices u y v son extremos de la arista e.
DEFINICIÓN 13: Si (u, v) es una arista del grafo dirigido G, se dice que u es
adyacente a v y que v es adyacente desde u. Al vértice u se le llama vértice inicial de
(u, v) y a v se le llama vértice final o Terminal de (u, v). Los vértices iníciales y
Terminales de un bucle coinciden.
28
9 MODELOS CON GRAFOS
Grafos de llamadas
Los grafos se pueden utilizar para representar las llamadas telefónicas hechas en una
red, por ejemplo en una red telefónica de larga distancia. En particular, puede usarse
un multigrafo dirigido para representar llamadas: cada vértice representa un número
de teléfono y cada arista representa una llamada. La arista que representa una llamada
sale del número del teléfono desde el que se hace la llamada y llega al número de que
lo recibe.
29
732-555-4444
732-555-1001
732-555-1234
732-555-0069
732-555-0011
732-555-9876
732-555-6666
FIGURA 15. Representación grafo de llamadas
Grafo de la Red
La red de Internet se puede representar mediante un grafo dirigido en el que cada
pagina Web esta representada por un vértice y en el que una arista comienza en la
pagina a y termina en la pagina b si hay un enlace en la pagina a que conduce a la
pagina b. Como cada segundo se crean paginas Web nuevas y otras desaparecen, hay
más de mil millones de vértices y decenas de miles de millones de aristas. Hay
muchas personas estudiando las propiedades del grafo de la red para entender mejor
la naturaleza de la red de Internet.
30
importante no ejecutar sentencias que requieran el resultado de sentencias no
ejecutadas. La dependencia de sentencias con respecto a sentencias previas se puede
representar por medio de un grafo dirigido. Cada sentencia se representa por un
vértice, y hay una arista de un vértice a un segundo si la sentencia representada por el
segundo vértice no puede ejecutarse hasta la sentencia representada por el primero se
ha ejecutado. A este tipo de grafo se le llama grafo de precedencia. Por ejemplo, el
grafo nos dice que la sentencia S₅ no se puede ejecutar hasta que se ejecute S₁, S₂, y
S₄.
S6
S5
S3
S4
S1 S2
S1 a:= 0
S2 b:= 1
Como pudimos ver anteriormente estos grafos son de gran ayuda para aplicaciones
que tengan que ver con el manejo de los sistemas operativos en las computadoras ya
31
que pueden servir de mucho para el diseño de ejecución de programas para dicho
sistema.
Para hacer un breve diseño en grafos de una base de datos conocer que información
acerca de sus empleados, departamentos y de los trabajos que hace cada empleado en
su departamento, sería conveniente representar los vértices como la información que
hay para los empleados, departamentos, y trabajos, y las aristas como la relación que
hay para cada una de ellas a continuación ilustraremos el diseño a través de un
multigrafo no dirigido.
32
Empleados
Trabajos
Empresa
Departamentos
Recoger un paquete de datos desde los sensores y colocarlo en una memoria del
computador
33
Una vez se tienen los datos, archivarlos en disco y efectuar un cálculo para identificar
el estado de funcionamiento.
R1 R2
G2
G1
I1 I2
C2
C1 E1 E2
34
G1 b:= a+1 (Guardan los datos que fueron recogidos)
C1 c:= a+1 (Calculan los datos que fueron recogidos)
I1 d:= a+c (Después de calcular el paquete de datos. Imprime lo que lleva hasta el
momento)
E1 e:= a+c (Enviar lo que se calculo del primer paquete de datos recogido, ya que
toca volver a recoger otro paquete de datos desde el sensor y no se puede perder lo
que se lleva hasta el momento)
R2 a1:= b+c (después de que haya calculado y guardado el paquete de datos anterior,
se puede volver a recoger el siguiente paquete de datos)
G2 b1:= a1+1 (vuelve otra vez a guardar lo que recoge de los sensores de datos)
C2 c1:= a1+1 (vuelve otra vez a calcular de lo que recogió hasta el principio)
I2 d1:= a1+c1 (ahora se imprime el total de lo que recogió)
E2 e1:= a1+c1 (vuelve a enviar el total que calculo, esto lo hace si le toca volver a
recoger en el sensor de datos).
(*) esta es la forma en que se representa un grafo de precedencia.
Las anteriores secuencias son manejadas en los sistemas operativos cuando se quieren
hacer varias impresiones en WORD simultáneamente.
35
11 GRAFOS BIPARTITOS
36
FIGURA 19. Representación de grafo bipartito.
12 GRAFOS ISOMORFOS
DEFINICION
Dados G=(V,E) y G´=(V´,E´), se denomina isomorfismo de G a G´ a la aplicación
biyectiva f tal que para a, b ε V, {a,b}ε E se cumple {f(a),f(b)} ε E´. Es decir, la
aplicación que relaciona biyectivamente pares de vértices de E con pares de vértices
de E´, de modo que los vértices conectados por aristas siguen estándolo.
37
INTRODUCCIÓN
Hay muchas maneras en las que los caminos y circuitos pueden ayudarnos a
determinar si dos grafos son o no isomorfos. Por ejemplo, la existencia de un circuito
simple de una longitud concreta es un invariante útil que se puede emplear a la hora
de mostrar que dos grafos no son isomorfos.
Además, podemos hacer uso de los caminos a la hora de construir posibles
isomorfismos.
Como ya hemos dicho, un invariante bajo isomorfismo es útil para grafos simples es
la existencia de un circuito simple de longitud k, siendo k un entero positivo mayor
que 2.
En este ejemplo, G y G´ se denominan isomorfos, y son matemáticamente iguales,
solo varia la apariencia, o sea, que se mantienen las adyacencias, estructura, caminos
y ciclos.
a c 1
2 3
b d
G 4 G‟
FIGURA 20. Ejemplo de grafos isomorfos.
38
13 CONEXIÓN
INTRODUCCION
Hay muchos problemas que se pueden representar por medio de caminos que se
forman al ir recorriendo las aristas de un grafo. Por ejemplo, el problema de
determinar si se puede enviar o no un mensaje entre dos ordenadores usando enlaces
intermedios puede estudiarse utilizando un modelo de grafos. Los problemas de
planificar de forma eficiente las rutas de distribución de correo, de recogida de
basuras, los diagnósticos en redes de ordenadores y muchos otros pueden resolverse
utilizando modelos que involucran caminos definidos sobre grafos.
13.1 CAMINOS
DEFINICION 1
39
vértices x0, x₁ x₂,…, xn o también que recorre las aristas a₁ a₂,…, an. Un camino o
circuito es simple si no contiene la misma arista más de una vez.
EJEMPLO
a b c
d e f
40
DEFINICION 2
¿Cuándo tiene una red informática la propiedad de que dos ordenadores cualesquiera
pueden compartir información si pueden enviarse mensajes a través de uno o más
ordenadores intermedios? Si se utiliza un grafo para representar esta red informática,
con los vértices representando ordenadores y las aristas representando enlaces de
comunicación, la pregunta se convierte en la siguiente: ¿Bajo que condiciones existe
siempre un camino entre dos vértices cualesquiera del grafo?
41
DEFINICION 3
Se dice que un grafo no dirigido es conexo si hay un camino entre cada par de
vértices distintos del grafo.
Se quiere diseñar una red informática, en la cual existen cinco servidores que quieren
enviar información para todos ellos, pero se busca que no pueda existir perdida de
información para ningún servidor que este enviando datos.
42
caso no es posible representar dicho grafo como una red informática ya que la gracia
es que haya siempre conexión para todos los servidores.
Por lo tanto para manejos de redes informáticas para hacer diseños en grafos seria
bueno representarlo a través de los grafos conexos.
Un modelo que puede ser utilizado para grafos conexos puede ser:
43
DEFINICION 4
Se dice que un grafo dirigido es fuertemente conexo si hay un camino de a a b y un
camino de b a a para cualesquiera dos vértices a y b del grafo.
DEFINICION 5
Se dice que un grafo es dirigido es débilmente conexo si hay un camino entre cada
dos vértices del grafo no dirigido subyacente.
44
tres conjuntos tenía aproximadamente 44 millones de vértices (es bastante
sorprendente que estos tres conjuntos sean de tamaños tan parecidos).
El manejo de caminos entre grafos puede ser fundamental para muchas aplicaciones
informáticas, una de ellas puede ser la seguridad para las bases de datos de una
empresa, por ejemplo, si una empresa quiere darle funciones a diferentes
departamentos para el manejo de inserción, eliminación y actualización de los
diferentes empleados que trabajan para cada departamento, una forma de hacerlo es
haciendo un diseño utilizando grafos, a continuación se ilustrara un grafo que
funcione para lo que se pide.
E= Empresa
DS= Departamento de sistemas
DC= Departamento de contaduría
DG= Departamento para la gerencia
ES= Empleados para el departamento de sistemas
EC= Empleados para el departamento de contabilidad
EG= Empleados que hacen parte con la gerencia de la empresa
DS
ES
E DC EC
EG
DG
45
FIGURA 24. Representación de las funciones y departamentos de una empresa en un
grafo.
En el anterior grafo lo que se quiere ilustrar, es que es fundamental manejar bien los
caminos entre grafos, porque como podemos ver existe una empresa que puede
actualizar, insertar, eliminar sus departamentos, dichos departamentos solo pueden
insertar, actualizar, eliminar aquellos empleados que trabajen para este, por eso es que
en el diseño de este grafo se especifican los caminos que pueden existir, existen
caminos dirigidos entre E-DS, E-DC, y E-DG, con esto estamos especificando que la
empresa puede hacer con sus departamentos ya sea eliminar, actualizar o insertar
otro departamento. Para cada departamento que tiene dicha empresa existen caminos
entre DS-DE, DC-EC, y DG-EG, con esto cada departamento puede eliminar,
insertar o actualizar aquellos empleados que trabajen para dicho departamento, esto
es importante ya que cada departamento tiene un poder solo sobre los empleados que
le corresponden.
46
FIGURA 25. Representación de la estructura de las redes de comunicaciones móviles
en torno a un individuo elegido al azar.
Al principio nos habíamos preguntado ¿Si era posible movernos por las aristas de un
grafo comenzando de un vértice y volviendo a él después de haber pasado por cada
arista del grafo exactamente una vez?, Análogamente ahora nos preguntamos ¿Será
qué podemos desplazarnos por las aristas de un grafo comenzando en un vértice y
volviendo a él después de haber visitado cada vértice del grafo exactamente una vez?
Aunque estas preguntas parecen similares, la primera de ellas, que pregunta si el
grafo contiene lo que se llama un circuito euleriano , puede resolverse fácilmente
para cualquier grafo, mientras que la segunda cuestión, la de si el grafo contiene o no
lo que se llama un circuito hamiltoneano, es bastante difícil de resolver. En esta
sección analizaremos ambas preguntas y estudiaremos las dificultades que se
presentan a la hora de resolverlas.
47
La FIGURA 26 muestra un diagrama del problema del Camino Hamiltoniano. El
objetivo es encontrar un camino que vaya del inicio hasta el final pasando por todos
los demás puntos una sola vez. Este problema es difícil para computadoras
convencionales (lógica serial) porque deben de intentar cada camino posible uno por
uno.
Es como tener una pila de llaves y tratar de ver cuál es la que entra en una cerradura.
Las computadoras convencionales son muy buenas para las matemáticas, pero malas
para problemas de tipo "llave en la cerradura".
Por las mismas razones por las que el ADN fue supuestamente seleccionado para los
organismos vivientes como material genético, el ser estable y predecible en
reacciones, las cadenas de ADN también pueden ser usadas para codificar
información para sistemas matemáticos.
Las computadoras basadas en ADN pueden tratar todas las llaves al mismo tiempo
(masivamente paralelo) y por lo tanto son muy buenas para problemas de llave-en-
la-cerradura, pero mucho más lentas para problemas matemáticos simples como la
multiplicación. El problema del Camino Hamiltoniano fue escogido porque todos los
48
problemas llave-en-la-cerradura pueden ser resueltos como problemas de Camino
Hamiltoniano.
Crear una secuencia de ADN única para cada ciudad (de A hasta G). Para cada
camino, por ejemplo, de A a B,
Crear una pieza de ADN que concuerde con la última mitad de A y la primera mitad
de B: Aquí el bloque rojo representa a la ciudad A, mientras que el bloque naranja
49
representa a la ciudad B. El bloque mitad rojo mitad naranja que conecta a los otros
dos bloques, representa el camino de A a B.
En un tubo de ensayo, todas las diferentes piezas de ADN se conectarán unas con
otras al azar, formando caminos a través del grafo. Por peso, las secuencias de ADN
que tuvieran 7 "ciudades" de largo fueron separadas del resto. Una malla fue usada,
la cual permite que pasen rápidamente pedazos pequeños de ADN, mientras que los
segmentos más largos son frenados. El procedimiento usado en realidad permite
aislar las piezas que son precisamente de 7 ciudades de largo. La clave para resolver
el problema fue usar ADN para llevar a cabo los cinco pasos del algoritmo. Estos
bloques interconectados, pueden ser usados para modelar el ADN. Para asegurar que
las secuencias que quedan pasan por todas las ciudades, fueron usadas piezas
"pegajosas" de ADN unidas a magnetos para separar el ADN. Los magnetos fueron
usados para asegurar que el ADN deseado permanezca en el tubo de ensayo,
mientras que el ADN no requerido es removido. Primero, los magnetos se quedaban
con todo el ADN que pasa por la ciudad A en el tubo de ensayo, luego por B, luego
C, y D, y así sucesivamente. Al final, el ADN que permanece en el tubo fue aquél
que pasa por todas las ciudades. Todo lo que falta es secuenciar el ADN, revelando
el camino de A a B a C a D a E a F a G.
Al ADN tiende naturalmente a formar largas hélices dobles: Las dos hélices son
unidas por "bases", que serán representadas por bloques de colores. Cada base se une
solamente a otra base específica. En el ejemplo, cada bloque de color únicamente se
unirá con el mismo color. Por ejemplo, si solo se tuvieran bloques rojos, pudieran
formar una cadena larga como esta. Cualquier otro color no se unirá con el rojo.
50
15 ALGORITMO DE DIJKSTRA
El algoritmo de dijkstra también conocido como ruta más corta; a partir de un vértice
determinado se obtienen todas las rutas más cortas hacia todos los demás vértices.
EJEMPLO
51
FIGURA 27. Ejemplo de solución del Algoritmo de Dijkstra
Vértice 1 2 3 4 5 6 7
Ruta - 1,2 1,3 1,4 1,3,5 1,3,6 1,3,5,7
Costo 0 9 7 8 10 12 18
PSEUDOCODIGO
16 ÁRBOLES
52
Los árboles comenzaron a emplearse en 1857, cuando el matemático ingles Arthur
Cayley los utilizo para contar cierto tipo de componentes químicos. Desde ese
momento, los árboles se han empleado para resolver problemas de gran variedad en
diferentes disciplinas como lo son en la informática, biología, medicina etc.
Los árboles se usan para crear algoritmos eficientes que localizan elementos en una
lista, también se pueden utilizar en algoritmos como el código de huffman, que
construyen códigos compresores eficientes, ahorrando costes en la transmisión de
datos y en su posterior almacenamiento (mas adelante se explicara con mas detalle el
código de huffman), también dichos árboles son de gran ayuda para la creación de
juegos como son el ajedrez, triqui entre otros que en si puede ayudar para crear
buenas estrategias ganadoras.
53
En sí los árboles son estructuras de datos que están teniendo gran importancia en la
actualidad como en futuras generaciones, ya que gracias a dichas estructuras se
pueden construir algoritmos que tienen gran capacidad computacional.
Desde un punto de vista formal (teoría de conjuntos), un árbol con raíz se puede
considerar como una estructura constituida por un conjunto, N, cuyos elementos se
denominan vértices, y una relación de orden parcial transitiva, —, definida sobre N, y
caracterizada por la existencia de un elemento mínimo (anterior a todos los demás)
único, la raíz y también un predecesor único para cada vértice p distinto de la raíz, es
decir, un vértice, q. También existen los arboles sin raíz, en cuales la raíz no esta
definida, en éste caso la raíz puede ser cualquiera de los nodos.
Esta estructura se puede considerar una estructura recursiva teniendo en cuenta que
cada vértice del árbol, junto con todos sus descendientes, y manteniendo la
ordenación original, constituye también un árbol o subárbol del árbol principal,
característica esta que permite definiciones simples de árbol, más apropiadas desde el
punto de vista de la teoría de tipos abstractos de datos, y, ajustadas, cada una de ellas,
al uso que se vaya a hacer de la noción de árbol.
54
Un árbol impone una estructura jerárquica sobre una colección de objetos. Es claro
decir que la utilización de árboles se presentan tanto dentro como fuera del área de
computación (índices de libros, árboles genealógicos, etc.); en Informática
constituyen una de las estructuras más utilizadas, con aplicaciones que van desde los
árboles sintácticos utilizados para la representación y/o interpretación de términos de
un lenguaje o expresiones aritméticas, pasando por los árboles de activación de
procedimientos recursivos, hasta la representación de datos que se desea mantener
ordenados con un tiempo de acceso relativamente bajo. En general, se usarán árboles
siempre que se quiera representar información jerarquizada, cuando esta converja en
un solo punto.
Raíz
55
18 ARBOL BINARIO
Un árbol binario es el que cumple que el subárbol izquierdo de cualquier nodo (si no
está vacío) contiene valores menores que el que contiene dicho nodo, y el subárbol
derecho (si no está vacío) contiene valores mayores.
Usos comunes de los árboles binarios son los árboles binarios de búsqueda, los
montículos binarios y codificación de huffman.
También seria importante definir que los Árboles Binarios según la teoría de grafos
vienen siendo grafos conexos, a cíclicos y no dirigidos tal que el grado de cada
vértice no es mayor a 3. De esta forma solo existe un camino entre un par de vértices.
Es bueno tener las siguientes condiciones para tener bien definido un árbol binario en
la teoría de grafos. Estas serían:
- Un árbol binario es un árbol con raíz en el que cada vértice tiene como
máximo dos hojas.
- Un árbol binario lleno es un árbol en el que cada vértice tiene cero como
mínimo o dos hijos como máximo.
- Un árbol binario perfecto es un árbol binario lleno en el que todas las hojas
están a la misma profundidad.
56
En conclusión lo que podemos decir acerca de los Árboles Binarios es que son
árboles en los que ninguno de sus vértices puede tener más de dos sub-árboles. En un
árbol binario cada vértice puede tener cero, uno o dos hijos. Se conoce el vértice
izquierdo como hijo izquierdo y el vértice derecho como hijo derecho.
19 ALGORITMOS DE RECORRIDOS
19.1 IN-ORDEN
DEFINICION
57
o Recorrer el sub-árbol derecho en in-orden.
19.2 PREORDEN
DEFINICION
o Examinar la raíz.
o Recorrer el sub-árbol izquierdo en pre-orden.
o recorrer el sub-árbol derecho en pre-orden.
19.3 POSTORDEN
DEFINICION
58
o Recorrer el sub-árbol izquierdo en post-orden.
o Recorrer el sub-árbol derecho en post-orden.
o Examinar la raíz.
B C
F
D E
J K
G H I
In-orden: GDBHEIACJKF
Pre-orden: ABDGEHICFJK
Post-orden: GDHIEBKJFCA
59
-
J
*
/
+
1 23
- /
7 5
3 *
- 8
* 3
4 5
60
Están además la notación polaca en la que los operadores siempre preceden a los
operandos sobre los que actúan, y que tiene la ventaja de no necesitar paréntesis y la
polaca inversa en la que los operadores van después de los operandos sobre los que
actúan, la ventaja mas grande es que los cálculos se realizan secuencialmente según
se van introduciendo operadores, en vez de tener que esperar a escribir la expresión al
completo. Debido a esto, se cometen menos errores al procesar cálculos complejos:
20 ÁRBOLES DE DECISIÓN
Un árbol de decisión tiene unas entradas las cuales pueden ser un objeto o una
situación descrita por medio de un conjunto de atributos y a partir de esto devuelve
una respuesta la cual en últimas es una decisión que es tomada a partir de las
entradas.
Los valores que pueden tomar las entradas y las salidas pueden ser valores discretos o
continuos. Se utilizan más los valores discretos por simplicidad, cuando se utilizan
valores discretos en las funciones de una aplicación se denomina clasificación y
cuando se utilizan los continuos se denomina regresión.
61
Un árbol de decisión lleva a cabo un test a medida que este se recorre hacia las hojas
para alcanzar así una decisión. El árbol de decisión suele contener vértices internos,
vértices de probabilidad, vértices hojas y aristas. Un vértice interno contiene un test
sobre algún valor de una de las propiedades. Un vértice de probabilidad indica que
debe ocurrir un evento aleatorio de acuerdo a la naturaleza del problema, este tipo de
vértices es redondo, los demás son cuadrados. Un vértice hoja representa el valor que
devolverá el árbol de decisión. Y finalmente las ramas brindan los posibles caminos
que se tienen de acuerdo a la decisión tomada.
Búsqueda Binaria
Sistemas Expertos
Árboles de juegos
Los árboles de decisión generalmente son binarios, es decir que cuentan con dos
opciones, aunque esto no significa que no puedan existir árboles de 3 o más opciones.
62
EJEMPLO:
BUSQUEDA BINARIA
7 25
23 30
3 10
40
FIGURA 33: Representación de un árbol de decisión.
63
El procedimiento anterior se realiza hasta encontrar el número buscado o hasta
llegar a NULL, pueda que el número no se encuentre en la FIGURA 31.
20.1 VENTAJAS
CODIFICACION DE HUFFMAN
Los árboles binarios han sido usados para muchas aplicaciones informáticas, como
uno de estos casos es el algoritmo de Huffman.
Este algoritmo fue usado para compresión de datos. El termino se refiere al uso de
una tabla de códigos de longitud variable para codificar un determinado símbolo
(como puede ser un caracter en un archivo), donde la tabla ha sido rellenada de una
manera específica basándose en la probabilidad estimada de aparición de cada posible
64
valor de dicho símbolo. Dicho algoritmo fue desarrollado por David A. Huffman
mientras era estudiante de doctorado en el MIT.
65
F 2 1011
L 2 0110
D 2 0111
A 2 11010
B 1 110110
H 1 110111
J 1 111100
P 1 111101
R 1 111110
T 1 111111
38
17 24
7„‟ 9 10 14
6E
5 4 4 7 7
2D
3U 2A 2L 2M 2F
3N 30 4
2S 2 2 2
1B 1H 1J 1P 1R 1T
66
FIGURA 35: Árbol Binario que representa el código de huffman.
ARBOLES B+
Los arboles B+ son una alternativa a los archivos secuenciales indexados, este
mecanismo de indexación ayuda a acelerar el acceso a los datos deseados, un ejemplo
concreto para esto puede ser cuando queremos encontrar un capitulo especifico en un
índice alfabético en un libro estos mecanismos son importantes para que el usuario
tenga una respuesta rápida de lo que quiere encontrar.
GRAFOS
CONEXION HISTORIA
ARBOLES OBJETIVOS
67
Un árbol binario es una estructura de datos útil cuando se trata de hacer modelos de
procesos en donde se requiere tomar decisiones en uno de dos sentidos en cada parte
del proceso. Supongamos que tenemos un arreglo en el cual tenemos que buscar un
dato duplicado, una manera de encontrar los elementos duplicados en un arreglo es
recorrerlo todo y comparar con cada uno de los elementos del arreglo. Si en esta
situación tuviéramos un arreglo de n posiciones se deben hacer n comparaciones,
siendo n un número pequeño, no habría ningún problema. Pero se va complicando
más a medida que n aumenta.
El primer número del arreglo se coloca en la raíz del árbol (como en este ejemplo
siempre vamos a trabajar con árboles binarios, simplemente diremos árbol, para
referirnos a un árbol binario) con sus sub-árboles izquierdo y derecho vacíos. Luego,
cada elemento del arreglo se compara con la información del vértice raíz y se crean
los nuevos hijos con el siguiente criterio:
Una vez que ya está creado el árbol, se pueden buscar los elementos repetidos. Si x es
el elemento buscado, se debe recorrer el árbol del siguiente modo:
Sea k la información del nodo actual p. Si k>x entonces cambiar el vértice actual a
right(p)(Véase el algoritmo a continuación), en caso contrario, en caso de que x=k
68
informar una ocurrencia duplicada y en caso de que x≥k cambiar el vértice actual a
left(p)(Véase el algoritmo a continuación).
<14,15,4,9,7,18,3,5,16,4,20,17,9,14,5>
69
FIGURA 37: Árbol binario para ordenar una secuencia de números
Para ordenar los elementos de este arreglo basta recorrer el árbol en forma de
in-orden.
70
de decisión generado clasifica correctamente los datos. Este árbol, además, se
caracteriza por ser el óptimo en el sentido que minimiza el número de atributos
requeridos para alcanzar la conclusión-decisión, siendo esta la explicación de por qué
ciertos atributos no aparecen en el árbol.
IMPORTE
CONTADO SOLVENCIA
CREDITO CONTADO
71
Aunque ese árbol, que se lee de izquierda a derecha y desde arriba a abajo, es
equivalente a las cinco reglas siguientes:
La estructura del árbol representa la trayectoria óptima para alcanzar una decisión en
ese conjunto de reglas.
Los árboles de juegos son también una aplicación de los árboles de decisión.
Tomemos por ejemplo el conocido juego de Triqui y consideremos una función que
72
evalúa una posición del tablero y nos devuelve un valor numérico (entre mas grande
es este valor, mas buena es esta posición).Un ejemplo de la implantación de esta
función es considerando el numero de renglones, columnas y diagonales restantes
abiertas para un jugador menos el numero de las mismas para su oponente, por
ejemplo la siguiente posición en un juego y sus posibles continuaciones:
Nota: La estructura que esta hecha para este determinado juego de triqui es que
muestran todas las posibilidades para que el signo (x) gane pero también se puede
hacer una estructura para que pueda también ganar el signo (o), probabilidad al azar
que para este caso seria organizar de mejor manera las diferentes jugadas que puede
hacer un determinado jugador. Este esquema lo que queremos mostrar es como
pueden ser muy aplicables los arboles de decisión en la programación, pero seria
interesante hacer de aplicación un juego triquis pensando en todas las distintas
jugadas que puede hacer un jugador teniendo como ganador el signo (x) o el signo
(o).
Dada un posición del tablero, el mejor movimiento siguiente esta determinado por la
consideración de todos los movimientos posibles y las posiciones resultantes.
73
Ahora se introduce la posibilidad de prever varios movimientos. Entonces la función
se mejorará en gran medida; se inicia con cualquier posición y se determinan todos
los posibles movimientos en un árbol hasta un determinado nivel de previsión. Este
árbol se conoce como árbol de juego cuya profundidad es igual a la profundidad de
dicho árbol.
Los árboles de decisión se usan en los sistemas expertos porque son más precisos que
el hombre para poder desarrollar un diagnóstico con respecto a algo, ya que el
hombre puede dejar pasar sin querer un detalle, en cambio la máquina mediante un
sistema experto con un árbol de decisión puede dar un resultado exacto.
Una deficiencia de éste es que puede llegar a ser mas lento pues analiza todas las
posibilidades pero esto a su vez es lo que lo vuelve mas preciso que al hombre. A
continuación se presenta un ejemplo de un sistema experto y de cómo puede llegar a
diagnosticar que se emplee un fármaco X en una persona con presión arterial.
74
FIGURA 40: Ejemplo de Árbol de Decisión en sistemas Expertos.
1.- Tiene presión arterial alta, su azúcar en la sangre es bajo, es alérgico a los
antibióticos y SI tiene otras alergias.
75
2.- Tiene presión arterial media y su índice de colesterol es alto.
El árbol nos permite tomar decisiones y llegar a una solución ante cada problema que
se nos presenta en un cuerpo de guardia con un paciente que acuda a nosotros con
dolor precordial.
76
FIGURA 41: Representación de un sistema Experto con Árboles de Decisión en una
situación real.
77
21 ARBOL RECUBRIDOR
78
22 ALGORITMO DE KRUSKAL
Entre los problemas sobre grafos, uno de los de mayor interés por su enorme abanico
de aplicaciones es la obtención del Árbol de recubrimiento de peso mínimo. En lo que
sigue nos referiremos a éste árbol por las siglas de su nombre en inglés, MST. La
determinación del MST tiene innumerables aplicaciones en diversas ramas de la
ciencia y la tecnología. Por ejemplo, este tipo de árboles pueden usarse directamente
79
como base para optimizar el diseño de redes de transmisión de energía o de
información cuando la topología de las conexiones debe ser (o conviene que sea)
arborescente. En otras áreas, el MST puede usarse para determinar agrupamientos
naturales de datos. Si tenemos una colección de datos y alguna manera de medir la
disimilitud o “distancia” entre ellos, podemos ver esta colección como el conjunto de
vértices de un grafo y las disimilitudes entre objetos como aristas de un grafo
completamente interconectado.
El MST de un grafo de este tipo tiene la propiedad de que si se eliminan sus aristas de
mayor peso (disimilitud) se obtiene un “bosque” en el que cada sub-árbol agrupa
todos los datos similares o “próximos” entre sí.
Para ejecutar bien el algoritmo hay que seguir los siguientes pasos:
1. Se marca la arista con menor valor. Si hay más de una, se elige cualquiera de
ellas.
2. De las aristas restantes, se marca la que tenga menor valor, si hay más de una,
se elige cualquiera de ellas.
3. Repetir el paso 2 siempre que la arista elegida no forme un ciclo con las ya
marcadas.
4. El proceso termina cuando tenemos todos los vértices del grafo en alguna de
las aristas marcadas, es decir, cuando tenemos marcados n-1 arcos, siendo n el
número de vértices del grafo.
1 3 2 7 4 9
7
1 8 5 6 2 4
5
3 1 6
80
Siguiendo el algoritmo de Kruskal, en nuestro software llamado
ALGORITMOS VORACES, tenemos los siguientes pasos:
o FIN. Finalizamos dado que los 7 vértices del grafo están en alguna de
las aristas, o también ya que tenemos marcadas 6 aristas (n-1).
o Por tanto el árbol de mínima expansión resultante sería:
81
FIGURA 45: Representación de una Árbol de Expansión Mínima.
Tenemos una área determinada donde existen una cantidad n de oficinas y en cada
oficina uno o mas puntos de red, el punto es hacer el diseño correcto del cableado
estructurado de esta red, de tal manera que utilicemos la menor cantidad posible de
cable de red en unir todas las oficinas y los puntos de red que hay en ella.
Utilizaremos, como se ve en la FIGURA 45, la topología de estrella.
82
La aplicación practica del Algoritmo Kruskal es la de encontrar un árbol generador
mínimo es decir buscar un árbol donde los vértices y donde el valor de total de todas
las aristas del árbol sea el mínimo posible
Un árbol de peso mínimo es un árbol optimo.
23 ALGORITMO DE PRIM
Este algoritmo fue diseñado en 1930 por el matemático Vojtech Jarnik y luego de
manera independiente por el científico computacional Robert C. Prim en 1957 y
redescubierto por Dijkstra en 1959. Por esta razón, el algoritmo es también conocido
como algoritmo DJP o algoritmo de Jarnik.
83
dirigido y cuyas aristas están etiquetados. Por así decirlo, dicho algoritmo encuentra
un subconjunto de aristas que forman un árbol con todos los vértices, donde el peso
total de todas las aristas en el árbol es el mínimo posible. Si el grafo no es conexo,
entonces el algoritmo encontrara el árbol recubridor mínimo para uno de los
componentes conexos que forman dicho grafo no conexo.
CODIGO EN JAVA
La idea básica consiste en añadir, en cada paso, una arista de peso mínimo a un árbol
previamente construido. Más explícitamente:
84
{
85
if (v != s)
result.addEdge (v, table [v].predecessor);
return result;
}
}
NOTA: Es importante saber que para la implementación del algoritmo de prim, fue
necesario tomar como base la creación de una clase grafo, por lo que ya explicado en
la definición de dicho algoritmo es basado o derivado a través de la teoría de grafos,
por lo que es importante implementar un grafo, ya explicado en capítulos anteriores
podrá ser fácil de implementar.
86
P(f) ≥ P(e)
Ninguna de las
aristas esta marcada,
y el vértice D ha sido
elegido
arbitrariamente como
el punto de partida.
87
El segundo vértice es C, G B,E,F A,D
el más cercano a D:
A esta a 5 de
distancia, B a 9, E a
15 y F a 6. De estos,
5 es el valor mas
pequeño, así que
marcamos la arista
DA.
El próximo vértice a
elegir es el mas C B,E,G A,D,F
cercano a D o A. B
esta a 9 de distancia
de D y a 7 de A, E
esta a 15 y F esta a 6.
6 es el menor
El algoritmo
continúa. El vértice B
que esta a una NULL C,E,G A,D,F,B
distancia de 7 de A,
es el siguiente
marcado. En este
punto la arista DB es
marcada porque sus
dos extremos ya
están en el árbol y
por lo tanto no podrá
ser utilizado.
88
Aquí hay que elegir
entre C, E Y G. C
esta a 8 de distancia NULL C,G A,D,F,B,E
de B, E esta a 7 de
distancia de B, y G
esta a 11 de distancia
de F. E esta mas
cerca, entonces
marcamos el vértice
E y la arista EB.
Otras dos aristas
fueron marcadas
porque ambos
vértices que unen
fueron agregados al
árbol.
G es el único vértice
pendiente, y esta mas NULL NULL A,D,F,B,E,
cerca de E que de F, C,G
asi que se agrega EG
al árbol. Todos los
vértices están ya
marcados, el árbol de
expansión minimo se
muestra. En este caso
con un peso de 39.
89
Cada algoritmo tanto Kruskal como prim son de gran ayuda para implementaciones
informáticas, lo importante es que cada una tiene su propia función, por lo cual es
necesario que cuando se programe o se aplique cada una de ellas se haga con sus
respectivos pasos.
KRUSKAL PRIM
90
24 BIBLIOGRAFIA
91
PONTIFICIA UNIVERSIDAD JAVERIANA
FACULTAD DE CIENCIAS
CARRERA DE INFORMATICA MATEMATICA
Autores:
Carlos Paternostro
Viviana Piedra
Director:
Gustavo Nieto
CONTENIDO
Introducción
Proposito
Formulacion del problema y justificacion
Objetivos
Grafos
Historia
Definicion
Tipos de grafos
Aplicaciones
Arboles
Arbol Binario
Objetivo General:
Conformar un proyecto que muestre algunas de las
aplicaciones de la teoría de grafos en las redes de
comunicaciones, manejo de información y secuencia de
programas.
Objetivos Específicos:
Mostrar ejemplos y aplicaciones de la teoría de grafos en
el diseño y estructura de redes de comunicaciones.
Establecer situaciones donde se muestra la importancia
de los grafos dirigidos en la ejecución de programas
Diseñar estructuras de bases de datos mostrando la
utilidad de los grafos a través de ejemplos ilustrados.
HISTORIA DE LA TEORIA DE GRAFOS
Sus ideas básicas las introdujo el matemático suizo Leonhard Paul Euler en el
siglo XVIII.
Euler demostró que no era posible puesto que el número de líneas que inciden
en cada punto no es par, (condición necesaria para entrar y salir de un mismo
punto). Así nació la teoría de grafos.
Gustav Kirchhoff, quien publicó sus leyes de los circuitos para calcular el
voltaje y la corriente en los circuitos eléctricos, usando grafos conexos de
medida minima.
Representación mediante
matrices
Representación mediante listas
TIPOS DE GRAFOS
Grafo simple
Grafo dirigido
Multigrafo
Pseudografo
MODELOS CON GRAFOS
Grafos de llamadas
Puede usarse un multigrafo dirigido para representar llamadas: cada vértice representa un número
de teléfono y cada arista representa una llamada.
La arista que representa una llamada sale del número del teléfono desde el que se hace la llamada
y llega al número de que lo recibe.
Grafo de la Red
La red de Internet se puede representar mediante un grafo dirigido en el que cada pagina Web esta
representada por un vértice y en el que una arista comienza en la pagina a y termina en la pagina b
si hay un enlace en la pagina a que conduce a la pagina b.
Grafos de precedencia y procesamiento concurrente
Los Sistemas Operativos, pueden ejecutarse más rápidamente si ciertas sentencias se ejecutan
simultáneamente. Es importante no ejecutar sentencias que requieran el resultado de sentencias no
ejecutadas. La dependencia de sentencias con respecto a sentencias previas se puede representar
por medio de un grafo dirigido.
Cada sentencia se representa por un vértice, y hay una arista de un vértice a un segundo si la
sentencia representada por el segundo vértice no puede ejecutarse hasta la sentencia representada
por el primero se ha ejecutado.
Diseño de bases de datos
Empresa:
Vértices: Empleados, trabajos, departamentos y Empresa.
Enlaces: La comunicación.
APLICACIONES
Un sistema de adquisición
de datos supervisa
continuamente un cierto
proceso físico, para
registrar su
comportamiento,
información cambios
significativos y enviar
comandos a un
controlando de proceso.
R (recoger), G (guardar), C
(calcular), I (imprimir) y E
(enviar)
APLICACIONES INFORMÁTICAS
EN GRAFOS BIPARTITOS
Comparación de archivos de computador, utilizando el problema de la
Longest Common Subsequence (LCS), en español Subsecuencia Común
Más Larga.
Dadas dos palabras X e Y sobre un alfabeto finito cualquiera, pretende
encontrar cuál es el largo máximo que puede tener una palabra que sea
subsecuencia de X e Y simultáneamente.
El largo de una LCS se usa comúnmente como criterio de comparación
de palabras, pues está relacionada con la cantidad de "pasos" necesarios
para ir de una palabra a la otra mediante operaciones de inserción,
eliminación y reemplazo de caracteres.
Todo par de palabras puede representarse convenientemente como un
grafo bipartito donde los arcos unen a los caracteres coincidentes de
ambas palabras.
Un matching en un grafo arbitrario (no necesariamente bipartito) es
cualquier conjunto de arcos que no comparten extremos; un PM es un
matching en donde los arcos no se cruzan ni comparten extremos. Así,
calcular la LCS entre dos palabras no es más que calcular el matching
planar de costo máximo del grafo bipartito asociado a dichas palabras,
donde todos los arcos tienen costo igual a 1.
ATMIA
APLICACIONES INFORMATICAS PARA LA
CONEXIÓN ENTRE GRAFOS ( I )
Seguridad para las bases de datos de una empresa
Funciones a diferentes departamentos para el manejo de
inserción, eliminación y actualización de los diferentes empleados
que trabajan para cada departamento.
E= Empresa
DS= Departamento de sistemas
DC= Departamento de contaduría
DG= Departamento para la gerencia
ES= Empleados para el departamento de sistemas
EC= Empleados para el departamento de contabilidad
EG= Empleados que hacen parte con la gerencia de la
empresa
APLICACIONES INFORMATICAS
PARA LA CONEXIÓN ENTRE GRAFOS
( II )
Redes de comunicaciones móviles.
Los patrones de comunicación de millones de
usuarios de teléfonos móviles, los grafos
permiten estudiar simultáneamente la estructura
local y la global de una sociedad en toda la red de
comunicación, en las cuales se observan
acoplamientos entre la interacción fuertes y una
red de la estructura local.
Cada enlace representa la comunicación mutua
entre los usuarios de la red de comunicación, y
todos los nodos que se muestran son la distancia
inferior a seis desde usuario seleccionado,
marcado por un círculo en el centro.
ÁRBOLES
Los árboles de decisión se utilizan en cualquier proceso que implique toma de decisiones,
ejemplos de estos procesos son:
Búsqueda Binaria
Sistemas Expertos
Árboles de juegos
APLICACIONES INFORMATICAS
DE ÁRBOLES DE DECISION ( I )
CODIFICACION DE HUFFMAN
Este algoritmo fue usado para compresión de datos.
ALGORITMO DE DIJKSTRA
También conocido como ruta más corta;
a partir de un vértice determinado se
obtienen todas las rutas más cortas
hacia todos los demás vértices.
Los pasos a seguir para el algoritmo
son:
1. Conocer el vértice de origen y el vértice
de destino.
2. Marcar el vértice de origen y conocer a
sus vecinos
3. Mirar los costos de las rutas hacia sus
vecinos
4. Marcar el vecino de la ruta más corta
5. El vecino marcado se convierte en el
nuevo vértice de origen
6. Hace paso 2 y 3
7. Comparar todas las rutas que hay de Vértice 1 2 3 4 5 6 7
sus vecinos y no vecinos no marcados
que ya tengan costo asociado. Ruta - 1,2 1,3 1,4 1,3,5 1,3,6 1,3,5,7
8. Obtener el vértice de costo mínimo
asociado y marcarlo
9. Volver a el paso 2 Costo 0 9 7 8 10 12 18
Public Sub Dijkstra() Public Function digcal(ByVal porigen As Integer, ByVal
Dim nNodo As Integer = InputBox("Digite la id del vertice DondeVengo As Integer, ByVal dondeEstoy As Integer, ByVal
inicio:", "", "1") dondeVoy As Integer, ByVal suma As Integer) As Integer
nNodo -= 1 Dim val1 As Integer = 0
Dim i As Integer = 0 Dim val2 As Boolean = False
Dim i As Integer
TextBox1.Text = "" If dondeEstoy = dondeVoy Then
For i = 0 To indiceNodos - 2 'se encontro
ap.Clear() If suma < ValorMinimo Then
If i <> nNodo Then ValorMinimo = suma
ValorMinimo = 20000 indRecorridoDij = 0
indRecorridoDij = 0 For i = 0 To ap.Count - 1
ap.Add(nNodo) recorridoDij(i).a = ap(i)
digcal(nNodo, nNodo, nNodo, i, 0) Next
TextBox1.Text = TextBox1.Text & vbNewLine & "V[" & indRecorridoDij = ap.Count
CStr(nNodo + 1) & "]-[" & CStr(i + 1) & "] menor peso: " & End If
ValorMinimo & " Lista : " & ImpListaRec() Return suma
Else
End If Dim res As Integer
For i = 0 To maxNodos
val1 = MatGrafoDijkstra(dondeEstoy, i)
val2 = estaLista(i)
If val1 <> 0 And val2 = False And i <> dondeEstoy Then
ap.Add(i)
res = digcal(porigen, dondeEstoy, i, dondeVoy, suma +
MatGrafoDijkstra(dondeEstoy, i))
ap.Remove(i)
End If
Next
End If
End Function
SOFTWARE ALGORITMOS VORACES
ALGORITMO DE PRIM
El algoritmo de Prim es un algoritmo de la teoría
de grafos para encontrar un árbol recubridor
mínimo (MST) en un grafo conexo (igual que el
algoritmo de kruskal), no dirigido y cuyas aristas
están etiquetados. Si el grafo no es conexo,
entonces el algoritmo encontrara el árbol
recubridor mínimo para uno de los componentes
conexos que forman dicho grafo no conexo.
Dim inicio As Integer = 0 If visitado(menorEM.nodoE) = False Then
Dim i As Integer ' no ha sdo visitado
Dim menorE As New nodoPeso vectVisitaNodo(indiceVisitas) = menorEM.nodoE
Dim menorEM As New nodoPeso indiceVisitas += 1
Dim menorvalor As Integer = 15000 'dibuje el arco entre vectVisitaNodo(i) y menor e
MatGrafoPrimdibuja(menorEM.inicio,
Call trasprim() menorEM.nodoE) = menorEM.nodepeso
Call limpiarVisitas() End If
vectVisitaNodo(indiceVisitas) = inicio Loop
indiceVisitas += 1 menorvalor = 15000
End Sub
Do While primVisitoTodos() = False
menorvalor = 15000 Public Sub trasprim()
For i = 0 To indiceVisitas - 1 Dim i As Integer, j As Integer
For i = 0 To maxNodos
menorE = NodoMenor(vectVisitaNodo(i)) For j = 0 To maxNodos
If menorE.nodepeso < menorvalor And MatGrafoPrim(i, j) = MatGrafo(i, j)
menorE.nodepeso <> 0 Then Next
'colocar en una varuable vectVisitaNodo(i) y el fin Next
que es nodoE For i = 0 To maxNodos
menorvalor = menorE.nodepeso For j = 0 To maxNodos
menorEM.inicio = vectVisitaNodo(i) If MatGrafoPrim(j, i) <> 0 Then
menorEM.nodoE = menorE.nodoE MatGrafoPrim(i, j) = MatGrafoPrim(j, i)
menorEM.nodepeso = menorE.nodepeso End If
End If Next
Next
Next
End Sub
SOFTWARE ALGORITMOS VORACES
IMAGEN DESCRIPCION No vistos En el grafo En el árbol