Algoritmos computacionales

1,547 views

Published on

  • Be the first to comment

  • Be the first to like this

Algoritmos computacionales

  1. 1. Algoritmos Computacionales<br />Proyecto #5<br />
  2. 2. Algoritmo de Prim<br />El algoritmo de Prim es un algoritmo perteneciente a la teoría de los grafos para encontrar un árbol recubridor mínimo en un grafo conexo, no dirigido y cuyas aristas están etiquetadas.<br />
  3. 3. Arbol recubridor minimo<br />un árbol recubridor mínimo de un grafo es un subgrafo que tiene que ser un árbol y contener todos los vértices del grafo inicial. Cada arista tiene asignado un peso proporcional entre ellos, que es un número representativo de algún objeto, distancia, etc.. , y se usa para asignar un peso total al árbol recubridor mínimo computando la suma de todos los pesos de las aristas del árbol en cuestión. <br />
  4. 4. Árbol recubridor mínimo <br />
  5. 5. En otras palabras, el algoritmo encuentra un subconjunto de aristas que forman un árbol con todos los vértices, donde el peso total de todas las aristas en el árbol es el mínimo posible.<br />La complejidad asintótica de este algoritmo es O(n3).<br />
  6. 6. Código en JAVA publicclassAlgorithms{publicstaticGraphPrimsAlgorithm (Graph g, int s){int n = g.getNumberOfVertices ();Entry[] table = new Entry [n];for (int v = 0; v < n; ++v)table [v] = new Entry ();table [s].distance = 0;PriorityQueuequeue =new BinaryHeap (g.getNumberOfEdges());queue.enqueue (new Association (new Int (0), g.getVertex (s)));while (!queue.isEmpty ()){Associationassoc = (Association) queue.dequeueMin();Vertex v0 = (Vertex) assoc.getValue ();int n0 = v0.getNumber ();if (!table [n0].known)<br />
  7. 7. {table [n0].known = true;Enumeration p = v0.getEmanatingEdges ();while (p.hasMoreElements ()){Edgeedge = (Edge) p.nextElement ();Vertex v1 = edge.getMate (v0);int n1 = v1.getNumber ();Intwt = (Int) edge.getWeight ();int d = wt.intValue ();if (!table[n1].known && table[n1].distance>d){ table [n1].distance = d;table [n1].predecessor = n0;queue.enqueue (new Association (new Int (d), v1));}}}}Graphresult = new GraphAsLists (n);for (int v = 0; v < n; ++v)result.addVertex (v);for (int v = 0; v < n; ++v)if (v != s)result.addEdge (v, table [v].predecessor);returnresult;}}<br />
  8. 8. Ejemplo<br />

×