+++ /dev/null
-/*
- * Copyright (c) 2003, the JUNG Project and the Regents of the University
- * of California
- * All rights reserved.
- *
- * This software is open-source under the BSD license; see either
- * "license.txt" or
- * http://jung.sourceforge.net/license.txt for a description.
- */
-/*
- * Created on Feb 3, 2004
- */
-package edu.uci.ics.jung.algorithms.blockmodel;
-
-import java.util.*;
-
-import edu.uci.ics.jung.graph.Graph;
-
-
-/**
- * Maintains information about a vertex partition of a graph.
- * This can be built from a map from vertices to vertex sets
- * or from a collection of (disjoint) vertex sets,
- * such as those created by various clustering methods.
- */
-public class VertexPartition<V,E>
-{
- private Map<V,Set<V>> vertex_partition_map;
- private Collection<Set<V>> vertex_sets;
- private Graph<V,E> graph;
-
- /**
- * Creates an instance based on the specified graph and mapping from vertices
- * to vertex sets, and generates a set of partitions based on this mapping.
- * @param g the graph over which the vertex partition is defined
- * @param partition_map the mapping from vertices to vertex sets (partitions)
- */
- public VertexPartition(Graph<V,E> g, Map<V, Set<V>> partition_map)
- {
- this.vertex_partition_map = Collections.unmodifiableMap(partition_map);
- this.graph = g;
- }
-
- /**
- * Creates an instance based on the specified graph, vertex-set mapping,
- * and set of disjoint vertex sets. The vertex-set mapping and vertex
- * partitions must be consistent; that is, the mapping must reflect the
- * division of vertices into partitions, and each vertex must appear in
- * exactly one partition.
- * @param g the graph over which the vertex partition is defined
- * @param partition_map the mapping from vertices to vertex sets (partitions)
- * @param vertex_sets the set of disjoint vertex sets
- */
- public VertexPartition(Graph<V,E> g, Map<V, Set<V>> partition_map,
- Collection<Set<V>> vertex_sets)
- {
- this.vertex_partition_map = Collections.unmodifiableMap(partition_map);
- this.vertex_sets = vertex_sets;
- this.graph = g;
- }
-
- /**
- * Creates an instance based on the specified graph and set of disjoint vertex sets,
- * and generates a vertex-to-partition map based on these sets.
- * @param g the graph over which the vertex partition is defined
- * @param vertex_sets the set of disjoint vertex sets
- */
- public VertexPartition(Graph<V,E> g, Collection<Set<V>> vertex_sets)
- {
- this.vertex_sets = vertex_sets;
- this.graph = g;
- }
-
- /**
- * Returns the graph on which the partition is defined.
- * @return the graph on which the partition is defined
- */
- public Graph<V,E> getGraph()
- {
- return graph;
- }
-
- /**
- * Returns a map from each vertex in the input graph to its partition.
- * This map is generated if it does not already exist.
- * @return a map from each vertex in the input graph to a vertex set
- */
- public Map<V,Set<V>> getVertexToPartitionMap()
- {
- if (vertex_partition_map == null)
- {
- this.vertex_partition_map = new HashMap<V, Set<V>>();
- for (Set<V> set : this.vertex_sets)
- for (V v : set)
- this.vertex_partition_map.put(v, set);
- }
- return vertex_partition_map;
- }
-
- /**
- * Returns a collection of vertex sets, where each vertex in the
- * input graph is in exactly one set.
- * This collection is generated based on the vertex-to-partition map
- * if it does not already exist.
- * @return a collection of vertex sets such that each vertex in the
- * instance's graph is in exactly one set
- */
- public Collection<Set<V>> getVertexPartitions()
- {
- if (vertex_sets == null)
- {
- this.vertex_sets = new HashSet<Set<V>>();
- this.vertex_sets.addAll(vertex_partition_map.values());
- }
- return vertex_sets;
- }
-
- /**
- * Returns the number of partitions.
- */
- public int numPartitions()
- {
- return vertex_sets.size();
- }
-
- @Override
- public String toString()
- {
- return "Partitions: " + vertex_partition_map;
- }
-}