Package org.graphstream.algorithm
Class Prim
java.lang.Object
org.graphstream.algorithm.AbstractSpanningTree
org.graphstream.algorithm.Kruskal
org.graphstream.algorithm.Prim
- All Implemented Interfaces:
Algorithm
,SpanningTree
public class Prim extends Kruskal
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 Prim algorithm. The generator creates random weights for edges that will be used by the Prim 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(graph); prim.compute(); } }
- See Also:
AbstractSpanningTree
- Computational Complexity :
- 0(m + n log n), where m is the number of edges and n is the number of nodes in the graph
- Scientific Reference :
- R. C. Prim: Shortest connection networks and some generalizations. In: Bell System Technical Journal, 36 (1957), pp. 1389–1401
-
Field Summary
-
Constructor Summary
Constructors Constructor Description 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
Modifier and Type Method Description String
defaultResult()
Methods inherited from class org.graphstream.algorithm.Kruskal
clear, getTreeEdgesStream, getTreeWeight, getWeightAttribute, setWeightAttribute
Methods inherited from class org.graphstream.algorithm.AbstractSpanningTree
compute, getFlagAttribute, getFlagOff, getFlagOn, getTreeEdges, init, setFlagAttribute, setFlagOff, setFlagOn
-
Constructor Details
-
Prim
public Prim()Create a new Prim's algorithm. Uses the default weight attribute and does not tag the edges. -
Prim
Create a new Prim's algorithm. The value of the flag attribute istrue
for the tree edges and false for the non-tree edges.- Parameters:
weightAttribute
- attribute used to compare edgesflagAttribute
- attribute used to set if an edge is in the spanning tree
-
Prim
Create a new Prim's algorithm. Uses the default weight attribute.- Parameters:
flagAttribute
- attribute used to set if an edge is in the spanning treeflagOn
- value of the flagAttribute if edge is in the spanning treeflagOff
- value of the flagAttribute if edge is not in the spanning tree
-
Prim
Create a new Prim's algorithm.- Parameters:
weightAttribute
- attribute used to compare edgesflagAttribute
- attribute used to set if an edge is in the spanning treeflagOn
- value of the flagAttribute if edge is in the spanning treeflagOff
- value of the flagAttribute if edge is not in the spanning tree
-
-
Method Details
-
defaultResult
- Overrides:
defaultResult
in classKruskal
-