Esta presentación le pertenece a Edisson Fernando Sigua Loja
En la vida real existen muchos problemas relacionados a conexiones entre dos o más entes (ejemplo: comunicación telefónica, circuitos eléctricos, comunicación entre calles, etc.). Este tipo de problemas se pueden modelar usando un tipo de representación simbólica llamada grafos.
¿Qué son los grafos?
Los grafos son un conjunto de nodos y aristas conectadas entre sí.
En el ámbito de las ciencias de la computación es un tipo abstracto de datos (TAD), que consiste en un conjunto de nodos (también llamados vértices) y un conjunto de arcos (aristas) que establecen relaciones entre los nodos.
1. UNIVERSIDAD DE CUENCA
Autor: Edisson Fernando Sigua Loja
Tema: Algoritmo de Prim y de Kruskal
Materia: Programación 3: Estructura de Archivos.
Docente: Ing. Ángel Vásquez
2. Contenido
• Intoducción
• Grafo
• Ejemplo de Grafo
• Árbol Recubridor Mínimo
• Algoritmo de Prim
• Implementación de Algoritmo de Prim
• Algoritmo de Kruskal
• Implementación de Algoritmo de Kruskal
• Conclusiones
• Bibliografía
4. Grafo
En la vida real existen muchos problemas relacionados a conexiones entre
dos o más entes (ejemplo: comunicación telefónica, circuitos eléctricos,
comunicación entre calles, etc.). Este tipo de problemas se pueden
modelar usando un tipo de representación simbólica llamada grafos.
¿Qué son los grafos?
Los grafos son un conjunto de nodos y aristas conectadas entre sí.
En el ámbito de las ciencias de la computación es un tipo abstracto de
datos (TAD), que consiste en un conjunto de nodos (también llamados
vértices) y un conjunto de arcos (aristas) que establecen relaciones entre
los nodos.
5. Ejemplo de Grafo
• Ejemplo de grafo que representa las relaciones de amistad entre
un grupo de personas de la red social Facebook.
6. Árbol Recubridor Mínimo
• Una propiedad que interesa conocer de los grafos es si para todo
par de vértices hay un camino que los una. Si el grafo cumple con
esta propiedad podemos decir que el grafo es conexo.
• ¿Qué es un árbol?
Un árbol, en una red, es un subconjunto G’ del grafo G que está
conectado y sin ciclos. Los árboles tienen dos propiedades
importantes:
1. Todo árbol de n vértices contiene exactamente n-1 aristas.
2. Si se añade una arista a un árbol, se obtiene un ciclo.
7. Árbol Recubridor Mínimo
• El problema del árbol de expansión mínimo ó árbol de expansión
de coste mínimo consiste en buscar un árbol que abarque todos los
vértices del grafo, con suma de pesos de aristas mínimo.
• Todo grafo tiene un bosque recubridor mínimo.
9. Algoritmo de Prim
• Diseñado por primera vez en 1930 por el matemático Vojtech
Jarnik y luego de manera independiente por el científico Robert C.
Prim en 1957 y redescubierto por Dijkstra en 1959. Debido a esto a
este algoritmo se lo conoce también como algoritmo DJP o
algoritmo de Jarnik.
• El algoritmo de Prim encuentra un árbol de expansión de un grafo,
cuyas aristas sumadas nos den el peso mínimo.
10. Algoritmo de Prim
Ejecución de algoritmo
• Se marca un vértice cualquiera como vértice de partida.
• Seleccionamos una arista de menor valor del vértice marcado
previamente y marcamos el otro nodo con el que se conecta la
arista.
• Repetimos el paso anterior siempre que la arista elegida enlace un
nodo marcado con otro que no lo esté.
• El proceso termina cuando tenemos todos los vértices del grafo
marcados.
45. Complejidad
•El algoritmo de Prim tiene una
complejidad de O(n^2). Sin embargo
si dicho algoritmo se implementa
con montículos, el tiempo requerido
por este algoritmo es O(a log n).
47. Algoritmo de Kruskal
• Fue escrito por Joshep Kruskal y publicado en
1956 cuando trabajaba de investigador en Math
Center.
• El objetivo del algoritmo de kruskal es construir
un árbol formado por aristas sucesivamente
seleccionadas de mínimo peso a partir de un
grafo con pesos en las aristas.
48. Algoritmo de Kruskal
Ejecución del algoritmo
• Seleccionar la arista de menor costo.
• Si la arista seleccionada conecta dos vértices
distintos, entonces marcamos la arista
verificando que no se formen ciclos.
• Continuamos el proceso hasta marcar todas los
vértices.
81. Complejidad
•El algoritmo de Kruskal requiere un tiempo
que está en O(a log n). Para un grafo denso,
“a” tiende a n(n-1)/2, por lo que el
algoritmo requiere un tiempo que está
en O(n^2 log n). En un grafo disperso, “a”
tiende a n-1, por lo que el algoritmo de
Kruskal requiere un tiempo que está en O(n
log n).
83. Conclusiones
Se puede concluir que:
• El algoritmo de Prim y Kruskal tienen una gran
importancia pues nos ayudan a modelar y resolver
problemas de la vida real.
• El algoritmo de Kruskal es mas eficiente que el de
Prim.
• Ambos algoritmos hacen uso de la matriz de pesos
y adyacencia para poder calcular el árbol mínimo.
84. Bibliografía
• Yojanes, A. L., & Zohonero, M. I. (2008). Estructuras de
datos en Java. Madrid, ES: McGraw-Hill España.
Retrieved from http://www.ebrary.com
• Moreno, E., & Ramírez, H. (2009). Grafos: fundamentos y
algoritmos. Santiago de Chile, CL: Editorial ebooks
Patagonia - J.C. Sáez Editor. Retrieved from
http://www.ebrary.com