Uploaded by Gabriel Kitanovich

$R7I64CA

advertisement
TEORÍA DE GRAFOS
Contenido
• Qué es la Teoría de Grafos. Historia y aplicaciones
• Nociones básicas de grafos
• Grafos Eulerianos
• Grafos Hamiltonianos
• Matriz de Adyacencia
•Grafos Planos
• El camino más corto. Algoritmo de Dijkstra
• Árboles
• Árbol de Expansión Mínima. Algoritmos de Prim y Kruskal
Qué es la Teoría
de Grafos
Con la teoría de grafos se busca representar de forma visual
conjuntos de datos abstractos en formas de nodos o vértices y
la unión o relaciones que estas pueden tener con otros nodos
a través de aristas.
Gracias a esta teoría se han podido lograr grandes avances en
el análisis de amplios volúmenes de data.
En la actualidad los grafos integran parte central de un número
increíble de soluciones a problemas complejos.
El origen de la palabra grafo es griego y significa "trazar".
Un grafo es con frecuencia la respuesta a problemas de la vida cotidiana.
Qué es la Teoría
de Grafos
Algunos ejemplos podrían ser: un gráfico de una serie de tareas a realizar indicando su
secuenciación (un organigrama), grafos matemáticos representando las relaciones
binarias, una red de carreteras o de tránsito, la red de enlaces ferroviarios o aéreos, la
red eléctrica de una ciudad, sistemas de telecomunicaciones, circuitos impresos o redes
de computadores.
En muchos casos un problema es conveniente representarlo gráficamente como un
conjunto de puntos (nodos o vértices) conectados por líneas (arcos) según los
requerimientos.
Hoy en día es rara la disciplina científica o humanística que no utilice la teoría de grafos.
se puede citar la sicología en dinámica de grupos, la sociología en los sociogramas, la
física teórica que emplea los diagramas de Feynmann, donde se presenta mediante
líneas las partículas elementales, en programación lineal e investigación operativa el
estudio de flujo en redes, los cambios de variables enel cálculo diferencial,...
Los grafos son estructuras de datos dinámicas no-lineales, utilizadas comúnmente en el
análisis de redes, en diseño de circuitos eléctricos, en estrategias de mercados,
cartografía, mapas conceptuales, matemática, planificación de procesos y muchas áreas
del conocimiento.
Nociones básicas de grafos
Un grafo G = (V; E) es un par formado por dos conjuntos V y E.
El conjunto V es un conjunto finito de vértices, mientras que E es un conjunto de aristas que unen dos
vértices de V .
Si u y v son vértices unidos por una arista, podemos representar esta arista por (u; v).
Dos vértices pueden estar unidos por más de una arista, por lo que habría que especificar qué arista
estamos tomando en cada caso.
Los grafos sirven para representar esquemáticamente un
determinado problema, como el de los puentes de Königsberg.
Este problema trataba de averiguar si era posible recorrer todos los
puentes de la ciudad pasando una única vez por cada puente de
forma que se llegara al punto de partida. El problema fue resuelto
por Euler haciendo uso, al parecer por primera vez, del concepto de
grafo
• El orden del grafo G es el número de elementos del conjunto de vértices V .
• Para cada vértice, v Є V , se llama grado de v, denotado deg v, al número de aristas que salen o
llegan a v.
• El grafo se dirá grafo simple si dos vértices de V están unidos por a lo sumo una artista.
• Utilizaremos el término multigrafo para denotar grafos no simples.
• El término pseudografo se reserva a grafos que admiten aristas empezando y terminando en el
mismo vértice.
• Si las aristas de un grafo indican una dirección, el grafo se dirá dirigido, y no dirigido en caso
contrario. Salvo que se indique lo contrario, supondremos que todos los grafos son no dirigidos.
• Dos vértices son adyacentes si existe una arista que los une.
Grafo simple
Multigrafo
Pseudografo
Grafo completo:
A un grafo de n vértices todos unidos entre sí se le llama grafo completo y se nota por Kn. Por ejemplo K1 es
un grafo con un solo vértice, K2 es un grafo con dos vértices y una arista que los une.
Dos representaciones de K4
Subgrafo:
Dado un grafo G = (V; E), un subgrafo de G es otro grafo G* = (V* ; E*) de forma que V* ⊆ V y E* ⊆ E.
Teorema
Sea G = (V; E) un grafo. Entonces 2
Al contar las aristas, éstas se cuentan dos veces ya que unen dos vértices distintos .
Camino
Un camino en un grafo G = (V; E) es una secuencia alternada de vértices y aristas de la forma
V1 ; e1 ; v2 ; e2 ; ….. Vn-1 ; en-1 ; vn
donde cada arista ei conecta los vértices vi y vi+1, i = 1; 2; …. ; n-1
• La longitud del camino es el número de aristas del mismo. Cuando se trata de un grafo simple, el
camino puede representarse simplemente por sus vértices v1; v2; …. ; vn-1; vn.
• Un camino se dice cerrado si v1 = vn.
• Un camino se dice simple si todos los vértices del mismo son distintos.
• Un ciclo es un camino cerrado de forma que vi ≠ vj para todo i; j Є {2; 3; … ; n-1} e i ≠ j.
• Un recorrido es un camino de forma que ei ≠ ej , i; j Є {1; 2; …; n-1} e i ≠ j
Un grafo es conexo si cualesquiera dos de sus vértices se pueden unir por un trayectoria.
Un grafo que no es conexo se dice que es disconexo, este está formado por varios pedazos, a
los pedazos se les dice componentes conexas.
El primer grafo de la siguiente figura es conexo, mientras que el segundo y el tercero no lo
son. El segundo grafo tiene dos componentes conexas y el tercero tres componentes.
GRAFOS EULERIANOS Y HAMILTONIANOS
1. Grafos Eulerianos
Un grafo conexo G = (V; E) es Euleriano si existe un recorrido cerrado de longitud |E| (cardinal del
conjunto E = número de aristas del conjunto) que incluya todos los vértices.
2. Grafos Hamiltonianos
Un grafo conexo G = (V; E) es Hamiltoniano si existe un ciclo de longitud |V| (cardinal del
conjunto V = número de vértices del conjuntos), o equivalentemente, si se pasa por cada vértice
una única vez, salvo el primero y último vértice
Euleriano
y Hamiltoniano
Hamiltoniano
y no Euleriano
Euleriano
y no Hamiltoniano
Ni Euleriano
Ni Hamiltoniano
Teorema 2 (Existencia de circuitos de Euler).
1. Si en un grafo algún vértice tiene grado impar, entonces no puede tener un circuito de Euler.
2. Si todos los vértices de un grafo conexo tienen grado par, entonces hay por lo menos un circuito
de Euler.
Teorema de Ore
Sea G = (V; E) un grafo simple conexo de orden n = |V |≥ 3. Si para cada par de vértices no
adyacentes u; v se cumple que:
deg u + deg v ≥ n;
entonces G es Hamiltoniano.
Conclusiones
Luego de entender la teoría presentada en las secciones anteriores
es posible argumentar una respuesta al problema de los puentes de
Königsberg.
El grafo asociado a este problema tiene en total cuatro vértices, todos de grado impar, por tanto se
puede concluir que no existe ni una trayectoria de Euler y mucho menos un circuito de Euler, por lo
que es imposible entonces visitar las cuatro ciudades cruzando cada puente una sola vez.
Matriz de Adyacencia
La matriz de adyacencia es ˙til para trabajar con grafos de forma computacional.
Dado un grafo simple G = (V; E), supongamos una ordenación de sus vértices de la forma V = {v1; v2; …; vn}
Se define la matriz de adyacencia del grafo A = (aij ) de forma que aij = 1 si existe una arista uniendo vi y vj , y aij = 0
en caso contrario.
Por ejemplo, el grafo completo K4 tiene matriz de adyacencia
Grafo Plano
Un grafo o multigrafo es plano si todas sus aristas se intersecan sólo en los vértices, es decir, no se cruzan.
La representación del grafo de forma que sus aristas no se cortan se llama mapa. Dado un mapa de un grafo
conexo, puede observarse que de forma natural, las aristas del grafo dividen a éste en un número finito de
regiones, que están delimitadas por caminos cerrados, de forma que no contiene aristas en su interior.
Éste es un grafo 3-regular, pues todos los
vértices tienen grado 3, y es plano ya que
sus aristas no se cortan.
El segundo grafo, K4, parece no plano pues sus aristas (x,z) y (w,y) se
intersecan. Sin embargo el grafo puede dibujarse como está hecho a la
derecha. En esta nueva representación las aristas solo se intersecan en los
vértices, por lo tanto, K4 es plano
Teorema
Sea G = (V; E) un grafo plano conexo. Entonces
Cada arista se recorre dos veces, bien porque las regiones sean adyacentes y compartan la arista en el
camino que los delimita, bien porque tenga que recorrerse dos veces para cerrar el camino que
delimita la región.
Teorema
Consideremos un mapa de un grafo plano conexo G = (V; E). Entonces
El camino más corto
Comenzaremos definiendo un grafo ponderado.
Dado un grafo G = (V, E) conexo y sin lazos, se llamará ponderado si cada arista tiene asignado un
peso (positivo)
Este peso puede representar la distancia entre dos vértices, el costo para ir de un vértice a otro o el
tiempo que se tarda en trasladarse entre dos vértices.
En muchas situaciones nos interesa hallar el camino más corto entre dos vértices o, si los pesos
representan costos, el camino más económico para trasladarse de un vértice a otro.
Según la complejidad del grafo esto puede resolverse por prueba y error, buscando los distintos
camino, o puede requerir de un trabajo más sistemático.
En estos casos, aplicaremos el Teorema de Dijkstra que en este apunte aprenderemos a través de un
ejemplo.
Teorema de Dijkstra
Sea el Grafo G = (V, E) , conexo, sin lazos y ponderado.
Vamos a buscar el camino de peso mínimo que una el vértice a con el vértice f
Primer paso: calculo los pesos de las aristas que unen a con el resto de los
vértices. Si no hay aristas la distancia es infinita. De todos los vértices elijo
el de menor peso, para que sea el nuevo vértice desde el que calcularé los
pesos a los restantes vértices
Si
a
a
-
b
3(a)
c
6(a)
d
∞
e
∞
f
∞
Camino
a,b
Si es el subconjunto de V en el que iremos colocando los vértices que elegiremos en cada paso como el de menor
peso y desde el cual calcularemos los pesos a los restantes vértices
Segundo paso: calculo los pesos de las aristas desde b, considerando que b ya tenía un peso de 3
(que se suma a los otros) Ahora el vértice con menor peso es c
Si
a
a,b
a
-
b
3(a)
-
c
6(a)
4(b)
d
∞
8(b)
e
∞
6(b)
f
∞
∞
Camino
a,b
a,b,c
Tercer paso: calculo los pesos de las aristas desde c. Como en el caso de el vértice e, ir desde c no lo
mejora ya que sería un peso de 8 (mayor que 6 que es el que ya teníamos) mantengo el de 6 (b). Elijo
como nuevo vértice d
Si
a
a,b
a,b,c
a
-
b
3(a)
-
c
6(a)
4(b)
-
d
∞
8(b)
5( c)
e
∞
6(b)
6(b)
f
∞
∞
∞
Camino
a,b
a,b,c
a,b,c,d
Cuarto paso: calculo los pesos de las aristas desde d. Como en el caso de el vértice e, ir desde d no lo
mejora ya que sería un peso de 7 (mayor que 6 que es el que ya teníamos) mantengo el de 6 (b). Elijo
como nuevo vértice e. Ahora el camino es a, b, e.
Si
a
a,b
a,b,c
a,b,c,d
a
-
b
3(a)
-
c
6(a)
4(b)
-
d
∞
8(b)
5( c)
-
e
∞
6(b)
6(b)
6(b)
f
∞
∞
∞
11(d)
Camino
a,b
a,b,c
a,b,c,d
a,b,e
Quinto paso: calculo el peso de la arista (d,e), considerando que ya tiene un peso de 6 acumulado
por el camino de a a b y de b a e.
Si
a
a,b
a,b,c
a,b,c,d
a,b,c,d,e
a
-
b
3(a)
-
c
6(a)
4(b)
-
d
∞
8(b)
5( c)
-
e
∞
6(b)
6(b)
6(b)
-
f
∞
∞
∞
11(d)
9 ( e)
Camino
a,b
a,b,c
a,b,c,d
a,b,e
a, b, e, f
CONCLUSIÓN: el camino de peso mínimo es a, b, e, f con un peso total de 9.
Árboles
Un árbol G = (V ; E) es un grafo conexo sin ciclos.
Dos ejemplos de árboles
Es fácil darse cuenta de que eliminar una arista del árbol elimina la propiedad de conexión, dejando dos
componentes conexas.
Añadir una arista entre dos vértices del árbol crea un ciclo, por lo que rompe la propiedad de árbol. Finalmente,
en un árbol existe un único camino entre dos vértices que los une sin repetir vértices.
Recíprocamente, si esa propiedad ocurre, entonces el grafo no tiene ciclos, por lo que se trata de un árbol.
En un árbol, se puede elegir cualquier vértice como raíz o nivel cero del mismo.
Los vértices adyacentes a la raíz estarán en el nivel uno. Seguimos este proceso hasta llegar a los vértices
que no tienen nuevos vértices adyacentes, que se denominan hojas del árbol. Las aristas del árbol se llaman
ramas.
Árbol de Expansión
Dado un grafo conexo, no dirigido G. Un árbol de expansión es un árbol compuesto por todos los
vértices y algunas (posiblemente todas) de las aristas de G. Al ser creado un árbol no existirán ciclos,
además debe existir una ruta entre cada par de vértices.
Un grafo puede tener muchos arboles de expansión
Árbol de Expansión Mínima
Dado un grafo conexo, no dirigido y con pesos en las aristas, un árbol de expansión mínima es un
árbol compuesto por todos los vértices y cuya suma de sus aristas es la de menor peso.
Algoritmo de Prim
El objetivo del algoritmo de Prim es construir, a partir de un grafo G = (V,E) no dirigido, pesado y conexo, un
árbol abarcador de costo mínimo o árbol de expansión mínima, es decir, encontrar un conjunto T de n-1
aristas pertenecientes al conjunto E que conecten todos los vértices del grafo; donde el costo total de
todas las aristas del árbol sea el menor posible.
Ejemplo: como el ejercicio no lo indica elijo como vértice raíz el vértice incidente en la ariste de menos peso
Algoritmo de Kruskal
Tiene como objetivo también crear el árbol de expansión mínima de un grafo G = (V,E) conexo, ponderado y no
dirigido.
La aplicación típica de este problema es el diseño de redes telefónicas. Una empresa con diferentes oficinas, trata
de trazar líneas de teléfono para conectarlas unas con otras. La compañía telefónica le ofrece está interconexión,
pero ofrece tarifas diferentes o costos por conectar cada par de oficinas. ¿Cómo conectar entonces las oficinas al
mínimo costo total?
Procedimiento del algoritmo de Kruskal
1.
2.
3.
4.
5.
Ordenar en forma ascendente según el peso de cada arista.
Se marca la arista con menor peso como la arista inicial de la ruta mínima.
De las aristas restantes, se selecciona la que tenga menor peso, si hay más de una, se elige cualquiera de ellas.
Repetir el paso 3 siempre que la arista elegida no forme un ciclo con las ya seleccionadas.
El proceso termina cuando tenemos todos los nodos del grafo en alguna de las aristas marcadas, es decir,
cuando tenemos seleccionadas n-1 aristas, siendo n el número de nodos o vértices del grafo
Ejemplo:
1. Este es el grafo inicial. Los números
indican el peso de las aristas. Se
ordenan las aristas de menor a
mayor y se incia por la menor. En
este caso hay dos aristas con el
mínimo peso.
3. Se selecciona entre todas las aristas
restantes, la de menor peso siempre
que no forme un ciclo. En este caso
la menor arista siguiente es CE.
2. Se selecciona, en este caso de
manera aleatoria la arista AD, como
arista de inicio.
4. Seleccionamos DF, con peso 6, que
es la siguiente arista de menor peso
que no forma ciclos.
5. De las aristas restantes, las de menor
peso son las aristas AB y BE, de peso 7. AB
se elige aleatoriamente, y se añade al
conjunto de las aristas seleccionadas. De
este modo, la arista DB no puede ser
seleccionada ya que formaría el ciclo ADB.
Por tanto la marcamos en rojo.
7. Por último, se selecciona la arista EG de
peso 9. Como han sido seleccionadas un
número de aristas igual al número de
vértices menos uno, el proceso ha
terminado. Se ha obtenido el árbol de
expansión mínima con un peso de 39.
6. Siguiendo el proceso seleccionamos la
arista BE con peso 7. Además marcamos
en rojo las aristas BC, DE y FE ya que
formarían los ciclos BCE, DEBA, FEBAD
respectivamente.
A fin de comprobar que el resultado es
correcto hacemos la operación
Vértices = 7 Aristas = lVl-1 = 7-1 =6
Aristas = 6
Peso del árbol = (5+7+6+5+9+7) = 39
Download