1. ESCUELA PROFESIONAL: Ingeniería de Sistemas e Informática.
SEMESTRE: IV
CURSO:
Algoritmo y Programación II
DOCENTE:
Ing. Poccori Umeres, Godofredo.
INTEGRANTE:
Rodriguez Berna, Oscar Jesus.
Cruz Cruz, Yilmar Fran.
CUSCO-PERU
2025
UNIVERSIDAD TECNOLOGICA
DE LOS ANDES
ALGORITMO KRUSKAL.
2. Contenido
INTRODUCCION.........................................................................................................3
METODOLOGIA..........................................................................................................4
Descripción del Algoritmo de Kruskal..........................................................................6
Ejemplo del Algoritmo de Kruskal.............................................................................7
Pasos Detallados:......................................................................................................7
1. Ordenar las aristas............................................................................................7
2. Inicializar los conjuntos disjuntos:................................................................7
3. Recorrer las aristas:.......................................................................................7
4. Resultado Final:................................................................................................8
Complejidad del Algoritmo de Kruskal.....................................................................8
Aplicaciones del Algoritmo de Kruskal......................................................................9
HISTORIA...................................................................................................................10
Funcionamiento del Algoritmo de Kruskal.............................................................11
Desarrollo y Optimización.........................................................................................11
Ventajas y Desventajas del Algoritmo de Kruskal..................................................12
CODIGO:.....................................................................................................................12
COMPILACION:.....................................................................................................14
CONCLUSIONES.......................................................................................................15
3. INTRODUCCION.
En los años 90, las redes han revolucionado la forma en la que las personas y las
organizaciones intercambian información y coordinan sus actividades”. (Sanchis, 2007). Los
sistemas de monitoreo inalámbricos de bajo costo han adquirido gran importancia
actualmente, esto gracias a los avances tecnológicos en modulación digital y a las
necesidades de la industria en la adquisición de datos en línea, por estos motivos se han
desarrollado sistemas de sensores cada vez más económicos, de bajo consumo energético, y
se pueden instalar, controlar y monitorear de manera remota. Por lo cual el desarrollo de
Software ha tenido un gran crecimiento en los últimos años, lo que ha permitido la creación
de algoritmos y programas que ayuden en la resolución de problemas de diferente dominio
apoyándose en el procesamiento del computador, cabe recalcar que aunque varios algoritmos
resuelvan un mismo problema se debe tener en cuenta la eficacia que tiene cada uno de ellos
sobre la solución del problema esto quiere decir que su tiempo de ejecución sea menor al
igual que su complejidad e implementación haciendo uso y consumo de la menor cantidad de
recursos. Uno de los ejemplos clásicos de las ciencias de la computación consiste en la
búsqueda del árbol de cobertura de costo mínimo (MST, Mínimum Spanning Tree) de un
grafo conexo, no dirigido y aristas con peso G(V, E), en que V corresponde al conjunto de
nodos E al de aristas ( o arcos). A continuación, se analizará una posible solución para este
problema.
4. METODOLOGIA.
A. Conocimientos previos:
a.1.- Árbol de expansión. - compuestos por todos los vértices y algunas de las aristas
en el cual no existirán ciclos. ( Véase la figura 1.1).
a.2.-Árbol de expansión mínima. -Es en el cual no existirán ciclos en donde la suma de
sus aristas es la de menor peso. (Véase la figura 1.2) .
5. Algoritmo. - son una serie de normas o leyes específicas que hace posible la
ejecución de actividades, cumpliendo una serie de pasos continuos que no le originen dudas a
la persona que realice dicha actividad. Los algoritmos se pueden expresar de diversas formas:
lenguaje natural, lenguaje de programación y diagramas de Flujo.
El algoritmo de Kruskal es un algoritmo clásico utilizado para resolver el problema
del Árbol de Expansión Mínima (MST, por sus siglas en inglés) en un grafo ponderado y
no dirigido. Un árbol de expansión mínima es un subconjunto de las aristas de un grafo que
conecta todos los vértices del grafo sin ciclos y con el menor peso total posible.
Definición del Problema del Árbol de Expansión Mínima (MST).
En un grafo ponderado, cada arista tiene un peso asociado que puede representar una
distancia, un costo o algún otro valor. El problema del MST consiste en encontrar el
subconjunto de aristas que conecta todos los vértices del grafo de manera que el peso total de
las aristas seleccionadas sea el menor posible y que el grafo no contenga ciclos.
Pasos del Algoritmo de Kruskal.
El algoritmo de Kruskal se basa en el enfoque voraz o greedy. Esto significa que en cada
paso selecciona la arista de menor peso que no forme un ciclo con las aristas seleccionadas
previamente.Los pasos fundamentales del algoritmo de Kruskal son los siguientes:
1. Ordenar todas las aristas: Se ordenan todas las aristas del grafo en función
de su peso, de menor a mayor.
2. Inicializar el conjunto disjunto: Se crea un conjunto disjunto para cada
vértice. Un conjunto disjunto es una estructura que permite agrupar elementos
que pertenecen a un mismo conjunto y permite determinar si dos elementos
están en el mismo conjunto.
6. 3. Recorrer las aristas ordenadas: A medida que se recorre el conjunto de
aristas ordenadas, se va añadiendo al árbol de expansión mínima aquellas
aristas que no formen un ciclo (es decir, que conecten dos componentes
diferentes del grafo). Para ello, se utiliza el conjunto disjunto para verificar si
los vértices de la arista seleccionada están en el mismo conjunto.
4. Detenerse cuando se haya seleccionado V−1V - 1V−1 aristas: El algoritmo
se detiene cuando el número de aristas seleccionadas es igual al número de
vértices del grafo menos uno (V−1V-1V−1), ya que un árbol de expansión
mínima siempre tendrá V−1V - 1V−1 aristas.
Descripción del Algoritmo de Kruskal
El algoritmo de Kruskal se puede describir formalmente de la siguiente manera:
1. Entradas:
Un grafo G(V,E)G(V, E)G(V,E), donde VVV es el conjunto de vértices y EEE
es el conjunto de aristas, cada una con un peso asociado.
2. Inicialización:
Crear un conjunto disjunto para los vértices.
Ordenar todas las aristas en orden ascendente según su peso.
3. Proceso:
Para cada arista (u,v)(u, v)(u,v) en el grafo, si los vértices uuu y vvv
pertenecen a diferentes conjuntos disjuntos, se añade la arista al MST y se
combinan los conjuntos de uuu y vvv.
El algoritmo termina cuando se añaden V−1V-1V−1 aristas al MST.
7. 4. Salida:
El árbol de expansión mínima MST, que contiene las aristas seleccionadas.
Ejemplo del Algoritmo de Kruskal
Supongamos que tenemos el siguiente grafo ponderado:
El grafo tiene los siguientes vértices V={A,B,C,D}y las aristas E={(A,B,10),(A,C,6),
(B,D,15),(C,D,4),(B,C,7)}€
Pasos Detallados:
1. Ordenar las aristas por peso:
(C,D,4),(A,C,6),(B,C,7),(A,B,10),(B,D,15
2. Inicializar los conjuntos disjuntos:
Conjuntos iniciales: {A},{B},{C},{D}
3. Recorrer las aristas:
Consideramos la arista (C,D,4):los vértices C y D están en conjuntos
diferentes, así que se añade la arista al MST. Se combinan los conjuntos de C
y D, lo que resulta en {C,D}.
8. Consideramos la arista (A,C,6:los vértices A y C están en conjuntos diferentes,
así que se añade la arista al MST. Se combinan los conjuntos de A y C, lo que
resulta en {A,C,D}
Consideramos la arista (B,C,7): los vértices B y C están en conjuntos
diferentes, así que se añade la arista al MST. Se combinan los conjuntos de B
y C, lo que resulta en {A,B,C,D}
Las aristas (A,B,10) y (B,D,15) se descartan porque los vértices ya están en el
mismo conjunto.
4. Resultado Final: El MST es el siguiente:
Aristas seleccionadas: (C,D,4),(A,C,6),(B,C,7)
El peso total del MST es: 4+6+7=17
Complejidad del Algoritmo de Kruskal
El algoritmo de Kruskal es eficiente en términos de tiempo si se utilizan estructuras de
datos adecuadas, como los conjuntos disjuntos con compresión de caminos y unión por
rango. La complejidad temporal del algoritmo es la siguiente:
Ordenar las aristas: O(Elog
E)O(E log E)O(ElogE), donde EEE es el número
de aristas en el grafo.
Operaciones de unión y búsqueda en los conjuntos disjuntos: O(α(V)), donde
α es la función inversa de Ackermann, que crece extremadamente lentamente,
por lo que se considera prácticamente constante.
Por lo tanto, la complejidad total del algoritmo de Kruskal es O(E log E), que es
mucho más eficiente que otros algoritmos de MST como el de Prim, especialmente cuando el
grafo es disperso (es decir, tiene muchas menos aristas que vértices).
9. Por lo tanto, la complejidad total del algoritmo de Kruskal es O( E log E), que es
mucho más eficiente que otros algoritmos de MST como el de Prim, especialmente cuando el
grafo es disperso (es decir, tiene muchas menos aristas que vértices).
Aplicaciones del Algoritmo de Kruskal
El algoritmo de Kruskal tiene varias aplicaciones prácticas en diversas áreas:
Diseño de Redes de Comunicación:
Se utiliza para diseñar redes de comunicación, como redes telefónicas, de fibra óptica,
redes inalámbricas, etc., donde es necesario conectar un conjunto de puntos (estaciones) con
el menor costo posible.
Diseño de Redes de Transporte:
Se emplea en el diseño de redes de carreteras, ferrocarriles y otras infraestructuras de
transporte, para asegurar que los puntos importantes estén conectados de la manera más
económica.
Problemas de Distribución de Recursos:
El algoritmo también se aplica en problemas de distribución, donde el objetivo es
conectar varios puntos de distribución de recursos (agua, electricidad, etc.) con el menor
costo posible.
Problemas de Planificación:
En ingeniería y planificación de proyectos, el algoritmo de Kruskal se puede usar para
conectar diferentes estaciones o centros de manera eficiente y económica.
10. Computación Gráfica:
Se utiliza en algunas técnicas de computación gráfica, como el procesamiento de
imágenes o la creación de mallas en gráficos 3D.
HISTORIA.
El algoritmo de Kruskal fue propuesto por el matemático estadounidense Joseph
Kruskal en 1956. Este algoritmo es uno de los métodos más conocidos para resolver el
problema del Árbol de Expansión Mínima (MST), que busca conectar todos los vértices de
un grafo con el menor peso total de aristas posible, sin generar ciclos. En otras palabras, el
algoritmo busca crear un árbol que mantenga todas las conexiones necesarias entre los nodos
del grafo mientras minimiza el costo total de las conexiones.
Durante la década de 1950, los estudios sobre teoría de grafos y estructuras
matemáticas comenzaron a ser fundamentales en diversas ramas de la ciencia, la ingeniería y
la informática. La idea de representar redes de comunicación, rutas de transporte, o
conexiones entre estaciones de computadoras como grafos comenzó a ganar relevancia. El
problema del árbol de expansión mínima se presentó como uno de los problemas más
importantes en este campo.
Joseph Kruskal, mientras trabajaba en problemas de optimización y redes, se dio
cuenta de que existía la necesidad de encontrar una forma eficiente de conectar los nodos de
un grafo de forma que el costo total de la conexión fuera el más bajo posible, sin la
posibilidad de crear ciclos que redundaran en conexiones innecesarias.
El algoritmo de Kruskal se enmarca dentro de los llamados algoritmos voraces
(greedy), que se caracterizan por tomar decisiones óptimas en cada paso con el objetivo de
encontrar una solución global óptima. En el caso de Kruskal, el algoritmo selecciona en cada
11. paso la arista de menor peso, asegurándose de que no se forme un ciclo, hasta que se hayan
conectado todos los vértices del grafo.
Funcionamiento del Algoritmo de Kruskal.
El algoritmo de Kruskal comienza con la ordenación de las aristas del grafo en
orden ascendente según su peso. Luego, el algoritmo itera sobre estas aristas y, por cada
arista, verifica si los dos vértices que conecta ya están en el mismo conjunto o no. Si no están
conectados, es decir, pertenecen a conjuntos disjuntos, se agrega la arista al MST y se unen
los dos conjuntos. Esta verificación y unificación de conjuntos se realiza mediante una
estructura de datos llamada unión y búsqueda (union-find), que permite realizar
operaciones de forma eficiente.
Desarrollo y Optimización.
Aunque Kruskal propuso el algoritmo en 1956, los avances posteriores en las
estructuras de datos que se utilizan para implementarlo han hecho que su aplicación sea aún
más eficiente. En particular, el uso de estructuras como la compresión de caminos y la
unión por rango en la técnica de unión y búsqueda ha permitido que el algoritmo sea
escalable y eficiente, incluso en grafos grandes.
A medida que la teoría de grafos y la informática evolucionaban, el algoritmo de
Kruskal se convirtió en uno de los pilares fundamentales para resolver problemas de
optimización en redes, especialmente en aquellos problemas que involucran grafos
dispersos, donde el número de aristas es mucho menor que el número de vértices. Esto lo
hace adecuado para problemas de redes de comunicaciones, distribución de recursos y
planificación de infraestructuras.
12. Ventajas y Desventajas del Algoritmo de Kruskal.
El algoritmo de Kruskal tiene varias ventajas, entre las cuales se destacan su
simplicidad y su eficiencia en grafos dispersos. Al ordenar las aristas y procesarlas en orden,
el algoritmo es relativamente fácil de implementar y de entender. Además, dado que no
depende de la estructura del grafo (es decir, no necesita representar el grafo en una matriz de
adyacencia o lista de adyacencia), es especialmente útil para grafos dispersos.
Sin embargo, también tiene algunas desventajas. Uno de los inconvenientes es que la
ordenación de las aristas tiene una complejidad de O(E log E), lo que puede ser un cuello de
botella en grafos densos. Además, si el grafo es muy grande, el uso de estructuras de datos de
unión y búsqueda puede generar una sobrecarga de memoria.
CODIGO:
15. CONCLUSIONES.
El algoritmo de Kruskal es especialmente eficiente en grafos dispersos, es decir,
aquellos con un número reducido de aristas en comparación con los vértices. Su diseño de
seleccionar las aristas más pequeñas de manera ordenada lo hace adecuado para redes con
pocas conexiones.
La implementación del algoritmo de Kruskal es relativamente simple en comparación
con otros algoritmos de optimización de grafos. Gracias a su estructura basada en ordenar las
aristas y unir conjuntos de vértices, su código es accesible tanto para estudiantes como para
profesionales, facilitando su uso en distintos tipos de proyectos.
Kruskal es un algoritmo voraz, lo que significa que toma decisiones locales óptimas
(seleccionar siempre la arista de menor peso) con la esperanza de encontrar una solución
global óptima. Aunque este enfoque no siempre funciona en otros tipos de problemas, en el
caso del árbol de expansión mínima, asegura la mejor solución.
Al encontrar la forma más eficiente de conectar todos los vértices en un grafo, el
algoritmo de Kruskal es muy útil en la optimización de costos en redes de comunicación,
transporte y otras infraestructuras. Permite construir redes que minimizan el uso de recursos
y, por ende, los costos operativos y de implementación.
Las aplicaciones del algoritmo de Kruskal son muy variadas y abarcan campos como
telecomunicaciones, transporte, energía, planificación de redes eléctricas y sistemas de
optimización. Su utilidad se extiende a problemas que involucran la conexión de nodos con
el menor costo posible y sin redundancias, como la interconexión de estaciones de
16. telecomunicaciones, la distribución de recursos, y la creación de sistemas eficientes de
transporte.
Si bien el algoritmo es muy eficiente en grafos dispersos, su desempeño puede verse
afectado cuando se aplican a grafos muy densos, es decir, aquellos con muchas aristas. En
este caso, puede ser necesario un enfoque alternativo, como el algoritmo de Prim, que es más
adecuado para grafos densos.
Aunque el algoritmo de Kruskal ha demostrado ser una herramienta eficaz en la
optimización de grafos, su eficiencia puede mejorarse aún más mediante el uso de técnicas
avanzadas de estructuras de datos, como la compresión de caminos y la unión por rango.
Estas mejoras permiten reducir la complejidad de las operaciones de unión y búsqueda, lo
que optimiza aún más el rendimiento en grafos de gran tamaño.