Árbol mínimo
Un gráfico que no tiene direcciones se llama gráfico no dirigido. Cada gráfico debe tener una ruta de un nodo a otro nodo. Un árbol de expansión también es un gráfico conectado no dirigido donde todos los nodos del gráfico están presentes con bordes mínimos. Si un árbol de expansión no tiene todos los nodos del gráfico, entonces no podemos decir que es un árbol de expansión. Los pesos totales del árbol de expansión serán menores que el peso original del gráfico a medida que lo conectamos a través de los bordes de peso mínimo. El árbol de expansión tampoco tiene un ciclo. Cualquier gráfico tiene más de un árbol de expansión, pero solo uno de ellos será único. Lo llamamos un árbol de expansión mínimo ya que estamos intentando crear un gráfico completo con todos los nodos mientras mantenemos el peso bajo.
Entendamos el árbol de expansión mínimo con un ejemplo. Entonces, como sabemos, el árbol de expansión mínimo es parte del gráfico pero con menos costo. Entonces, este escenario se puede ilustrar con un ejemplo. Supongamos que tenemos un gráfico como este.
El gráfico anterior se puede organizar de diferentes maneras para que se elimine el ciclo del gráfico, o de lo contrario no será un MST (árbol de expansión mínimo). Por lo tanto, eliminaremos el ciclo del gráfico y contaremos el costo total del gráfico. Tenemos cuatro nodos, o vértices (A, B, C y D).
Caso 1:
Después de eliminar el ciclo del gráfico, el costo del gráfico MST (mínimo de expansión mínimo) anterior es 56.
Caso -2:
Después de eliminar el ciclo del gráfico, el costo del gráfico MST (mínimo de expansión mínimo) anterior es 53.
Caso - 3:
Después de eliminar el ciclo del gráfico, el costo del gráfico MST (mínimo de expansión mínimo) anterior es 41.
Podemos ver que el último gráfico del costo total de Case-3 es mucho más bajo en comparación con los otros dos gráficos. Entonces, este gráfico es nuestro MST final (árbol de expansión mínimo) para el gráfico original. El motivo de los algoritmos de primeros o Kruskal es encontrar el costo del gráfico lo más bajo posible. Entonces ese es nuestro motivo en este artículo para explicar este MST.
Podemos dibujar un árbol de expansión con la ayuda de los siguientes dos métodos:
En este artículo, vamos a discutir el algoritmo de Kruskal. El algoritmo de Prim se discutirá en el próximo artículo.
Algoritmo de Kruskal
El algoritmo de Kruskal es muy fácil de implementar en comparación con el algoritmo de Prim porque no tenemos que preocuparnos por los vértices de adyacencia en este algoritmo. En este algoritmo, el algoritmo de Kruskal comienza desde todos los vértices del gráfico. Elegimos la vértice de borde de peso mínimo y comenzamos a crear el árbol de expansión mínimo. Elegimos otro borde con el peso mínimo y lo agregamos al árbol mínimo de expansión. Este proceso continúa hasta que no agregamos todos los nodos gráficos originales. Una vez que todos los nodos en el gráfico se agregan al árbol de expansión mínimo, el algoritmo se detendrá. Durante la creación del árbol de expansión mínimo de un gráfico, también tenemos que cuidar ese gráfico, no crear ningún ciclo porque los ciclos no deben estar en el árbol de expansión mínimo.
Entonces, si algún nodo crea el ciclo en el árbol de expansión mínimo, elegimos el otro nodo, incluso si el peso de este nodo es mayor que el nodo anterior que crea el ciclo.
El algoritmo de Kruskal es diferente del algoritmo de Prim. El algoritmo de Prim, mientras crea un árbol de expansión mínimo, comienza desde cualquier nodo o vértice y luego agrega otro nodo o vértice solo desde los nodos de adyacencia. Pero el algoritmo de Kruskal no le importa el nodo de adyacencia y siempre selecciona ese nodo que tiene menos peso, pero ese nodo no debe crear un ciclo en el árbol de expansión mínimo.
Pasos de algoritmo de Kruskal:
Se toman los siguientes pasos al escribir el código C ++ para el algoritmo de Kruskal.
Ahora, implementaremos los pasos de algoritmo anteriores utilizando un ejemplo. Tenemos el siguiente gráfico, y descubriremos el árbol de expansión mínimo para este gráfico.
Entonces, según el algoritmo, primero elegimos el borde de peso más pequeño, que es AB. Entonces elegimos ese borde y lo mantuvimos en la matriz de árboles de expansión. El peso del borde ab.
Ahora, elegimos el siguiente borde de peso más pequeño, CD, y mantenemos ese borde en la matriz de árboles mínimo de expansión. El peso del borde del CD es 12.
El siguiente borde más pequeño que obtuvimos fue BC, que guardamos en la matriz. El borde de BC ponderado es de 17.
Nuestro algoritmo se detendrá aquí porque tenemos todos los vértices de un gráfico, y tenemos nuestro árbol de expansión mínimo. El peso total de este MST es 9 + 12 + 17 = 38.
Programa: El siguiente es un código C ++ para el algoritmo de Kruskal.
#incluirProducción:
Graphs de MST: [0-2] (1) [3-4] (1) [1-3] (2) [2-3] (2) [1-5] (3)Conclusión:
Hemos estudiado el árbol de expansión mínimo de Kruskal, que es la primera preferencia de la mayoría de las personas cuando tienen que encontrar el gráfico MST de un gráfico. El algoritmo de Kruskal es simple de comprender e implementar en una aplicación del mundo real. Al igual que el algoritmo de Prim, el algoritmo de Kruskal también es muy útil en aplicaciones de la vida real. Entonces debemos entender este algoritmo.