Вы находитесь на странице: 1из 5

Algoritmo de Kruskal

De Wikipedia, la enciclopedia libre


Saltar a navegacin, bsqueda
El algoritmo de Kruskal es un algoritmo de la teora de grafos para encontrar un rbol
recubridor mnimo en un grafo conexo y ponderado. Es decir, busca un subconjunto de
aristas que, formando un rbol, incluyen todos los vrtices y donde el valor total de todas
las aristas del rbol es el minimo. Si el grafo no es conexo, entonces busca un bosque
expandido mnimo (un rbol expandido mnimo para cada componente conexa). El
algoritmo de Kruskal es un ejemplo de algoritmo voraz.

Un ejemplo de rbol expandido mnimo. Cada punto representa un vrtice, el cual puede ser
un rbol por s mismo. Se usa el Algoritmo para buscar las distancias ms cortas (rbol
expandido) que conectan todos los puntos o vrtices.
Funciona de la siguiente manera:

se crea un bosque B (un conjunto de rboles), donde cada vrtice del grafo es un
rbol separado
se crea un conjunto C que contenga a todas las aristas del grafo

mientras C es novaco

eliminar una arista de peso mnimo de C

si esa arista conecta dos rboles diferentes se aade al bosque, combinando


los dos rboles en un solo rbol

en caso contrario, se desecha la arista

Al acabar el algoritmo, el bosque tiene una sola componente, la cual forma un rbol de
expansin mnimo del grafo.
Este algoritmo fue publicado por primera vez en Proceedings of the American
Mathematical Society, pp. 4850 en 1956, y fue escrito por Joseph Kruskal.

Tabla de contenidos
[ocultar]
1 Pseudocdigo
2 Complejidad del algoritmo

3 Demostracin de la correccin

4 Ejemplo

5 Referencias

6 Enlaces externos

Pseudocdigo [editar]
1 function Kruskal(G)
2
for each vertex v in G do
3
Define an elementary cluster C(v) {v}.
4
Initialize a priority queue Q to contain all edges in G, using the
weights as keys.
5
Define a tree T
//T will ultimately contain the edges of
the MST
6
// n es el nmero total de vrtices
7
while T has fewer than n-1 edges do
8
// edge u,v is the minimum weighted route from/to v
9
(u,v) Q.removeMin()
10
// previene ciclos en T. suma u,v solo si T no contiene una
arista que una u y v.
11
// Ntese que el cluster contiene ms de un vrtice si una arista
une un par de
12
// vrtices que han sido aadidos al rbol.
13
Let C(v) be the cluster containing v, and let C(u) be the cluster
containing u.
14
if C(v) C(u) then
15
Add edge (v,u) to T.
16
Merge C(v) and C(u) into one cluster, that is, union C(v) and
C(u).
17
return tree T

Complejidad del algoritmo [editar]


m el nmero de aristas del grafo y n el nmero de vrtices, el algoritmo de Kruskal muestra
una complejidad O(m log m) o, equivalentemente, O(m log n), cuando se ejecuta sobre
estructuras de datos simples. Los tiempos de ejecucin son equivalentes porque:

m es a lo sumo n2 y log n2 = 2logn es O(log n).


ignorando los vrtices aislados, los cuales forman su propia componente del rbol
de expansin mnimo, n 2m, as que log n es O(log m).

