Programación 3: algoritmo de Prim y de Kruskal

18,156 views 84 slides Oct 23, 2016
Slide 1
Slide 1 of 84
Slide 1
1
Slide 2
2
Slide 3
3
Slide 4
4
Slide 5
5
Slide 6
6
Slide 7
7
Slide 8
8
Slide 9
9
Slide 10
10
Slide 11
11
Slide 12
12
Slide 13
13
Slide 14
14
Slide 15
15
Slide 16
16
Slide 17
17
Slide 18
18
Slide 19
19
Slide 20
20
Slide 21
21
Slide 22
22
Slide 23
23
Slide 24
24
Slide 25
25
Slide 26
26
Slide 27
27
Slide 28
28
Slide 29
29
Slide 30
30
Slide 31
31
Slide 32
32
Slide 33
33
Slide 34
34
Slide 35
35
Slide 36
36
Slide 37
37
Slide 38
38
Slide 39
39
Slide 40
40
Slide 41
41
Slide 42
42
Slide 43
43
Slide 44
44
Slide 45
45
Slide 46
46
Slide 47
47
Slide 48
48
Slide 49
49
Slide 50
50
Slide 51
51
Slide 52
52
Slide 53
53
Slide 54
54
Slide 55
55
Slide 56
56
Slide 57
57
Slide 58
58
Slide 59
59
Slide 60
60
Slide 61
61
Slide 62
62
Slide 63
63
Slide 64
64
Slide 65
65
Slide 66
66
Slide 67
67
Slide 68
68
Slide 69
69
Slide 70
70
Slide 71
71
Slide 72
72
Slide 73
73
Slide 74
74
Slide 75
75
Slide 76
76
Slide 77
77
Slide 78
78
Slide 79
79
Slide 80
80
Slide 81
81
Slide 82
82
Slide 83
83
Slide 84
84

About This Presentation

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 ti...


Slide Content

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

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

Introducción

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.

Ejemplo de Grafo Ejemplo de grafo que representa las relaciones de amistad entre un grupo de personas de la red social Facebook.

Árbol R ecubridor 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.

Á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.

Algoritmo de Prim

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.

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.

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 6 5 7 9 Coste = 39

Implementación de Algoritmo de Prim Para la Implementación se utilizaron dos paquetes: Paquete Grafo Paquete Algoritmo_Prim

Matriz de Pesos

Clase V értice

Clase GrafMatPeso

Clase Algoritmo_Prim

Clase Main_Prim

Ejecuci ó n

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) .

Algoritmo de Kruskal

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.

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.

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 9 6 15 8 5 7 11 9 8

Ejemplo de aplicación A D B C E F G 7 5 6 5 7 9 Coste = 39

Implementación de Algoritmo de Kruskal Para la Implementación se utilizaron dos paquetes: Paquete Grafo Paquete Algoritmo_Kruskal

Matriz de Pesos

Clase AlgoritmoKruskal

Clase Main_Kruskal

Ejecuci ó n

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 ).

Conclusiones

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.

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