Class Centroid

java.lang.Object
org.graphstream.algorithm.Centroid
All Implemented Interfaces:
Algorithm

public class Centroid
extends Object
implements Algorithm
Compute the centroid of a connected graph.

In a graph G, if d(u,v) is the shortest length between two nodes u and v (ie the number of edges of the shortest path) let m(u) be the sum of d(u,v) for all nodes v of G. Centroid of a graph G is a subgraph induced by vertices u with minimum m(u).

Requirements

This algorithm needs that APSP algorithm has been computed before its own computation.

Example

 import java.io.StringReader;
 import java.io.IOException;
 
 import org.graphstream.algorithm.APSP;
 import org.graphstream.algorithm.Centroid;
 import org.graphstream.graph.Graph;
 import org.graphstream.graph.Node;
 import org.graphstream.graph.implementations.DefaultGraph;
 import org.graphstream.stream.file.FileSourceDGS;
 
 //                     +--- E
 // A --- B --- C -- D -|--- F
 //                     +--- G
 
 public class CentroidTest {
        static String my_graph = "DGS004\n" + "my 0 0\n" + "an A \n" + "an B \n"
                        + "an C \n" + "an D \n" + "an E \n" + "an F \n" + "an G \n"
                        + "ae AB A B \n" + "ae BC B C \n" + "ae CD C D \n" + "ae DE D E \n"
                        + "ae DF D F \n" + "ae DG D G \n";
 
        public static void main(String[] args) throws IOException {
                Graph graph = new DefaultGraph("Centroid Test");
                StringReader reader = new StringReader(my_graph);
 
                FileSourceDGS source = new FileSourceDGS();
                source.addSink(graph);
                source.readAll(reader);
 
                APSP apsp = new APSP();
                apsp.init(graph);
                apsp.compute();
 
                Centroid centroid = new Centroid();
                centroid.init(graph);
                centroid.compute();
 
                for (Node n : graph.getEachNode()) {
                        Boolean in = n.getAttribute("centroid");
 
                        System.out.printf("%s is%s in the centroid.\n", n.getId(), in ? ""
                                        : " not");
                }
 
                // Output will be :
                //
                // A is not in the centroid
                // B is not in the centroid
                // C is not in the centroid
                // D is in the centroid
                // E is not in the centroid
                // F is not in the centroid
                // G is not in the centroid
        }
 }
 
See Also:
APSP.APSPInfo
Computational Complexity :
O(n2)
Scientific Reference :
F. Harary, Graph Theory. Westview Press, Oct. 1969. [Online]. Available: http://www.amazon.com/exec/obidos/ redirect?tag=citeulike07-20\&path=ASIN/ 0201410338
  • Constructor Details

    • Centroid

      public Centroid()
      Build a new centroid algorithm with default parameters.
    • Centroid

      public Centroid​(String centroidAttribute)
      Build a new centroid algorithm, specifying the attribute name of the computation result
      Parameters:
      centroidAttribute - attribute name of the computation result.
    • Centroid

      public Centroid​(String centroidAttribute, Object isInCentroid, Object isNotInCentroid)
      Build a new centroid as in Centroid(String) but specifying values of centroid membership.
      Parameters:
      centroidAttribute - attribute name of the computation result.
      isInCentroid - the value of elements centroid attribute when this element is in the centroid.
      isNotInCentroid - the value of elements centroid attribute when this element is not in the centroid.
    • Centroid

      public Centroid​(String centroidAttribute, Object isInCentroid, Object isNotInCentroid, String apspInfoAttribute)
      Build a new centroid algorithm as in Centroid(String, Object, Object) but specifying the name of the attribute where the APSP informations are stored.
      Parameters:
      centroidAttribute - attribute name of the computation result.
      isInCentroid - the value of elements centroid attribute when this element is in the centroid.
      isNotInCentroid - the value of elements centroid attribute when this element is not in the centroid.
      apspInfoAttribute - the name of the attribute where the APSP informations are stored
  • Method Details

    • init

      public void init​(org.graphstream.graph.Graph graph)
      Description copied from interface: Algorithm
      Initialization of the algorithm. This method has to be called before the Algorithm.compute() method to initialize or reset the algorithm according to the new given graph.
      Specified by:
      init in interface Algorithm
      Parameters:
      graph - The graph this algorithm is using.
    • compute

      public void compute()
      Description copied from interface: Algorithm
      Run the algorithm. The Algorithm.init(Graph) method has to be called before computing.
      Specified by:
      compute in interface Algorithm
      See Also:
      Algorithm.init(Graph)
    • getAPSPInfoAttribute

      public String getAPSPInfoAttribute()
      Get the APSP info attribute name.
      Returns:
      the name of the attribute where the APSP informations are stored.
    • setAPSPInfoAttribute

      public void setAPSPInfoAttribute​(String attribute)
      Set the APSP info attribute name.
      Parameters:
      attribute - the name of the attribute where the APSP informations are stored.
    • getIsInCentroidValue

      public Object getIsInCentroidValue()
      Get the value of the centroid attribute when element is in the centroid. Default value is Boolean.TRUE.
      Returns:
      the value of elements centroid attribute when this element is in the centroid.
    • setIsInCentroidValue

      public void setIsInCentroidValue​(Object value)
      Set the value of the centroid attribute when element is in the centroid. On computation, this value is used to set the centroid attribute.
      Parameters:
      value - the value of elements centroid attribute when this element is in the centroid.
    • getIsNotInCentroidValue

      public Object getIsNotInCentroidValue()
      Get the value of the centroid attribute when element is not in the centroid. Default value is Boolean.FALSE.
      Returns:
      the value of elements centroid attribute when this element is not in the centroid.
    • setIsNotInCentroidValue

      public void setIsNotInCentroidValue​(Object value)
      Set the value of the centroid attribute when element is not in the centroid. On computation, this value is used to set the centroid attribute.
      Parameters:
      value - the value of elements centroid attribute when this element is not in the centroid.
    • getCentroidAttribute

      public String getCentroidAttribute()
      Get the name of the attribute where computation result is stored. Value of this attribute can be getIsInCentroidValue() if the element is in the centroid, getIsNotInCentroidValue() else.
      Returns:
      the centroid attribute name.
    • setCentroidAttribute

      public void setCentroidAttribute​(String centroidAttribute)
      Set the name of the attribute where computation result is stored.
      Parameters:
      centroidAttribute - the name of the element attribute where computation result is stored.
    • defaultResult

      public String defaultResult()