Á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