Algoritmos computacionales

  • 1,251 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
1,251
On Slideshare
0
From Embeds
0
Number of Embeds
6

Actions

Shares
Downloads
12
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Algoritmos Computacionales
    Proyecto #5
  • 2. Algoritmo de Prim
    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.
  • 3. Arbol recubridor minimo
    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.
  • 4. Árbol recubridor mínimo
  • 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.
    La complejidad asintótica de este algoritmo es O(n3).
  • 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)
  • 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;}}
  • 8. Ejemplo