org.graphstream.algorithm
Class Prim

java.lang.Object
  extended by org.graphstream.algorithm.AbstractSpanningTree
      extended by org.graphstream.algorithm.Prim
All Implemented Interfaces:
Algorithm

public class Prim
extends AbstractSpanningTree

Compute a spanning tree using the Prim algorithm.

Prim's algorithm is an algorithm which allows to find a minimal spanning tree in a weighted connected graph. More informations on Wikipedia.

Example

The following example generates a graph with the Dorogovtsev-Mendes generator and then compute a spanning-tree using the Kruskal algorithm. The generator creates random weights for edges that will be used by the Kruskal algorithm. If no weight is present, algorithm considers that all weights are set to 1. When an edge is in the spanning tree, the algorithm will set its "ui.class" attribute to "intree", else the attribute is set to "notintree". According to the css stylesheet that is defined, spanning will be displayed with thick black lines while edges not in the spanning tree will be displayed with thin gray lines.
 import org.graphstream.graph.Graph;
 import org.graphstream.graph.implementations.DefaultGraph;
 
 import org.graphstream.algorithm.Prim;
 import org.graphstream.algorithm.generator.DorogovtsevMendesGenerator;
 
 public class PrimTest {
  
        public static void main(String .. args) {
                DorogovtsevMendesGenerator gen = new DorogovtsevMendesGenerator();
                Graph graph = new DefaultGraph("Prim Test");
 
        String css = "edge .notintree {size:1px;fill-color:gray;} " +
                                 "edge .intree {size:3px;fill-color:black;}";
  
                graph.addAttribute("ui.stylesheet", css);
                graph.display();
 
                gen.addEdgeAttribute("weight");
                gen.setEdgeAttributesRange(1, 100);
                gen.addSink(graph);
                gen.begin();
                for (int i = 0; i < 100 && gen.nextEvents(); i++)
                        ;
                gen.end();
 
                Prim prim = new Prim("ui.class", "intree", "notintree");
 
                prim.init(g);
                prim.compute();
  }
 }
 

See Also:
AbstractSpanningTree
Computational Complexity :
0(m+m2log(m)), where m = |E|
Scientific Reference :
R. C. Prim: Shortest connection networks and some generalizations. In: Bell System Technical Journal, 36 (1957), pp. 1389–1401

Constructor Summary
Prim()
          Create a new Prim's algorithm.
Prim(String flagAttribute, Object flagOn, Object flagOff)
          Create a new Prim's algorithm.
Prim(String weightAttribute, String flagAttribute)
          Create a new Prim's algorithm.
Prim(String weightAttribute, String flagAttribute, Object flagOn, Object flagOff)
          Create a new Prim's algorithm.
 
Method Summary
 String getWeightAttribute()
          Get key attribute used to compare edges.
 void setWeightAttribute(String newWeightAttribute)
          Set the weight attribute.
 
Methods inherited from class org.graphstream.algorithm.AbstractSpanningTree
compute, getFlagAttribute, getFlagOff, getFlagOn, init, setFlagAttribute, setFlagOff, setFlagOn
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Prim

public Prim()
Create a new Prim's algorithm.


Prim

public Prim(String weightAttribute,
            String flagAttribute)
Create a new Prim's algorithm.

Parameters:
weightAttribute - attribute used to compare edges
flagAttribute - attribute used to set if an edge is in the spanning tree

Prim

public Prim(String flagAttribute,
            Object flagOn,
            Object flagOff)
Create a new Prim's algorithm.

Parameters:
flagAttribute - attribute used to set if an edge is in the spanning tree
flagOn - value of the flagAttribute if edge is in the spanning tree
flagOff - value of the flagAttribute if edge is not in the spanning tree

Prim

public Prim(String weightAttribute,
            String flagAttribute,
            Object flagOn,
            Object flagOff)
Create a new Prim's algorithm.

Parameters:
weightAttribute - attribute used to compare edges
flagAttribute - attribute used to set if an edge is in the spanning tree
flagOn - value of the flagAttribute if edge is in the spanning tree
flagOff - value of the flagAttribute if edge is not in the spanning tree
Method Detail

getWeightAttribute

public String getWeightAttribute()
Get key attribute used to compare edges.

Returns:
weight attribute

setWeightAttribute

public void setWeightAttribute(String newWeightAttribute)
Set the weight attribute.

Parameters:
newWeightAttribute - new attribute used


Copyright © 2011. All Rights Reserved.