Árboles:
Árbol Abarcador Minimal
CSI / ITESM
´
Árboles Abarcador (Spanning Tree): Definición
Un árbol abarcador para un grafo G es un subgrafo de G
Á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.
´
Ejemplos árboles abarcadores para un grafo Considere el grafo: v1 v2 v3 v4 e1 e2 e3 e4
Árboles abarcadores son: v1 v2 e1 e2 e4 v1 v2 v3 v4 e1 e3 e4 v1 v2 v3 v4 e2 e3 e4
Grafos Con Peso (Weighted Graphs)
Un árbol con peso es un grafo donde cada lado tiene un número asociado o peso.
´
Grafos Con Peso (Weighted Graphs)
Un árbol con peso es un grafo donde cada lado tiene un número asociado o peso.
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.
´
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.
v1 v2
v3 v4
2
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.
v1 v2
v3 v4
2
3 8 6
Á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.
Á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: v1 v2 v3 v4 2 3 8 6 v1 v2 v3 v4 2 3 6
Peso árbol abarcador=11
v1 v2
v3 v4 2
8 6
Peso árbol abarcador=16
v1 v2
v3 v4
3 8 6
Peso árbol abarcador=17 ´
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.
3c Si al añadir e a T no se forma un ciclo, entonces
añadir e a T.
3d Incrementar m en 1. Salida: T.
Algoritmo de Kruskal: Ejemplo v1 v2 v3 v4 1 3 2 2 3 1 Fase de Inicialización: v1 v2 v3 v4 1 3 2 2 3 1 m := 0 ´
Algoritmo de Kruskal: Ejemplo v1 v2 v3 v4 1 3 2 2 3 1 m := 0
Encuentre el lado más pe-queño: v1 a v2 peso: 1 v1 v2 v3 v4 1 3 2 2 3 1
Algoritmo de Kruskal: Ejemplo v1 v2 v3 v4 1 3 2 2 3 1 m := 0
Encuentre el lado más pe-queño: v1 a v2 peso: 1 v1 v2 v3 v4 1 3 2 2 3 1 No forma un ciclo en T: ´
Algoritmo de Kruskal: Ejemplo v1 v2 v3 v4 1 3 2 2 3 1 m := 0
Encuentre el lado más pe-queño: v1 a v2 peso: 1 v1 v2 v3 v4 1 3 2 2 3 1 No forma un ciclo en T: se añade a T y m := m + 1
Algoritmo de Kruskal: Ejemplo v1 v2 v3 v4 1 3 2 2 3 1 m := 1
Encuentre el lado más pe-queño: v3 a v4 peso: 1 v1 v2 v3 1 v4 3 2 2 3 ´
Algoritmo de Kruskal: Ejemplo v1 v2 v3 v4 1 3 2 2 3 1 m := 1
Encuentre el lado más pe-queño: v3 a v4 peso: 1 v1 v2 v3 1 v4 3 2 2 3 No forma un ciclo en T:
Algoritmo de Kruskal: Ejemplo v1 v2 v3 v4 1 3 2 2 3 1 m := 1
Encuentre el lado más pe-queño: v3 a v4 peso: 1 v1 v2 v3 1 v4 3 2 2 3 No forma un ciclo en T: se añade a T y m := m + 1 ´
Algoritmo de Kruskal: Ejemplo v1 v2 v3 v4 1 1 3 2 2 3 m := 2
Encuentre el lado más pe-queño: v1 a v4 peso: 2 v1 v2 v3 v4 2 3 2 3
Algoritmo de Kruskal: Ejemplo v1 v2 v3 v4 1 1 3 2 2 3 m := 2
Encuentre el lado más pe-queño: v1 a v4 peso: 2 v1 v2 v3 v4 2 3 2 3 No forma un ciclo en T: ´
Algoritmo de Kruskal: Ejemplo v1 v2 v3 v4 1 1 3 2 2 3 m := 2
Encuentre el lado más pe-queño: v1 a v4 peso: 2 v1 v2 v3 v4 2 3 2 3 No forma un ciclo en T: se añade a T y m := m + 1
Algoritmo de Kruskal: Ejemplo v1 v2 v3 v4 1 1 2 3 2 3 m := 3
El algoritmo termina pues m (3)
es igual a n − 1 (4 − 1 = 3).
´
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:
3a 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. 3c Borre el vértice w de V.
Algoritmo de Prim: Ejemplo v1 v2 v3 v4 1 3 2 2 3 1 Fase de Inicialización: v1 v2 v3 v4 1 3 2 2 3 1 i := 0 ´
Algoritmo de Prim: Ejemplo v1 v2 v3 v4 1 3 2 2 3 1 i := 0;
Determinar el menor la-do que une un vértice de T (rojos) con otro de V (negros): el menor lado es v1 − v2 v1 v2 v3 v4 3 2 1 2 3 1 Se añade el vértice y el lado y se aumenta i.
Algoritmo de Prim: Ejemplo v1 v2 v3 v4 1 3 2 2 3 1 i := 1;
Determinar el menor la-do que une un vértice de T (rojos) con otro de V (negros): el menor lado es v2 − v4 v1 v2 v3 v4 3 2 3 2 1 Se añade el vértice y el lado y se aumenta i. ´
Algoritmo de Prim: Ejemplo v1 v2 v3 v4 1 2 3 2 3 1 i := 2;
Determinar el menor la-do que une un vértice de T (rojos)con otro de V (negros): el menor lado es v3 − v4 v1 v2 v3 v4 3 2 1 Se añade el vértice y el lado y se aumenta i.
Algoritmo de Prim: Ejemplo v1 v2 v3 v4 1 2 1 3 2 3 i := 3;
El algoritmo termina pues
i (3) es igual a n−1 (4−1 = 3).
´
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:
3a 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.
3c Borre el vértice vi de V.
Ejemplo de Paseos Cortos v1 v2 v0 v3 v4 v5 1 4 7 5 2 2 3 6 1 Inicialización v l(v) P athT o(v) oferta v0 0 ² v1 ∞ ² v2 ∞ ² v3 ∞ ² v4 ∞ ² v5 ∞ ² ´
Ejemplo de Paseos Cortos: v0 v1 v2 v0 v3 v4 v5 1 4 7 5 2 2 3 6 1
Vértice con mínimo índice
v0: afectación posible a los
adyacentes v l(v) P athT o(v) oferta de v0 v0 0 ² v1 ∞ ² 1 v2 ∞ ² v3 ∞ ² v4 ∞ ² 4 v5 ∞ ²
Ejemplo de Paseos Cortos: v0 v1 v2 v0 v3 v4 v5 1 4 7 5 2 2 3 6 1 Vértices afectados: v l(v) P athT o(v) oferta v0 0 ² v1 1 v0 v2 ∞ ² v3 ∞ ² v4 4 v0 v5 ∞ ² ´
Ejemplo de Paseos Cortos: v0 v1 v2 v0 v3 v4 v5 1 4 7 5 2 2 3 6 1 Vértices afectados: v l(v) P athT o(v) oferta v0 0 ² v1 1 v0 v2 ∞ ² v3 ∞ ² v4 4 v0 v5 ∞ ² v0 sale
Ejemplo de Paseos Cortos: v1 v1 v2 v0 v3 v4 v5 1 7 5 2 4 2 3 6 1
Vértice con mínimo índice
v1: afectación posible a los
adyacentes v l(v) P athT o(v) oferta de v1 v0 0 ² v1 1 v0 v2 ∞ ² 8 v3 ∞ ² v4 4 v0 3 v5 ∞ ² 6 ´
Ejemplo de Paseos Cortos: v1 v1 v2 v0 v3 v4 v5 1 7 5 2 4 2 3 6 1 Vértices afectados: v l(v) P athT o(v) oferta v0 0 ² v1 1 v0 v2 8 v0v1 v3 ∞ ² v4 3 v0v1 v5 6 v0v1
Ejemplo de Paseos Cortos: v1 v1 v2 v0 v3 v4 v5 1 7 5 2 4 2 3 6 1 Vértices afectados: v l(v) P athT o(v) oferta v0 0 ² v1 1 v0 v2 8 v0v1 v3 ∞ ² v4 3 v0v1 v5 6 v0v1 v1 sale. ´
Ejemplo de Paseos Cortos: v4 v1 v2 v0 v3 v4 v5 1 2 1 7 5 4 2 3 6
Vértice con mínimo índice
v4: afectación posible a los
adyacentes v l(v) P athT o(v) oferta de v4 v0 0 ² v1 1 v0 v2 8 v0v1 v3 ∞ ² v4 3 v0v1 v5 6 v0v1 4
Ejemplo de Paseos Cortos: v4 v1 v2 v0 v3 v4 v5 1 2 1 7 5 4 2 3 6 Vértices afectados: v l(v) P athT o(v) oferta v0 0 ² v1 1 v0 v2 8 v0v1 v3 ∞ ² v4 3 v0v1 v5 4 v0v1v4 ´
Ejemplo de Paseos Cortos: v4 v1 v2 v0 v3 v4 v5 1 2 1 7 5 4 2 3 6 Vértices afectados: v l(v) P athT o(v) oferta v0 0 ² v1 1 v0 v2 8 v0v1 v3 ∞ ² v4 3 v0v1 v5 4 v0v1v4 v4 sale.
Ejemplo de Paseos Cortos: v5 v1 v2 v0 v3 v4 v5 1 2 1 3 6 7 5 4 2
Vértice con mínimo índice
v5: afectación posible a los
adyacentes v l(v) P athT o(v) oferta de v5 v0 0 ² v1 1 v0 v2 8 v0v1 7 v3 ∞ ² 10 v4 3 v0v1 v5 4 v0v1v4 ´
Ejemplo de Paseos Cortos: v5 v1 v2 v0 v3 v4 v5 1 2 1 3 6 7 5 4 2 Vértices afectados: v l(v) P athT o(v) oferta v0 0 ² v1 1 v0 v2 7 v0v1v4v5 v3 10 v0v1v4v5 v4 3 v0v1 v5 4 v0v1v4
Ejemplo de Paseos Cortos: v5 v1 v2 v0 v3 v4 v5 1 2 1 3 6 7 5 4 2 Vértices afectados: v l(v) P athT o(v) oferta v0 0 ² v1 1 v0 v2 7 v0v1v4v5 v3 10 v0v1v4v5 v4 3 v0v1 v5 4 v0v1v4 v5 sale. ´
Ejemplo de Paseos Cortos: v2 v1 v2 v0 v3 v4 v5 1 2 1 3 2 6 7 5 4
Vértice con mínimo índice
v2: afectación posible a los
adyacentes v l(v) P athT o(v) oferta de v2 v0 0 ² v1 1 v0 v2 7 v0v1v4v5 v3 10 v0v1v4v5 9 v4 3 v0v1 v5 4 v0v1v4
Ejemplo de Paseos Cortos: v2 v1 v2 v0 v3 v4 v5 1 2 1 3 2 6 7 5 4 Vértices afectados: v l(v) P athT o(v) oferta v0 0 ² v1 1 v0 v2 7 v0v1v4v5 v3 9 v0v1v4v5v2 v4 3 v0v1 v5 4 v0v1v4 ´
Ejemplo de Paseos Cortos: v2 v1 v2 v0 v3 v4 v5 1 2 1 3 2 6 7 5 4 Vértices afectados: v l(v) P athT o(v) oferta v0 0 ² v1 1 v0 v2 7 v0v1v4v5 v3 9 v0v1v4v5v2 v4 3 v0v1 v5 4 v0v1v4 v2 sale.
Ejemplo de Paseos Cortos: Conclusión
Caminos más cortos desde v0:
v1 v2 v0 v3 v4 v5 1 2 1 3 2 6 7 5 4 v l(v) P athT o(v) v0 0 ² v1 1 v0 v2 7 v0v1v4v5 v3 9 v0v1v4v5v2 v4 3 v0v1 v5 4 v0v1v4 ´