Árboles: Árbol Abarcador Minimal

Anuncio
Árboles:
Árbol Abarcador Minimal
CSI / ITESM
Árboles:Árbol Abarcador Minimal– p.1/25
Árboles Abarcador (Spanning Tree): Definición
Un árbol abarcador para un grafo G es un subgrafo de G
que contien todos los vértices (abarca) y es árbol.
Árboles:Árbol Abarcador Minimal– p.2/25
Árboles Abarcador (Spanning Tree): Definición
Un árbol abarcador para un grafo G es un subgrafo de G
que contien todos los vértices (abarca) y es árbol.
Resultado:
Todo grafo conexo tien un árbol abarcador.
Árboles:Árbol Abarcador Minimal– p.2/25
Ejemplos árboles abarcadores para un grafo
Considere el grafo:
e1
v1
e2
v1
v2
e3
e1
v2
e3
e4
e4
v3
v3
v4
Árboles abarcadores son:
v1
e1
v1
v2
v2
e2 e3
e2
e4
e4
v3
v3
v4
v4
v4
Árboles:Árbol Abarcador Minimal– p.3/25
Grafos Con Peso (Weighted Graphs)
Un árbol con peso es un grafo donde cada lado tiene un
número asociado o peso.
Árboles:Árbol Abarcador Minimal– p.4/25
Grafos Con Peso (Weighted Graphs)
Un árbol con peso es un grafo donde cada lado tiene un
número asociado o peso.
Normalmente, al peso de un lado e se le designa por w(e).
Árboles:Árbol Abarcador Minimal– p.4/25
Grafos Con Peso (Weighted Graphs)
Un árbol con peso es un grafo donde cada lado tiene un
número asociado o peso.
Normalmente, al peso de un lado e se le designa por w(e).
La suma de todos los pesos de todos los lados de un grafo
con peso se llama el peso del grafo.
Árboles:Árbol Abarcador Minimal– p.4/25
Grafos Con Peso (Weighted Graphs)
Un árbol con peso es un grafo donde cada lado tiene un
número asociado o peso.
Normalmente, al peso de un lado e se le designa por w(e).
La suma de todos los pesos de todos los lados de un grafo
con peso se llama el peso del grafo.
2
v1
v2
8
3
v3
6
v4
Árboles:Árbol Abarcador Minimal– p.4/25
Grafos Con Peso (Weighted Graphs)
Un árbol con peso es un grafo donde cada lado tiene un
número asociado o peso.
Normalmente, al peso de un lado e se le designa por w(e).
La suma de todos los pesos de todos los lados de un grafo
con peso se llama el peso del grafo.
2
v1
v2
8
3
v3
Peso total del grafo = 19
6
v4
Árboles:Árbol Abarcador Minimal– p.4/25
Árbol Abarcador Minimal (Minimum Spanning Tree)
Un árbol abarcador minimal para un grafo G es
un
árbol
abarcador
tal
que
cualquier
otro
árbol
abarcador para G no tiene un peso total menor.
Árboles:Árbol Abarcador Minimal– p.5/25
Árbol Abarcador Minimal (Minimum Spanning Tree)
Un árbol abarcador minimal para un grafo G es
un
árbol
abarcador
tal
que
cualquier
otro
árbol
abarcador para G no tiene un peso total menor.
Considere el grafo:
2
v1
v2
2
v1
v2
8
3
8
6
6
v3
v4
Peso árbol abarcador=16
v3
2
v1
3
v4
v1
v2
3
6
v3
v2
v4
8
v3
6
v4
Árboles:Árbol Abarcador Minimal– p.5/25
MST: Algoritmo de Kruskal
Entrada:
Un grafo conexo con peso.
1
Inicialice T a tener todos los vértices de G y no tener
lados.
2
Sea E el conjunto de todos los lados de G y m := 0.
3
Mientras (m < n − 1) hacer
3a
Encuentre en E el lado e más pequeño.
3b
Borre e de E.
Si al añadir e a T no se forma un ciclo, entonces
añadir e a T.
3d Incrementar m en 1.
3c
Salida: T.
Árboles:Árbol Abarcador Minimal– p.6/25
Algoritmo de Kruskal: Ejemplo
Fase de Inicialización:
v1
1
v2
v1
3
v3
2
2
1
3
3
v4
v3
1
2
2
1
v2
3
v4
m := 0
Árboles:Árbol Abarcador Minimal– p.7/25
Algoritmo de Kruskal: Ejemplo
v1
1
Encuentre el lado más pequeño:
v2
v1 a v2 peso: 1
3
v3
2
2
1
3
v1
1
v2
v4
m := 0
3
v3
2
2
1
3
v4
Árboles:Árbol Abarcador Minimal– p.8/25
Algoritmo de Kruskal: Ejemplo
v1
1
Encuentre el lado más pequeño:
v2
v1 a v2 peso: 1
3
v3
2
2
1
3
v1
1
v2
v4
m := 0
3
v3
2
2
1
3
v4
No forma un ciclo en T:
Árboles:Árbol Abarcador Minimal– p.8/25
Algoritmo de Kruskal: Ejemplo
v1
1
Encuentre el lado más pequeño:
v2
v1 a v2 peso: 1
3
v3
2
2
1
3
v1
1
v2
v4
m := 0
3
v3
2
2
1
3
v4
No forma un ciclo en T:
se añade a T y m := m + 1
Árboles:Árbol Abarcador Minimal– p.8/25
Algoritmo de Kruskal: Ejemplo
v1
1
Encuentre el lado más pequeño:
v2
v3 a v4 peso: 1
3
v3
2
2
1
3
v1
v2
v4
m := 1
3
v3
2
2
1
3
v4
Árboles:Árbol Abarcador Minimal– p.9/25
Algoritmo de Kruskal: Ejemplo
v1
1
Encuentre el lado más pequeño:
v2
v3 a v4 peso: 1
3
v3
2
2
1
3
v1
v2
v4
m := 1
3
v3
2
2
1
3
v4
No forma un ciclo en T:
Árboles:Árbol Abarcador Minimal– p.9/25
Algoritmo de Kruskal: Ejemplo
v1
1
Encuentre el lado más pequeño:
v2
v3 a v4 peso: 1
3
v3
2
2
1
3
v1
v2
v4
m := 1
3
v3
2
2
1
3
v4
No forma un ciclo en T:
se añade a T y m := m + 1
Árboles:Árbol Abarcador Minimal– p.9/25
Algoritmo de Kruskal: Ejemplo
v1
1
Encuentre el lado más pequeño:
v2
v1 a v4 peso: 2
3
v3
2
2
1
3
v1
v2
v4
m := 2
3
v3
2
2
3
v4
Árboles:Árbol Abarcador Minimal– p.10/25
Algoritmo de Kruskal: Ejemplo
v1
1
Encuentre el lado más pequeño:
v2
v1 a v4 peso: 2
3
v3
2
2
1
3
v1
v2
v4
m := 2
3
v3
2
2
3
v4
No forma un ciclo en T:
Árboles:Árbol Abarcador Minimal– p.10/25
Algoritmo de Kruskal: Ejemplo
v1
1
Encuentre el lado más pequeño:
v2
v1 a v4 peso: 2
3
v3
2
2
1
3
v1
v2
v4
m := 2
3
v3
2
2
3
v4
No forma un ciclo en T:
se añade a T y m := m + 1
Árboles:Árbol Abarcador Minimal– p.10/25
Algoritmo de Kruskal: Ejemplo
v1
3
v3
1
2
2
1
El algoritmo termina pues m (3)
es igual a n − 1 (4 − 1 = 3).
v2
3
v4
m := 3
Árboles:Árbol Abarcador Minimal– p.11/25
MST: Algoritmo de Prim
Entrada:
Un grafo conexo con peso.
1
Tome un vértice v de G y sea T el grafo con un vértice y
sin ningún lado.
2
Sea V el conjunto de todos los vértices de G excepto v .
3
Desde i igual 1 hasta n − 1 hacer:
Encuentre un lado e que conecte un vértice de V con
alguno de T y que sea lo más pequeño posible. Sea
w el extremo de e que está en V.
3b Añada el vértice w y el lado e al grafo T.
3a
3c
Borre el vértice w de V.
Salida: T.
Árboles:Árbol Abarcador Minimal– p.12/25
Algoritmo de Prim: Ejemplo
Fase de Inicialización:
v1
1
v2
v1
3
v3
2
2
1
3
3
v4
v3
1
2
2
1
v2
3
v4
i := 0
Árboles:Árbol Abarcador Minimal– p.13/25
Algoritmo de Prim: Ejemplo
v1
3
v3
1
2
2
1
v2
3
Determinar el menor lado que une un vértice
de T (rojos) con otro de
V (negros):
el menor lado es v1 − v2
v4
v1
i := 0;
3
v3
1
2
2
1
v2
3
v4
Se añade el vértice y el
lado y se aumenta i.
Árboles:Árbol Abarcador Minimal– p.14/25
Algoritmo de Prim: Ejemplo
v1
3
v3
1
2
2
1
v2
3
Determinar el menor lado que une un vértice
de T (rojos) con otro de
V (negros):
el menor lado es v2 − v4
v4
v1
i := 1;
3
v3
v2
2
2
1
3
v4
Se añade el vértice y el
lado y se aumenta i.
Árboles:Árbol Abarcador Minimal– p.15/25
Algoritmo de Prim: Ejemplo
v1
3
v3
1
2
2
1
v2
3
Determinar el menor lado que une un vértice
de T (rojos)con otro de
V (negros):
el menor lado es v3 − v4
v4
v1
i := 2;
3
v3
v2
2
1
v4
Se añade el vértice y el
lado y se aumenta i.
Árboles:Árbol Abarcador Minimal– p.16/25
Algoritmo de Prim: Ejemplo
El algoritmo termina pues
i (3) es igual a n−1 (4−1 = 3).
v1
3
v3
1
2
2
1
v2
3
v4
i := 3;
Árboles:Árbol Abarcador Minimal– p.17/25
Algoritmo de Paseos Cortos
Entrada:
Un grafo conexo con peso y un vértice de él vo .
1
Defina V el conjunto de todos los vértices de G.
Etiquete los vértices de V con l(v) = ∞ y
P athT o(v) = ². Etiquete a l(v0 ) = 0.
3
Mientras V no sea vacío hacer:
Elija el vértice de V con menor índice posible.
Llámero vi .
3b Para cada uno de los vértices vj de V adyacentes a
vi hacer: Si l(vi ) + w(vo , ij ) < l(vj ) entonces hacer
l(vj ) = l(vi ) + w(vi , vj ) y P athT o(vj ) = P athT o(vi ) · vi .
3a
3c
Salida:
Borre el vértice vi de V.
Las funciones índice de cada vértice y la función
PathTo.
Árboles:Árbol Abarcador Minimal– p.18/25
Ejemplo de Paseos Cortos
Inicialización
v1
7
v2
1
2
5
2
v0
3
v3
6
4
v4
1
v5
v
l(v)
P athT o(v)
v0
v1
v2
v3
v4
v5
0
∞
∞
∞
∞
∞
²
²
²
²
²
²
oferta
Árboles:Árbol Abarcador Minimal– p.19/25
Ejemplo de Paseos Cortos: v0
v1
7
Vértice con mínimo índice
v0 : afectación posible a los
adyacentes
v2
1
2
5
2
v0
3
v3
6
4
v4
1
v5
v
l(v)
P athT o(v)
v0
v1
v2
v3
v4
v5
0
∞
∞
∞
∞
∞
²
²
²
²
²
²
oferta de v0
1
4
Árboles:Árbol Abarcador Minimal– p.20/25
Ejemplo de Paseos Cortos: v0
Vértices afectados:
v1
7
v2
1
2
5
2
v0
3
v3
6
4
v4
1
v5
v
l(v)
P athT o(v)
v0
v1
v2
v3
v4
v5
0
1
∞
∞
4
∞
²
v0
²
²
v0
²
oferta
Árboles:Árbol Abarcador Minimal– p.20/25
Ejemplo de Paseos Cortos: v0
Vértices afectados:
v1
7
v2
1
2
5
2
v0
3
v3
6
4
v4
1
v5
v
l(v)
P athT o(v)
v0
v1
v2
v3
v4
v5
0
1
∞
∞
4
∞
²
v0
²
²
v0
²
oferta
v0 sale
Árboles:Árbol Abarcador Minimal– p.20/25
Ejemplo de Paseos Cortos: v1
v1
7
Vértice con mínimo índice
v1 : afectación posible a los
adyacentes
v2
1
2
5
2
v0
3
v3
6
4
v4
1
v5
v
l(v)
P athT o(v)
v0
v1
v2
v3
v4
v5
0
1
∞
∞
4
∞
²
v0
²
²
v0
²
oferta de v1
8
3
6
Árboles:Árbol Abarcador Minimal– p.21/25
Ejemplo de Paseos Cortos: v1
Vértices afectados:
v1
7
v2
1
2
5
2
v0
3
v3
6
4
v4
1
v5
v
l(v)
P athT o(v)
v0
v1
v2
v3
v4
v5
0
1
8
∞
3
6
²
v0
v0 v1
²
v0 v1
v0 v1
oferta
Árboles:Árbol Abarcador Minimal– p.21/25
Ejemplo de Paseos Cortos: v1
Vértices afectados:
v1
7
v2
1
2
5
2
v0
3
v3
6
4
v4
1
v5
v
l(v)
P athT o(v)
v0
v1
v2
v3
v4
v5
0
1
8
∞
3
6
²
v0
v0 v1
²
v0 v1
v0 v1
oferta
v1 sale.
Árboles:Árbol Abarcador Minimal– p.21/25
Ejemplo de Paseos Cortos: v4
v1
7
Vértice con mínimo índice
v4 : afectación posible a los
adyacentes
v2
1
2
5
2
v0
3
v3
6
4
v4
1
v5
v
l(v)
P athT o(v)
oferta de v4
v0
v1
v2
v3
v4
v5
0
1
8
∞
3
6
²
v0
v0 v1
²
v0 v1
v0 v1
4
Árboles:Árbol Abarcador Minimal– p.22/25
Ejemplo de Paseos Cortos: v4
Vértices afectados:
v1
7
v2
1
2
5
2
v0
3
v3
6
4
v4
1
v5
v
l(v)
P athT o(v)
v0
v1
v2
v3
v4
v5
0
1
8
∞
3
4
²
v0
v0 v1
²
v0 v1
v0 v1 v4
oferta
Árboles:Árbol Abarcador Minimal– p.22/25
Ejemplo de Paseos Cortos: v4
Vértices afectados:
v1
7
v2
1
2
5
2
v0
3
v3
6
4
v4
1
v5
v
l(v)
P athT o(v)
v0
v1
v2
v3
v4
v5
0
1
8
∞
3
4
²
v0
v0 v1
²
v0 v1
v0 v1 v4
oferta
v4 sale.
Árboles:Árbol Abarcador Minimal– p.22/25
Ejemplo de Paseos Cortos: v5
v1
7
Vértice con mínimo índice
v5 : afectación posible a los
adyacentes
v2
1
2
5
2
v0
3
v3
6
4
v4
1
v5
v
l(v)
P athT o(v)
oferta de v5
v0
v1
v2
v3
v4
v5
0
1
8
∞
3
4
²
v0
v0 v1
²
v0 v1
v0 v1 v4
7
10
Árboles:Árbol Abarcador Minimal– p.23/25
Ejemplo de Paseos Cortos: v5
Vértices afectados:
v1
7
v2
1
2
5
2
v0
3
v3
6
4
v4
1
v5
v
l(v)
P athT o(v)
v0
v1
v2
v3
v4
v5
0
1
7
10
3
4
²
v0
v0 v1 v4 v5
v0 v1 v4 v5
v0 v1
v0 v1 v4
oferta
Árboles:Árbol Abarcador Minimal– p.23/25
Ejemplo de Paseos Cortos: v5
Vértices afectados:
v1
7
v2
1
2
5
2
v0
3
v3
6
4
v4
1
v5
v
l(v)
P athT o(v)
v0
v1
v2
v3
v4
v5
0
1
7
10
3
4
²
v0
v0 v1 v4 v5
v0 v1 v4 v5
v0 v1
v0 v1 v4
oferta
v5 sale.
Árboles:Árbol Abarcador Minimal– p.23/25
Ejemplo de Paseos Cortos: v2
v1
7
Vértice con mínimo índice
v2 : afectación posible a los
adyacentes
v2
1
2
5
2
v0
3
v3
6
4
v4
1
v5
v
l(v)
P athT o(v)
v0
v1
v2
v3
v4
v5
0
1
7
10
3
4
²
v0
v0 v1 v4 v5
v0 v1 v4 v5
v0 v1
v0 v1 v4
oferta de v2
9
Árboles:Árbol Abarcador Minimal– p.24/25
Ejemplo de Paseos Cortos: v2
Vértices afectados:
v1
7
v2
1
2
5
2
v0
3
v3
6
4
v4
1
v5
v
l(v)
P athT o(v)
v0
v1
v2
v3
v4
v5
0
1
7
9
3
4
²
v0
v0 v1 v4 v5
v0 v1 v4 v5 v2
v0 v1
v0 v1 v4
oferta
Árboles:Árbol Abarcador Minimal– p.24/25
Ejemplo de Paseos Cortos: v2
Vértices afectados:
v1
7
v2
1
2
5
2
v0
3
v3
6
4
v4
1
v5
v
l(v)
P athT o(v)
v0
v1
v2
v3
v4
v5
0
1
7
9
3
4
²
v0
v0 v1 v4 v5
v0 v1 v4 v5 v2
v0 v1
v0 v1 v4
oferta
v2 sale.
Árboles:Árbol Abarcador Minimal– p.24/25
Ejemplo de Paseos Cortos: Conclusión
Caminos
v1
más
7
v2
1
2
5
2
v0
3
v3
6
4
v4
1
v5
cortos
desde
v
l(v)
P athT o(v)
v0
v1
v2
v3
v4
v5
0
1
7
9
3
4
²
v0
v0 v1 v4 v5
v0 v1 v4 v5 v2
v0 v1
v0 v1 v4
v0 :
Árboles:Árbol Abarcador Minimal– p.25/25
Descargar