Se puede conseguir esta complejidad de la siguiente manera: primero se ordenan las aristas
por su peso usando una ordenacin por comparacin (comparison sort) con una
complejidad del orden de O(m log m); esto permite que el paso "eliminar una arista de peso
mnimo de C" se ejecute en tiempo constante. Lo siguiente es usar una estructura de datos
sobre conjuntos disjuntos (disjoint-set data structure) para controlar qu vrtices estn en
qu componentes. Es necesario hacer varias operaciones del orden de O(m), dos
operaciones de bsqueda y posiblemente una unin por cada arista. Incluso una estructura
de datos sobre conjuntos disjuntos simple con uniones por rangos puede ejecutar
operaciones del orden de O(m) en O(m log n). Por tanto, la complejidad total es del orden
de O(m log m) = O(m log n).
Con la condicin de que las aristas estn ordenadas o puedan ser ordenadas en un tiempo
lineal (por ejemplo, mediante el ordenamiento por cuentas o con el ordenamiento Radix), el
algoritmo puede usar estructuras de datos de conjuntos disjuntos ms complejas para
ejecutarse en tiempos del orden de O(m (n)), donde es la inversa (tiene un crecimiento
extremadamente lento) de la funcin de Ackermann.

Demostracin de la correccin [editar]


Sea P un grafo conexo y valuado y sea Y el subgrafo de P producido por el algoritmo. Y no
puede tener ciclos porque cada vez que se aade una arista, sta debe conectar vrtices de
dos rboles diferentes y no vrtices dentro de un subrbol. Y no puede ser disconexa ya que
la primera arista que une dos componentes de Y debera haber sido aadida por el
algoritmo. Por tanto, Y es un rbol expandido de P.
Sea Y1 el rbol expandido de peso mnimo de P, el cual tiene el mayor nmero de aristas en
comn con Y. Si Y1=Y entonces Y es un rbol de expansin mnimo. Por otro lado, sea e la
primera arista considerada por el algoritmo que est en Y y que no est en Y1. Sean C1 y C2
las componentes de P que conecta la arista e. Ya que Y1 es un rbol, Y1+e tiene un ciclo y
existe una arista diferente f en ese ciclo que tambin conecta C1 y C2. Entonces Y2=Y1+e-f es
tambin un rbol expandido. Ya que e fue considerada por el algoritmo antes que f, el peso
de e es al menos igual que que el peso de f y ya que Y1 es un rbol expandido mnimo, los
pesos de esas dos aristas deben ser de hecho iguales. Por tanto, Y2 es un rbol expandido
mnimo con ms aristas en comn con Y que las que tiene Y1, contradiciendo las hiptesis
que se haban establecido antes para Y1. Esto prueba que Y debe ser un rbol expandido de
peso mnimo.
Otros algoritmos para este problema son el algoritmo de Prim y el algoritmo de Boruvka.
Vase tambin: Implementacin del algoritmo de Kruskal en Java

Ejemplo [editar]

Este es el grafo original. Los nmeros de las aristas indican


su peso. Ninguna de las aristas est resaltada.

AD y CE son las aristas mas cortas, con peso 5, y AD se


ha elegido arbitrariamente, por tanto se resalta.

Sin embargo, ahora es CE la arista mas pequea que no


forma ciclos, con peso 5, por lo que se resalta como
segunda arista.

La siguiente arista, DF con peso 6, ha sido resaltada


utilizando el mismo mtodo.

La siguientes aristas mas pequeas son AB y BE, ambas


con peso 7. AB se elige arbitrariamente, y se resalta. La
arista BD se resalta en rojo, porque formara un ciclo ABD
si se hubiera elegido.

El proceso contina marcando las aristas, BE con peso 7.


Muchas otras aristas se marcan en rojo en este paso: BC
(formara el ciclo BCE), DE (formara el ciclo DEBA), y
FE (formara el ciclo FEBAD).

Finalmente, el proceso termina con la arista EG de peso 9,


y se ha encontrado el rbol expandido mnimo.

Referencias [editar]

J. B. Kruskal: On the shortest spanning subtree and the traveling salesman problem.
En: Proceedings of the American Mathematical Society. 7 (1956), pp. 4850
Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest y Clifford Stein.
Introduction to Algorithms, Second Edition. MIT Press and McGraw-Hill, 2001.
ISBN 0262032937. Seccin 23.2: The algorithms of Kruskal and Prim, pp.567574.

Вам также может понравиться