programación 3: algoritmo de prim y de kruskal

Post on 14-Apr-2017

301 Views

Category:

Engineering

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

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

Á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

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

6

57

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

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

9

6

15

8

57

11

98

Ejemplo de aplicación

A

D

B

C

E

FG

7

5

6

57

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

top related