84

Click here to load reader

Programación 3: algoritmo de Prim y de Kruskal

Embed Size (px)

Citation preview

Page 1: Programación 3: algoritmo de Prim y de Kruskal

UNIVERSIDAD DE CUENCA

Autor: Edisson Fernando Sigua LojaTema: Algoritmo de Prim y de Kruskal

Materia: Programación 3: Estructura de Archivos.Docente: Ing. Ángel Vásquez

Page 2: Programación 3: algoritmo de Prim y de Kruskal

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

Page 3: Programación 3: algoritmo de Prim y de Kruskal

Introducción

Page 4: Programación 3: algoritmo de Prim y de Kruskal

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.

Page 5: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de Grafo

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

Page 6: Programación 3: algoritmo de Prim y de Kruskal

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

Page 7: Programación 3: algoritmo de Prim y de Kruskal

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

Page 8: Programación 3: algoritmo de Prim y de Kruskal

Algoritmo de Prim

Page 9: Programación 3: algoritmo de Prim y de Kruskal

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.

Page 10: Programación 3: algoritmo de Prim y de Kruskal

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.

Page 11: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 12: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 13: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 14: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 15: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 16: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 17: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 18: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 19: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 20: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 21: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 22: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 23: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 24: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 25: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

6

57

9

Coste = 39

Page 26: Programación 3: algoritmo de Prim y de Kruskal

Implementación de Algoritmo de Prim

Para la Implementación se utilizaron dos paquetes:• Paquete Grafo

• Paquete Algoritmo_Prim

Page 27: Programación 3: algoritmo de Prim y de Kruskal

Matriz de Pesos

Page 28: Programación 3: algoritmo de Prim y de Kruskal
Page 29: Programación 3: algoritmo de Prim y de Kruskal

Clase Vértice

Page 30: Programación 3: algoritmo de Prim y de Kruskal
Page 31: Programación 3: algoritmo de Prim y de Kruskal

Clase GrafMatPeso

Page 32: Programación 3: algoritmo de Prim y de Kruskal
Page 33: Programación 3: algoritmo de Prim y de Kruskal
Page 34: Programación 3: algoritmo de Prim y de Kruskal
Page 35: Programación 3: algoritmo de Prim y de Kruskal

Clase Algoritmo_Prim

Page 36: Programación 3: algoritmo de Prim y de Kruskal
Page 37: Programación 3: algoritmo de Prim y de Kruskal
Page 38: Programación 3: algoritmo de Prim y de Kruskal

Clase Main_Prim

Page 39: Programación 3: algoritmo de Prim y de Kruskal
Page 40: Programación 3: algoritmo de Prim y de Kruskal
Page 41: Programación 3: algoritmo de Prim y de Kruskal
Page 42: Programación 3: algoritmo de Prim y de Kruskal
Page 43: Programación 3: algoritmo de Prim y de Kruskal

Ejecución

Page 44: Programación 3: algoritmo de Prim y de Kruskal
Page 45: Programación 3: algoritmo de Prim y de Kruskal

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

Page 46: Programación 3: algoritmo de Prim y de Kruskal

Algoritmo de Kruskal

Page 47: Programación 3: algoritmo de Prim y 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.

Page 48: Programación 3: algoritmo de Prim y de Kruskal

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.

Page 49: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 50: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 51: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 52: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 53: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 54: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 55: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 56: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 57: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 58: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 59: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 60: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 61: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 62: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 63: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 64: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 65: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Page 66: Programación 3: algoritmo de Prim y de Kruskal

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

6

57

9

Coste = 39

Page 67: Programación 3: algoritmo de Prim y de Kruskal

Implementación de Algoritmo de Kruskal

Para la Implementación se utilizaron dos paquetes:• Paquete Grafo

• Paquete Algoritmo_Kruskal

Page 68: Programación 3: algoritmo de Prim y de Kruskal

Matriz de Pesos

Page 69: Programación 3: algoritmo de Prim y de Kruskal
Page 70: Programación 3: algoritmo de Prim y de Kruskal

Clase AlgoritmoKruskal

Page 71: Programación 3: algoritmo de Prim y de Kruskal
Page 72: Programación 3: algoritmo de Prim y de Kruskal
Page 73: Programación 3: algoritmo de Prim y de Kruskal
Page 74: Programación 3: algoritmo de Prim y de Kruskal

Clase Main_Kruskal

Page 75: Programación 3: algoritmo de Prim y de Kruskal
Page 76: Programación 3: algoritmo de Prim y de Kruskal
Page 77: Programación 3: algoritmo de Prim y de Kruskal
Page 78: Programación 3: algoritmo de Prim y de Kruskal
Page 79: Programación 3: algoritmo de Prim y de Kruskal

Ejecución

Page 80: Programación 3: algoritmo de Prim y de Kruskal
Page 81: Programación 3: algoritmo de Prim y de Kruskal

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

Page 82: Programación 3: algoritmo de Prim y de Kruskal

Conclusiones

Page 83: Programación 3: algoritmo de Prim y de Kruskal

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.

Page 84: Programación 3: algoritmo de Prim y de Kruskal

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