Arboles Expansion Minima
-
Upload
salvador-armando -
Category
Documents
-
view
4 -
download
0
description
Transcript of Arboles Expansion Minima
![Page 1: Arboles Expansion Minima](https://reader036.fdocuments.net/reader036/viewer/2022081814/5695d2a81a28ab9b029b435f/html5/thumbnails/1.jpg)
Programación IV / Clase 9 / Ciclo 02 - 2015 1
Universidad Don Bosco
Facultad de Ingeniería
Escuela de Ingeniería en Computación
Ciclo 02 – 2015 / Grupo: 03T
Asignatura: Programación IV
ÁRBOLES DE EXPANSIÓN MÍNIMA: ALGORITMO DE PRIM Y KRUSKAL
Introducción
Los grafos no dirigidos se emplean para modelar relaciones simétricas entre entes, los vértices del
grafo.
Cualquier arista (v, w) de estos grafos es igual que (w, v), por lo que las aristas en un grafo no
dirigido se dicen formadas por un par ordenado de vértices. Como consecuencia directa, la
representación de un grafo no dirigido da lugar a matrices simétricas.
Una propiedad que normalmente interesa conocer de un grafo no dirigido es “si para todo par de
vértices hay un camino que los une”, en definitiva, si el grafo es conexo. A los grafos conexos
también se les denomina red conectada.
El problema del árbol de expansión de coste mínimo consiste en buscar un árbol que abarque todos
los vértices del grafo, con suma de pesos de aristas mínimo.
Conceptos básicos
Red Conectada. Es una red tal, que cualquier par de vértices pueden ser unidos mediante
un camino.
Árbol. En una red es un subconjunto G’ del grafo G que es conectado y sin ciclos.
Los árboles tienen dos propiedades importantes:
Todo árbol de “n” vértices contiene exactamente “n-1” arcos.
Si se añade un arco al árbol, entonces resulta un ciclo.
Árbol abarcador o árbol de expansión. Es un árbol que contiene a todos los vértices de
una red. Buscar un árbol de expansión de una red es una forma de averiguar si la red es
conectada.
![Page 2: Arboles Expansion Minima](https://reader036.fdocuments.net/reader036/viewer/2022081814/5695d2a81a28ab9b029b435f/html5/thumbnails/2.jpg)
Programación IV / Clase 9 / Ciclo 02 - 2015 2
Un árbol abarcador de un grafo conexo no dirigido G = (V, A) es un árbol libre con el conjunto de
nodos V que es un subgrafo de G; esto es, un árbol de expansión es conexo, acíclico y tiene a todo
V como nodos y a parte de A como conjunto de aristas.
Un árbol libre. Es un grafo sencillo no dirigido que es a la vez conexo y acíclico.
Recuérdese que un grafo acíclico es un grafo que carece de ciclos. Es decir que un árbol
libre no contiene ciclos, y todos sus pares de nodos están conectados. En la siguiente figura
se muestran ejemplos de árboles libres:
En la figura siguiente se muestra un grafo no dirigido y su árbol de expansión.
Según el árbol de expansión el grafo es una red conectada.
Ahora que conocemos el concepto de árbol libre, podemos continuar con el estudio de un árbol
abarcador.
Hay muchos enfoques para generar un árbol de expansión correspondiente a un grafo dado. Un
enfoque consiste en eliminar las aristas que pertenezcan a ciclos uno tras otro hasta que no queden
ciclos en el grafo. Si sólo se eliminan aristas de ciclos, entonces el grafo seguirá siendo conexo, y
esto es esencial para la generación de un árbol de expansión.
Como ejemplo de esta aproximación, considérese el grafo (a) de la siguiente figura. Podemos
empezar por borrar la arista {v2, v5}. Esto elimina un ciclo sencillo, el subgrafo resultante sigue
siendo conexo. Los pasos siguientes eliminan las aristas {v2, v6}, {v3, v6}, {v3, v7}, {v4, v7} y {v6, v7}
![Page 3: Arboles Expansion Minima](https://reader036.fdocuments.net/reader036/viewer/2022081814/5695d2a81a28ab9b029b435f/html5/thumbnails/3.jpg)
Programación IV / Clase 9 / Ciclo 02 - 2015 3
una tras otra. Esta sucesión de eliminaciones de aristas da lugar al subgrafo (b) de la siguiente
figura:
Observe que se podrían generar muchos árboles de expansión para el grafo dado.
En la siguiente figura se pueden ver otros árboles de expansión para el grafo, por ejemplo:
También puede generarse un árbol de expansión a partir de un recorrido en amplitud y en
profundidad, así consideremos un recorrido en amplitud para el grafo dado, si se utiliza para el grafo
una representación en forma de matriz de adyacencia, la cual se muestra a continuación:
Una búsqueda en amplitud que comience en el nodo V1 dará lugar a un árbol dirigido cuya raíz es
V1. Para el grafo dado como ejemplo, que comienza en V1, una búsqueda primero en amplitud
incluye arcos que van a los nodos V2, V5 y V6. Dado que estas son las únicas aristas incidentes en
V1, se pasa a continuación a incluir los nodos que sean adyacentes a V2, es decir, a los arcos que
![Page 4: Arboles Expansion Minima](https://reader036.fdocuments.net/reader036/viewer/2022081814/5695d2a81a28ab9b029b435f/html5/thumbnails/4.jpg)
Programación IV / Clase 9 / Ciclo 02 - 2015 4
van a parar a los nodos V3 y V7. Prosiguiendo de esta manera se llega al árbol con raíz de la
siguiente figura:
Bien hasta este punto la idea es comprender que es un árbol de expansión y que este puede
generarse a partir de los métodos de recorrido antes estudiados, sin embargo podemos ver que
estos árboles no generados no tienen un costo, es decir las aristas del grafo no tienen un peso, por
lo tanto hasta aquí hemos aprendido a generar y comprender el concepto de árbol de expansión; sin
embargo, para ser un árbol de expansión mínimo se requiere que las aristas estén ponderadas o
posean un peso, esto lo estudiamos a continuación.
Construcción de un Árbol de Expansión de Costo Mínimo
Un árbol de expansión para un grafo no dirigido conectado G = (V, E) es un subgrafo de G que es un
árbol no dirigido y contiene todos los vértices de G.
En un grafo ponderado G = (V, E, W), el peso de un subgrafo es la suma de los pesos de las aristas
incluidas en ese subgrafo.
Un árbol de expansión mínimo (AEM ó MST, por sus siglas en inglés) para un grafo ponderado es
un árbol de expansión cuyo peso es mínimo.
Hay muchas situaciones en las que es preciso hallar árboles de expansión mínimos. Siempre que se
busca la forma más económica de conectar un conjunto de terminales, trátese de ciudades,
terminales eléctricas, computadoras o fábricas, empleando por ejemplo carreteras, cables o líneas
telefónicas; una solución es un árbol de expansión mínimo para el grafo que tienen una arista por
cada posible conexión, ponderada con el costo de dicha conexión.
Hallar árboles de expansión mínimos también es un subproblema importante en diversos algoritmos
de ruteo, esdecir, algoritmos para hallar caminos eficientes a través de un grafo que visiten todos los
vértices (o todas las aristas).
V1
V2 V5 V6
V3 V7
V4
![Page 5: Arboles Expansion Minima](https://reader036.fdocuments.net/reader036/viewer/2022081814/5695d2a81a28ab9b029b435f/html5/thumbnails/5.jpg)
Programación IV / Clase 9 / Ciclo 02 - 2015 5
La figura siguiente muestra un grafo ponderado, el cual podría tener más de un árbol de expansión
asociado.
Los árboles de expansión de costo mínimo gozan de una propiedad que sirve como base para todos
los algoritmos utilizados para la construcción de los mismos. Esta propiedad establece que si G = (V,
A) es un grafo conexo, U es un subconjunto propio del conjunto de vértices V, y (u, v) es una arista
de costo mínimo tal que u ∈ U y v ∈ V – U, entonces existe un árbol de expansión de costo mínimo
que incluye a (u, v) entre sus aristas.
Algoritmos de Árboles de Ancho Mínimo
Los grafos no dirigidos pueden representarse mediante las estructuras utilizadas para representar
grafos dirigidos, es decir: matriz de adyacencia y lista de adyacencia. Para ello se debe cambiar
cada arista no dirigida entre “u” y “v” por dos aristas dirigidas, una de “u” a “v” y otra de “v” a “u”; por
lo tanto, la matriz de adyacencia resultará una matriz simétrica, y en la lista de adyacencia el vértice
“u” estará en la lista de adyacencia del vértice “v”, y viceversa.
Ahora bien si recuerda anteriormente se estudió el algoritmo de Dijkstra, el cual nos permite
encontrar la ruta mínima desde un vértice o nodo de partida hacia el resto de los vértices de un
grafo, ahora bien este algoritmo sólo es para aplicarlo en los grafos dirigidos no así para los grafos
no dirigidos; para los grafos no dirigidos se utilizan otros algoritmos que permiten construir un árbol
abarcador de costo mínimo o árbol de expansión mínimo. A continuación estudiaremos dichos
algoritmos.
Algoritmo de Prim
El algoritmo incrementa continuamente el tamaño de un árbol, comenzando por un vértice inicial al
que se le van agregando sucesivamente vértices cuya distancia a los anteriores es mínima. Esto
significa que en cada paso, las aristas a considerar son aquellas que inciden en vértices que ya
pertenecen al árbol.
![Page 6: Arboles Expansion Minima](https://reader036.fdocuments.net/reader036/viewer/2022081814/5695d2a81a28ab9b029b435f/html5/thumbnails/6.jpg)
Programación IV / Clase 9 / Ciclo 02 - 2015 6
El árbol recubridor mínimo está completamente construido cuando no quedan más vértices por
agregar.
El objetivo del algoritmo de Prim es encontrar el árbol recubridor más corto.
Requisitos:
Ser un grafo conexo.
Ser un grafo sin ciclos.
Tener todos los arcos etiquetados.
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:
Paso 1. Se elige un vértice u de G y se considera el árbol S={u}
Paso 2. Se considera la arista “e” de mínimo peso que une un vértice de S y un vértice que
no es de S, y se hace S=S+e.
Paso 3. Si el número de aristas de T es n-1 el algoritmo termina. En caso contrario se vuelve
al paso 2.
![Page 7: Arboles Expansion Minima](https://reader036.fdocuments.net/reader036/viewer/2022081814/5695d2a81a28ab9b029b435f/html5/thumbnails/7.jpg)
Programación IV / Clase 9 / Ciclo 02 - 2015 7
Ejemplo:
Algoritmo de Kruskal
Joseph B. Kruskal investigador del Math Center (Bell-Labs), que en 1956 descubrió su algoritmo
para la resolución del problema del Árbol de coste total mínimo (minimum spanning tree - MST)
también llamado árbol recubridor euclídeo mínimo.
El objetivo del algoritmo de Kruskal es construir un árbol (subgrafo sin ciclos) formado por arcos
sucesivamente seleccionados de mínimo peso a partir de un grafo con pesos en los arcos.
El Algoritmo de Kruskal que resuelve la misma clase de problema que el de Prim, salvo que en esta
ocasión no partimos desde ningún nodo elegido al azar. Para resolver el mismo problema lo que
hacemos es pasarle a la función una lista con las aristas ordenada de menor a mayor, e iremos
tomando una para formar el ARM.
![Page 8: Arboles Expansion Minima](https://reader036.fdocuments.net/reader036/viewer/2022081814/5695d2a81a28ab9b029b435f/html5/thumbnails/8.jpg)
Programación IV / Clase 9 / Ciclo 02 - 2015 8
El algoritmo de Kruskal permite hallar el árbol de expansión mínima de cualquier grafo valorado (con
capacidades). 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 nodos del grafo en alguna de las aristas
marcadas, es decir, cuando tenemos marcados n-1 arcos, siendo n el número de nodos del
grafo.
![Page 9: Arboles Expansion Minima](https://reader036.fdocuments.net/reader036/viewer/2022081814/5695d2a81a28ab9b029b435f/html5/thumbnails/9.jpg)
Programación IV / Clase 9 / Ciclo 02 - 2015 9
Ejemplo:
Ejercicio:
Encontrar el árbol de expansión mínima para el siguiente grafo, aplicando algoritmo de Kruskal.
![Page 10: Arboles Expansion Minima](https://reader036.fdocuments.net/reader036/viewer/2022081814/5695d2a81a28ab9b029b435f/html5/thumbnails/10.jpg)
Programación IV / Clase 9 / Ciclo 02 - 2015 10
Ejercicio:
1. Determinar el árbol de mínima expansión para el siguiente grafo (aplicar algoritmo de
Kruskal).
1. Elegimos, por ejemplo, la arista (5, 6) = 1 (menor valor) y la marcamos.
2. Elegimos la siguiente arista con menor valor (1, 3) = 1 y la marcamos.
3. Elegimos la siguiente arista con menor valor (5, 7) = 2 y la marcamos, ya que no forma
ciclos con ninguna arista de las marcadas anteriormente.
4. Elegimos la siguiente arista con menor valor (1, 2) = 3 y la marcamos, ya que no forma
ciclos con ninguna arista de las marcadas anteriormente.
5. Elegimos la siguiente arista con menor valor (6, 7) = 4 y la desechamos, ya que forma ciclos
con las aristas (5, 7) y (5, 6) marcadas anteriormente.
![Page 11: Arboles Expansion Minima](https://reader036.fdocuments.net/reader036/viewer/2022081814/5695d2a81a28ab9b029b435f/html5/thumbnails/11.jpg)
Programación IV / Clase 9 / Ciclo 02 - 2015 11
6. Elegimos la siguiente arista con menor valor (2, 5) = 5 y la marcamos, ya que no forma
ciclos con ninguna arista de las marcadas anteriormente.
7. Elegimos la siguiente arista con menor valor (4, 5) = 6 y la marcamos, ya que no forma
ciclos con ninguna arista de las marcadas anteriormente.
8. FIN. Finalizamos dado que los 7 nodos del grafo están en alguna de las aristas, o también
ya que tenemos marcadas 6 aristas (n-1).
Por lo tanto, el árbol de expansión mínima sería: