Package edu.uci.ics.jung.graph
Class SetHypergraph<V,H>
- java.lang.Object
-
- edu.uci.ics.jung.graph.SetHypergraph<V,H>
-
- All Implemented Interfaces:
Hypergraph<V,H>,MultiGraph<V,H>,java.io.Serializable
public class SetHypergraph<V,H> extends java.lang.Object implements Hypergraph<V,H>, MultiGraph<V,H>, java.io.Serializable
An implementation ofHypergraphthat is suitable for sparse graphs and permits parallel edges.- See Also:
- Serialized Form
-
-
Constructor Summary
Constructors Constructor Description SetHypergraph()Creates aSetHypergraphand initializes the internal data structures.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanaddEdge(H hyperedge, java.util.Collection<? extends V> to_attach)Addshyperedgeto this graph and connects them to the vertex collectionto_attach.booleanaddEdge(H hyperedge, java.util.Collection<? extends V> to_attach, EdgeType edge_type)Addsedgeto this graph with typeedge_type.booleanaddVertex(V vertex)Addsvertexto this graph.booleancontainsEdge(H edge)Returns true if this graph's edge collection containsedge.booleancontainsVertex(V vertex)Returns true if this graph's vertex collection containsvertex.intdegree(V vertex)Returns the number of edges incident tovertex.HfindEdge(V v1, V v2)Returns an edge that connects this vertex tov.java.util.Collection<H>findEdgeSet(V v1, V v2)Returns all edges that connects this vertex tov.EdgeTypegetDefaultEdgeType()Returns the default edge type for this graph.VgetDest(H directed_edge)Ifdirected_edgeis a directed edge in this graph, returns the destination; otherwise returnsnull.intgetEdgeCount()Returns the number of edges in this graph.intgetEdgeCount(EdgeType edge_type)Returns the number of edges of typeedge_typein this graph.java.util.Collection<H>getEdges()Returns a view of all edges in this graph.java.util.Collection<H>getEdges(EdgeType edge_type)Returns the collection of edges in this graph which are of typeedge_type.EdgeTypegetEdgeType(H edge)Returns the edge type ofedgein this graph.static <V,H>
com.google.common.base.Supplier<Hypergraph<V,H>>getFactory()Returns aFactorywhich creates instances of this class.intgetIncidentCount(H edge)Returns the number of vertices that are incident toedge.java.util.Collection<H>getIncidentEdges(V vertex)Returns the collection of edges in this graph which are connected tovertex.java.util.Collection<V>getIncidentVertices(H edge)Returns the collection of vertices in this graph which are connected toedge.java.util.Collection<H>getInEdges(V vertex)Returns aCollectionview of the incoming edges incident tovertexin this graph.intgetNeighborCount(V vertex)Returns the number of vertices that are adjacent tovertex(that is, the number of vertices that are incident to edges invertex's incident edge set).java.util.Collection<V>getNeighbors(V vertex)Returns the collection of vertices which are connected tovertexvia any edges in this graph.java.util.Collection<H>getOutEdges(V vertex)Returns aCollectionview of the outgoing edges incident tovertexin this graph.java.util.Collection<V>getPredecessors(V vertex)Returns aCollectionview of the predecessors ofvertexin this graph.VgetSource(H directed_edge)Ifdirected_edgeis a directed edge in this graph, returns the source; otherwise returnsnull.java.util.Collection<V>getSuccessors(V vertex)Returns aCollectionview of the successors ofvertexin this graph.intgetVertexCount()Returns the number of vertices in this graph.java.util.Collection<V>getVertices()Returns a view of all vertices in this graph.intinDegree(V vertex)Returns the number of incoming edges incident tovertex.booleanisIncident(V vertex, H edge)Returnstrueifvertexandedgeare incident to each other.booleanisNeighbor(V v1, V v2)Returnstrueifv1andv2share an incident edge.intoutDegree(V vertex)Returns the number of outgoing edges incident tovertex.booleanremoveEdge(H hyperedge)Removesedgefrom this graph.booleanremoveVertex(V vertex)Removesvertexfrom this graph.
-
-
-
Method Detail
-
getFactory
public static <V,H> com.google.common.base.Supplier<Hypergraph<V,H>> getFactory()
Returns aFactorywhich creates instances of this class.- Type Parameters:
V- vertex type of the hypergraph to be createdH- edge type of the hypergraph to be created- Returns:
- a
Factorywhich creates instances of this class
-
addEdge
public boolean addEdge(H hyperedge, java.util.Collection<? extends V> to_attach)
Addshyperedgeto this graph and connects them to the vertex collectionto_attach. Any vertices into_attachthat appear more than once will only appear once in the incident vertex collection forhyperedge, that is, duplicates will be ignored.- Specified by:
addEdgein interfaceHypergraph<V,H>- Parameters:
hyperedge- the edge to addto_attach- the vertices to which the edge will be connected- Returns:
trueif the add is successful, andfalseotherwise- See Also:
Hypergraph.addEdge(Object, Collection)
-
addEdge
public boolean addEdge(H hyperedge, java.util.Collection<? extends V> to_attach, EdgeType edge_type)
Description copied from interface:HypergraphAddsedgeto this graph with typeedge_type. Fails under the following circumstances:edgeis already an element of the graph- either
edgeorverticesisnull verticeshas the wrong number of vertices for the graph typeverticesare already connected by another edge in this graph, and this graph does not accept parallel edgesedge_typeis not legal for this graph
- Specified by:
addEdgein interfaceHypergraph<V,H>- Parameters:
hyperedge- edge to add to this graphto_attach- vertices which are to be connected by this edgeedge_type- type of edge to add- Returns:
trueif the add is successful, andfalseotherwise- See Also:
Hypergraph.addEdge(Object, Collection, EdgeType)
-
getEdgeType
public EdgeType getEdgeType(H edge)
Description copied from interface:HypergraphReturns the edge type ofedgein this graph.- Specified by:
getEdgeTypein interfaceHypergraph<V,H>- Parameters:
edge- the edge whose type is to be returned- Returns:
- the
EdgeTypeofedge, ornullifedgehas no defined type - See Also:
Hypergraph.getEdgeType(Object)
-
containsVertex
public boolean containsVertex(V vertex)
Description copied from interface:HypergraphReturns true if this graph's vertex collection containsvertex. Equivalent togetVertices().contains(vertex).- Specified by:
containsVertexin interfaceHypergraph<V,H>- Parameters:
vertex- the vertex whose presence is being queried- Returns:
- true iff this graph contains a vertex
vertex
-
containsEdge
public boolean containsEdge(H edge)
Description copied from interface:HypergraphReturns true if this graph's edge collection containsedge. Equivalent togetEdges().contains(edge).- Specified by:
containsEdgein interfaceHypergraph<V,H>- Parameters:
edge- the edge whose presence is being queried- Returns:
- true iff this graph contains an edge
edge
-
getEdges
public java.util.Collection<H> getEdges()
Description copied from interface:HypergraphReturns a view of all edges in this graph. In general, this obeys theCollectioncontract, and therefore makes no guarantees about the ordering of the vertices within the set.- Specified by:
getEdgesin interfaceHypergraph<V,H>- Returns:
- a
Collectionview of all edges in this graph
-
getVertices
public java.util.Collection<V> getVertices()
Description copied from interface:HypergraphReturns a view of all vertices in this graph. In general, this obeys theCollectioncontract, and therefore makes no guarantees about the ordering of the vertices within the set.- Specified by:
getVerticesin interfaceHypergraph<V,H>- Returns:
- a
Collectionview of all vertices in this graph
-
getEdgeCount
public int getEdgeCount()
Description copied from interface:HypergraphReturns the number of edges in this graph.- Specified by:
getEdgeCountin interfaceHypergraph<V,H>- Returns:
- the number of edges in this graph
-
getVertexCount
public int getVertexCount()
Description copied from interface:HypergraphReturns the number of vertices in this graph.- Specified by:
getVertexCountin interfaceHypergraph<V,H>- Returns:
- the number of vertices in this graph
-
getNeighbors
public java.util.Collection<V> getNeighbors(V vertex)
Description copied from interface:HypergraphReturns the collection of vertices which are connected tovertexvia any edges in this graph. Ifvertexis connected to itself with a self-loop, then it will be included in the collection returned.- Specified by:
getNeighborsin interfaceHypergraph<V,H>- Parameters:
vertex- the vertex whose neighbors are to be returned- Returns:
- the collection of vertices which are connected to
vertex, ornullifvertexis not present
-
getIncidentEdges
public java.util.Collection<H> getIncidentEdges(V vertex)
Description copied from interface:HypergraphReturns the collection of edges in this graph which are connected tovertex.- Specified by:
getIncidentEdgesin interfaceHypergraph<V,H>- Parameters:
vertex- the vertex whose incident edges are to be returned- Returns:
- the collection of edges which are connected to
vertex, ornullifvertexis not present
-
getIncidentVertices
public java.util.Collection<V> getIncidentVertices(H edge)
Description copied from interface:HypergraphReturns the collection of vertices in this graph which are connected toedge. Note that for some graph types there are guarantees about the size of this collection (i.e., some graphs contain edges that have exactly two endpoints, which may or may not be distinct). Implementations for those graph types may provide alternate methods that provide more convenient access to the vertices.- Specified by:
getIncidentVerticesin interfaceHypergraph<V,H>- Parameters:
edge- the edge whose incident vertices are to be returned- Returns:
- the collection of vertices which are connected to
edge, ornullifedgeis not present
-
findEdge
public H findEdge(V v1, V v2)
Description copied from interface:HypergraphReturns an edge that connects this vertex tov. If this edge is not uniquely defined (that is, if the graph contains more than one edge connectingv1tov2), any of these edges may be returned.findEdgeSet(v1, v2)may be used to return all such edges. Returns null if either of the following is true:v2is not connected tov1- either
v1orv2are not present in this graph
Note: for purposes of this method,
v1is only considered to be connected tov2via a given directed edgeeifv1 == e.getSource() && v2 == e.getDest()evaluates totrue. (v1andv2are connected by an undirected edgeuifuis incident to bothv1andv2.)- Specified by:
findEdgein interfaceHypergraph<V,H>- Parameters:
v1- the first endpoint of the returned edgev2- the second endpoint of the returned edge- Returns:
- an edge that connects
v1tov2, ornullif no such edge exists (or either vertex is not present) - See Also:
Hypergraph.findEdgeSet(Object, Object)
-
findEdgeSet
public java.util.Collection<H> findEdgeSet(V v1, V v2)
Description copied from interface:HypergraphReturns all edges that connects this vertex tov. If this edge is not uniquely defined (that is, if the graph contains more than one edge connectingv1tov2), any of these edges may be returned.findEdgeSet(v1, v2)may be used to return all such edges. Returns null ifv2is not connected tov1.
Returns an empty collection if eitherv1orv2are not present in this graph.Note: for purposes of this method,
v1is only considered to be connected tov2via a given directed edgedifv1 == d.getSource() && v2 == d.getDest()evaluates totrue. (v1andv2are connected by an undirected edgeuifuis incident to bothv1andv2.)- Specified by:
findEdgeSetin interfaceHypergraph<V,H>- Parameters:
v1- the first endpoint of the returned edge setv2- the second endpoint of the returned edge set- Returns:
- a collection containing all edges that connect
v1tov2, ornullif either vertex is not present - See Also:
Hypergraph.findEdge(Object, Object)
-
addVertex
public boolean addVertex(V vertex)
Description copied from interface:HypergraphAddsvertexto this graph. Fails ifvertexis null or already in the graph.- Specified by:
addVertexin interfaceHypergraph<V,H>- Parameters:
vertex- the vertex to add- Returns:
trueif the add is successful, andfalseotherwise
-
removeVertex
public boolean removeVertex(V vertex)
Description copied from interface:HypergraphRemovesvertexfrom this graph. As a side effect, removes any edgeseincident tovertexif the removal ofvertexwould causeeto be incident to an illegal number of vertices. (Thus, for example, incident hyperedges are not removed, but incident edges--which must be connected to a vertex at both endpoints--are removed.)Fails under the following circumstances:
vertexis not an element of this graphvertexisnull
- Specified by:
removeVertexin interfaceHypergraph<V,H>- Parameters:
vertex- the vertex to remove- Returns:
trueif the removal is successful,falseotherwise
-
removeEdge
public boolean removeEdge(H hyperedge)
Description copied from interface:HypergraphRemovesedgefrom this graph. Fails ifedgeis null, or is otherwise not an element of this graph.- Specified by:
removeEdgein interfaceHypergraph<V,H>- Parameters:
hyperedge- the edge to remove- Returns:
trueif the removal is successful,falseotherwise
-
isNeighbor
public boolean isNeighbor(V v1, V v2)
Description copied from interface:HypergraphReturnstrueifv1andv2share an incident edge. Equivalent togetNeighbors(v1).contains(v2).- Specified by:
isNeighborin interfaceHypergraph<V,H>- Parameters:
v1- the first vertex to testv2- the second vertex to test- Returns:
trueifv1andv2share an incident edge
-
isIncident
public boolean isIncident(V vertex, H edge)
Description copied from interface:HypergraphReturnstrueifvertexandedgeare incident to each other. Equivalent togetIncidentEdges(vertex).contains(edge)and togetIncidentVertices(edge).contains(vertex).- Specified by:
isIncidentin interfaceHypergraph<V,H>- Parameters:
vertex- vertex to testedge- edge to test- Returns:
trueifvertexandedgeare incident to each other
-
degree
public int degree(V vertex)
Description copied from interface:HypergraphReturns the number of edges incident tovertex. Special cases of interest:- Incident self-loops are counted once.
- If there is only one edge that connects this vertex to
each of its neighbors (and vice versa), then the value returned
will also be equal to the number of neighbors that this vertex has
(that is, the output of
getNeighborCount). - If the graph is directed, then the value returned will be the sum of this vertex's indegree (the number of edges whose destination is this vertex) and its outdegree (the number of edges whose source is this vertex), minus the number of incident self-loops (to avoid double-counting).
Equivalent to
getIncidentEdges(vertex).size().- Specified by:
degreein interfaceHypergraph<V,H>- Parameters:
vertex- the vertex whose degree is to be returned- Returns:
- the degree of this node
- See Also:
Hypergraph.getNeighborCount(Object)
-
getNeighborCount
public int getNeighborCount(V vertex)
Description copied from interface:HypergraphReturns the number of vertices that are adjacent tovertex(that is, the number of vertices that are incident to edges invertex's incident edge set).Equivalent to
getNeighbors(vertex).size().- Specified by:
getNeighborCountin interfaceHypergraph<V,H>- Parameters:
vertex- the vertex whose neighbor count is to be returned- Returns:
- the number of neighboring vertices
-
getIncidentCount
public int getIncidentCount(H edge)
Description copied from interface:HypergraphReturns the number of vertices that are incident toedge. For hyperedges, this can be any nonnegative integer; for edges this must be 2 (or 1 if self-loops are permitted).Equivalent to
getIncidentVertices(edge).size().- Specified by:
getIncidentCountin interfaceHypergraph<V,H>- Parameters:
edge- the edge whose incident vertex count is to be returned- Returns:
- the number of vertices that are incident to
edge.
-
getEdgeCount
public int getEdgeCount(EdgeType edge_type)
Description copied from interface:HypergraphReturns the number of edges of typeedge_typein this graph.- Specified by:
getEdgeCountin interfaceHypergraph<V,H>- Parameters:
edge_type- the type of edge for which the count is to be returned- Returns:
- the number of edges of type
edge_typein this graph
-
getEdges
public java.util.Collection<H> getEdges(EdgeType edge_type)
Description copied from interface:HypergraphReturns the collection of edges in this graph which are of typeedge_type.- Specified by:
getEdgesin interfaceHypergraph<V,H>- Parameters:
edge_type- the type of edges to be returned- Returns:
- the collection of edges which are of type
edge_type, ornullif the graph does not accept edges of this type - See Also:
EdgeType
-
getDefaultEdgeType
public EdgeType getDefaultEdgeType()
Description copied from interface:HypergraphReturns the default edge type for this graph.- Specified by:
getDefaultEdgeTypein interfaceHypergraph<V,H>- Returns:
- the default edge type for this graph
-
getInEdges
public java.util.Collection<H> getInEdges(V vertex)
Description copied from interface:HypergraphReturns aCollectionview of the incoming edges incident tovertexin this graph.- Specified by:
getInEdgesin interfaceHypergraph<V,H>- Parameters:
vertex- the vertex whose incoming edges are to be returned- Returns:
- a
Collectionview of the incoming edges incident tovertexin this graph
-
getOutEdges
public java.util.Collection<H> getOutEdges(V vertex)
Description copied from interface:HypergraphReturns aCollectionview of the outgoing edges incident tovertexin this graph.- Specified by:
getOutEdgesin interfaceHypergraph<V,H>- Parameters:
vertex- the vertex whose outgoing edges are to be returned- Returns:
- a
Collectionview of the outgoing edges incident tovertexin this graph
-
inDegree
public int inDegree(V vertex)
Description copied from interface:HypergraphReturns the number of incoming edges incident tovertex. Equivalent togetInEdges(vertex).size().- Specified by:
inDegreein interfaceHypergraph<V,H>- Parameters:
vertex- the vertex whose indegree is to be calculated- Returns:
- the number of incoming edges incident to
vertex
-
outDegree
public int outDegree(V vertex)
Description copied from interface:HypergraphReturns the number of outgoing edges incident tovertex. Equivalent togetOutEdges(vertex).size().- Specified by:
outDegreein interfaceHypergraph<V,H>- Parameters:
vertex- the vertex whose outdegree is to be calculated- Returns:
- the number of outgoing edges incident to
vertex
-
getDest
public V getDest(H directed_edge)
Description copied from interface:HypergraphIfdirected_edgeis a directed edge in this graph, returns the destination; otherwise returnsnull. The destination of a directed edgedis defined to be the vertex incident todfor whichdis an incoming edge.directed_edgeis guaranteed to be a directed edge if itsEdgeTypeisDIRECTED.- Specified by:
getDestin interfaceHypergraph<V,H>- Parameters:
directed_edge- the edge whose destination is to be returned- Returns:
- the destination of
directed_edgeif it is a directed edge in this graph, ornullotherwise
-
getSource
public V getSource(H directed_edge)
Description copied from interface:HypergraphIfdirected_edgeis a directed edge in this graph, returns the source; otherwise returnsnull. The source of a directed edgedis defined to be the vertex for whichdis an outgoing edge.directed_edgeis guaranteed to be a directed edge if itsEdgeTypeisDIRECTED.- Specified by:
getSourcein interfaceHypergraph<V,H>- Parameters:
directed_edge- the edge whose source is to be returned- Returns:
- the source of
directed_edgeif it is a directed edge in this graph, ornullotherwise
-
getPredecessors
public java.util.Collection<V> getPredecessors(V vertex)
Description copied from interface:HypergraphReturns aCollectionview of the predecessors ofvertexin this graph. A predecessor ofvertexis defined as a vertexvwhich is connected tovertexby an edgee, whereeis an outgoing edge ofvand an incoming edge ofvertex.- Specified by:
getPredecessorsin interfaceHypergraph<V,H>- Parameters:
vertex- the vertex whose predecessors are to be returned- Returns:
- a
Collectionview of the predecessors ofvertexin this graph
-
getSuccessors
public java.util.Collection<V> getSuccessors(V vertex)
Description copied from interface:HypergraphReturns aCollectionview of the successors ofvertexin this graph. A successor ofvertexis defined as a vertexvwhich is connected tovertexby an edgee, whereeis an incoming edge ofvand an outgoing edge ofvertex.- Specified by:
getSuccessorsin interfaceHypergraph<V,H>- Parameters:
vertex- the vertex whose predecessors are to be returned- Returns:
- a
Collectionview of the successors ofvertexin this graph
-
-