Download El TAD Grafo: árbol de extensión de coste mínimo El TAD Grafo

Document related concepts

Grafo (tipo de dato abstracto) wikipedia , lookup

Estructura de datos para conjuntos disjuntos wikipedia , lookup

Árbol (informática) wikipedia , lookup

Diagrama de decisión binario wikipedia , lookup

Transcript
El TAD Grafo: árbol de extensión de coste mínimo
Tema 4
4.6 Árbol de extensión de coste mínimo
! Problema clásico: encontrar un subgrafo que contenga todos los vértices, que siga siendo
conexo y que el coste total de sus aristas sea mínimo
! Árbol libre:
"
Grafo no dirigido, conexo y acíclico
"
Diferencias con los árboles generales: no tienen raíz y los hijos no están ordenados
! Propiedades:
"
Todo árbol con n vértices tiene n – 1 aristas
"
Si se borra una arista deja de ser conexo, y si se añade una nueva arista, entonces
aparecen ciclos
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
38
El TAD Grafo: árbol de extensión de coste mínimo
Tema 4
! Ej. de aplicación: diseñar una red de transporte (carreteras, ferrocarril, ...) que conecte una
serie de poblaciones construyendo el menor número posible de kilómetros de vía
! Se aplica en grafos no dirigidos, conexos y etiquetados (etiquetas no negativas)
!
Árbol de extensión o de recubrimiento (spanning tree) de coste mínimo:
"
Subconjunto G’ del grafo G
"
Continene todos los vértices de G
"
Es conexo y acíclico
"
No existe otro G’’ tal que la suma de los costes de las aristas de G’’ sea menor que la
suma de los costes de las aristas de G’
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
39
El TAD Grafo: árbol de extensión de coste mínimo
Tema 4
! Ejemplos:
v1
v1
6
5
1
1
5
5
v2
v4
5
v2
v3
6
3
v1
4
2
v4
1
v3
5
6
v5
v2
2
v4
2
v6
4
v3
3
v5
2
3
1
4
3
2
v6
v2
2
v1
4
6
v5
v4
v3
v6
Algoritmos y Estructuras de Datos II
3
v5
I.T. en Informática de Gestión/Sistemas
4
v6
Universidad de Huelva
40
El TAD Grafo: árbol de extensión de coste mínimo
Tema 4
! Estrategias:algoritmos voraces
"
Prim: parte de un vértice cualquiera y va extendiendo el árbol de recubrimiento,
incorporando un nuevo vértice en cada iteración, hasta cubrir todos los vértices del
grafo
"
Kruskal: parte de un bosque de árboles formados por un único vértice cada uno, de
forma que en cada iteración se conectan un par de árboles mediante una arista, hasta
que en el bosque quede un único árbol
4.6.1 Algoritmo de Prim
! Dado un grafo G = (V, A), mantiene dos particiones:
"
U: vértices que se encuentran enlazados por las aristas del árbol que se está
construyendo
"
V – U: resto de vértices
! En cada iteración se incrementa el subconjunto U con un nuevo vértice, hasta que U = V.
! Inicialmente, U contiene un único vértice, que puede ser cualquiera
! En cada paso, se localiza la arista (u, v) de menor coste tal que u ∈ U y v ∈ V – U
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
41
Tema 4
El TAD Grafo: árbol de extensión de coste mínimo
Implementación del algoritmo de Prim
función Prim(G: Grafo): conjunto <arista>;
var
U: conjunto <vértice>;
T: conjunto <arista>;
u, v: vértice;
fvar;
inicio
T := ∅;
U := {cualquier v∈ V};
mientras U <> V hacer
escoger la arista (u, v) de coste mínimo tal que u ∈ U y v ∈ V – U;
T := T ∪ {(u, v)};
U := U ∪ {v}
fmientras;
devuelve T;
ffunción;
Algoritmos y Estructuras de Datos II
Tema 4
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
42
El TAD Grafo: árbol de extensión de coste mínimo
Ejemplo
10
v1
14
v4
v6
9
3
7
v3
v7
4
5
7
v8
2
6
v2
Algoritmos y Estructuras de Datos II
5
v5
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
43
El TAD Grafo: árbol de extensión de coste mínimo
Tema 4
4.6.2 Algoritmo de Kruskal
! Dado un grafo G = (V, A), se comienza con un grafo T = {V, ∅} ⇒ T es un grafo con todos los
nodos de G pero sin ninguna arista
! Durante el algoritmo se mantendrá siempre un bosque de árboles que inicialmente están
formados por un único vértice
! Para añadir las aristas examinamos el conjunto A en orden creciente según su coste:
"
Si la arista seleccionada conecta dos vértices de árboles distintos, se añade al conjunto
de aristas de T puesto que formará parte del árbol de expansión y ambas componentes
se unen en una única componente conexa
"
Si la arista conecta dos vértices que pertenecen al mismo árbol, no se añade para evitar
la aparición de ciclos en el árbol de expansión
! Cuando todos los vértices de T estén en una única componente conexa, habremos encontrado
el árbol de expansión buscado
Algoritmos y Estructuras de Datos II
Tema 4
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
44
El TAD Grafo: árbol de extensión de coste mínimo
Implementación del algoritmo de Kruskal
función Kruskal(G: Grafo): conjunto <arista>;
var
A: lista <arista>;
T: conjunto <arista>;
B: tabla [1..n] de natural; { n es el número de vértices de G}
ai: arista;
i: natural;
fvar;
inicio
A := secuencia de las aristas de G ordenada crecientemente;
para i := 1 hasta n hacer
B[i] := i
fpara;
i := 1;
mientras T.cardinal < n - 1 hacer
ai := A.observa[i];
si B[ai.getOrigen] <> B[ai.getDestino] entonces
T := T ∪ {ai};
fusionar (B, ai.getOrigen, ai.getDestino)
fsi;
i := i +1;
fmientras;
devuelve T;
ffunción;
Algoritmos y Estructuras de Datos II
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
45
Tema 4
El TAD Grafo: árbol de extensión de coste mínimo
Ejemplo
10
v1
14
v4
v6
9
3
7
v3
v7
4
5
7
v8
2
6
v2
Algoritmos y Estructuras de Datos II
5
v5
I.T. en Informática de Gestión/Sistemas
Universidad de Huelva
46