|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectptolemy.graph.Graph
ptolemy.graph.DirectedGraph
public class DirectedGraph
A directed graph. Some methods in this class have two versions, one that operates on graph nodes, and another that operates on node weights. The latter form is called the weights version. More specifically, the weights version of an operation takes individual node weights or arrays of weights as arguments, and, when applicable, returns individual weights or arrays of weights.
Multiple edges in a graph can be directed between the same pair of nodes. Thus, directed multigraphs are supported.
Yellow (pwhitake) |
Yellow (pwhitake) |
Field Summary | |
---|---|
private CycleExistenceAnalysis |
_acyclicAnalysis
|
private java.util.HashMap |
_inputEdgeMap
|
private java.util.HashMap |
_outputEdgeMap
|
private SinkNodeAnalysis |
_sinkNodeAnalysis
|
private SourceNodeAnalysis |
_sourceNodeAnalysis
|
private TransitiveClosureAnalysis |
_transitiveClosureAnalysis
|
Constructor Summary | |
---|---|
DirectedGraph()
Construct an empty directed graph. |
|
DirectedGraph(int nodeCount)
Construct an empty directed graph with enough storage allocated for the specified number of nodes. |
|
DirectedGraph(int nodeCount,
int edgeCount)
Construct an empty directed graph with enough storage allocated for the specified number of edges, and number of nodes. |
Method Summary | |
---|---|
protected void |
_connect(Edge edge,
Node node)
Connect an edge to a node by appropriately modifying the adjacency information associated with the node. |
protected void |
_connectedSubGraph(Node node,
DirectedGraph graph,
java.util.Collection remainingNodes)
Given a node, get all the edges and nodes that are connected to it directly and/or indirectly. |
protected void |
_disconnect(Edge edge,
Node node)
Disconnect an edge from a node that it is incident to. |
protected void |
_initializeAnalyses()
Initialize the list of analyses that are associated with this graph, and initialize the change counter of the graph. |
private java.util.ArrayList |
_inputEdgeList(Node node)
|
private java.util.ArrayList |
_outputEdgeList(Node node)
|
protected void |
_registerNode(Node node)
Register a new node in the graph. |
private void |
_removeIfPresent(java.util.ArrayList list,
java.lang.Object element)
|
java.util.Collection |
backwardReachableNodes(java.util.Collection nodeCollection)
Find all the nodes that can be reached backward from the specified collection of nodes. |
java.util.Collection |
backwardReachableNodes(Node node)
Find all the nodes that can be reached backward from the specified node. |
java.lang.Object[] |
backwardReachableNodes(java.lang.Object weight)
Find all the nodes that can be reached backward from the specified node (weights version). |
java.lang.Object[] |
backwardReachableNodes(java.lang.Object[] weights)
Find all the nodes that can be reached backward from the specified collection of nodes (weights version). |
java.util.Collection |
cycleNodeCollection()
Return the nodes that are in cycles. |
java.lang.Object[] |
cycleNodes()
Return the nodes that are in cycles (weights version). |
boolean |
edgeExists(Node node1,
Node node2)
Test if an edge exists from one node to another. |
boolean |
edgeExists(java.lang.Object weight1,
java.lang.Object weight2)
Test whether an edge exists from one node weight to another. |
int |
inputEdgeCount(Node node)
Return the number of input edges of a specified node. |
java.util.Collection |
inputEdges(Node node)
Return the collection of input edges for a specified node. |
boolean |
isAcyclic()
Test if this graph is acyclic (is a DAG). |
int |
outputEdgeCount(Node node)
Return the number of output edges of a specified node. |
java.util.Collection |
outputEdges(Node node)
Return the collection of output edges for a specified node. |
java.util.Collection |
predecessorEdges(Node n1,
Node n2)
Return the collection of edges that make a node n2 a predecessor of a node n1. |
java.util.Collection |
predecessors(Node node)
Return all of the predecessors of a given node in the form of a a collection. |
java.util.Collection |
reachableNodes(java.util.Collection nodeCollection)
Find all the nodes that can be reached from the specified collection of nodes. |
java.util.Collection |
reachableNodes(Node node)
Find all the nodes that can be reached from the specified node. |
java.lang.Object[] |
reachableNodes(java.lang.Object weight)
Find all the nodes that can be reached from any node that has the specified node weight (weights version). |
java.lang.Object[] |
reachableNodes(java.lang.Object[] weights)
Find all the nodes that can be reached from the specified collection of nodes (weights version). |
DirectedGraph[] |
sccDecomposition()
Compute the strongly connected component (SCC) decomposition of a graph. |
int |
selfLoopEdgeCount(Node node)
Return the number of self loop edges of a specified node. |
int |
sinkNodeCount()
Return the number of sink nodes in this graph. |
java.util.Collection |
sinkNodes()
Return all the sink nodes in this graph in the form of a collection. |
int |
sourceNodeCount()
Return the number of source nodes in this graph. |
java.util.Collection |
sourceNodes()
Return all the source nodes in this graph in the form of a collection. |
java.util.LinkedList |
subgraphs()
Return a list of disconnected subgraphs of this graph. |
java.util.Collection |
successorEdges(Node n1,
Node n2)
Return the collection of edges that make a node n2 a successor of a node n1. |
java.util.Collection |
successors(Node node)
Return all of the successors of a given node in the form of a a collection. |
DirectedAcyclicGraph |
toDirectedAcyclicGraph()
Return an acyclic graph if this graph is acyclic. |
java.util.List |
topologicalSort(java.util.Collection nodeCollection)
Sort a collection of graph nodes in their topological order as long as no two of the given nodes are mutually reachable by each other. |
java.lang.Object[] |
topologicalSort(java.lang.Object[] weights)
Sort the given nodes in their topological order as long as no two of the given nodes are mutually reachable by each other (weights version). |
boolean[][] |
transitiveClosure()
Return transitive closure for the graph. |
Methods inherited from class ptolemy.graph.Graph |
---|
_addEdge, _connectEdge, _disconnectEdge, _emptyGraph, _registerChange, _registerEdge, addAnalysis, addEdge, addEdge, addEdge, addEdge, addEdge, addEdges, addGraph, addNode, addNode, addNodes, addNodeWeight, addNodeWeights, changeCount, clone, cloneAs, connectedComponents, containsEdge, containsEdgeWeight, containsNode, containsNodeWeight, edge, edge, edgeCount, edgeLabel, edgeLabel, edges, edges, edges, edgeWeight, equals, hashCode, hidden, hiddenEdgeCount, hiddenEdges, hideEdge, incidentEdgeCount, incidentEdges, neighborEdges, neighbors, node, node, nodeCount, nodeLabel, nodeLabel, nodes, nodes, nodes, nodeWeight, removeEdge, removeNode, restoreEdge, selfLoopEdgeCount, selfLoopEdges, selfLoopEdges, subgraph, subgraph, toString, validateWeight, validateWeight, validateWeight, validateWeight, validEdgeWeight, validNodeWeight, weightArray |
Methods inherited from class java.lang.Object |
---|
finalize, getClass, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
private java.util.HashMap _inputEdgeMap
private java.util.HashMap _outputEdgeMap
private CycleExistenceAnalysis _acyclicAnalysis
private TransitiveClosureAnalysis _transitiveClosureAnalysis
private SinkNodeAnalysis _sinkNodeAnalysis
private SourceNodeAnalysis _sourceNodeAnalysis
Constructor Detail |
---|
public DirectedGraph()
public DirectedGraph(int nodeCount)
nodeCount
- The integer specifying the number of nodespublic DirectedGraph(int nodeCount, int edgeCount)
nodeCount
- The number of nodes.edgeCount
- The number of edges.Method Detail |
---|
public java.util.Collection backwardReachableNodes(Node node)
node
- A node in this graph.
Node
.
GraphElementException
- If the specified node is
not a node in this graph.public java.lang.Object[] backwardReachableNodes(java.lang.Object weight)
weight
- A node weight in this graph.
Object
.
GraphWeightException
- If the specified weight is
not a node weight in this graph.public java.util.Collection backwardReachableNodes(java.util.Collection nodeCollection)
nodeCollection
- A collection of nodes in this graph;
each element is a Node
.
Node
.public java.lang.Object[] backwardReachableNodes(java.lang.Object[] weights)
weights
- An array of node weights in this graph; each
element is an Object
.
Object
.
GraphElementException
- If the one or more of the specified
weights is not a node weight in this graph.public java.util.Collection cycleNodeCollection()
Node
.public java.lang.Object[] cycleNodes()
Object
.public boolean edgeExists(Node node1, Node node2)
node1
- The weight of the first node.node2
- The weight of the second node.
public boolean edgeExists(java.lang.Object weight1, java.lang.Object weight2)
(n1.getWeight() == weight1) && (n2.getWeight() == weight2)
.
weight1
- The first (source) node weight.weight2
- The second (sink) node weight.
public int inputEdgeCount(Node node)
node
- The node.
public java.util.Collection inputEdges(Node node)
node
- The specified node.
Edge
.public boolean isAcyclic()
public int outputEdgeCount(Node node)
node
- The node.
public java.util.Collection outputEdges(Node node)
node
- The specified node.
Edge
.public java.util.Collection predecessorEdges(Node n1, Node n2)
Edge
.
n1
- The node n1.n2
- The node n2.
successorEdges(Node, Node)
,
Graph.neighborEdges(Node, Node)
public java.util.Collection predecessors(Node node)
node
- The node whose predecessors are to be returned.
public java.util.Collection reachableNodes(Node node)
node
- The specified node.
Node
.
GraphElementException
- If the specified node is
not a node in this graph.public java.lang.Object[] reachableNodes(java.lang.Object weight)
weight
- The specified node weight.
Object
.
GraphWeightException
- If the specified node weight is
not a node weight in this graph.reachableNodes(Node)
public java.lang.Object[] reachableNodes(java.lang.Object[] weights)
weights
- An array of node weights; each element is an
Object
.
Object
.reachableNodes(Node)
public java.util.Collection reachableNodes(java.util.Collection nodeCollection)
nodeCollection
- The specified collection of nodes;
each element is a Node
.
Node
.public DirectedGraph[] sccDecomposition()
public int selfLoopEdgeCount(Node node)
selfLoopEdgeCount
in class Graph
node
- The node.
public int sinkNodeCount()
public java.util.Collection sinkNodes()
Node
.
sinkNodeCount()
public int sourceNodeCount()
public java.util.Collection sourceNodes()
Node
.
sourceNodeCount()
public java.util.LinkedList subgraphs()
public java.util.Collection successorEdges(Node n1, Node n2)
Edge
.
n1
- The node n1.n2
- The node n2.
predecessorEdges(Node, Node)
,
Graph.neighborEdges(Node, Node)
public java.util.Collection successors(Node node)
Node
.
A successor of a node X is a node that is the sink
of an edge whose source is X. All elements in the returned collection
are unique nodes.
node
- The node whose successors are to be returned.
public DirectedAcyclicGraph toDirectedAcyclicGraph()
DirectedAcyclicGraph
.
GraphException
- If the graph is cyclic.public java.util.List topologicalSort(java.util.Collection nodeCollection) throws GraphActionException
nodeCollection
- The collection of nodes to be sorted;
each element is a Node
.
Node
.
GraphActionException
- If any two nodes are strongly
connected.topologicalSort(Object[])
public java.lang.Object[] topologicalSort(java.lang.Object[] weights) throws GraphActionException
weights
- The weight set.
GraphActionException
- If any two nodes are strongly
connected.topologicalSort(Collection)
public boolean[][] transitiveClosure()
protected void _connect(Edge edge, Node node)
_connect
in class Graph
edge
- The edge.node
- The node.
GraphConstructionException
- If the edge has already
been connected to the node.protected void _connectedSubGraph(Node node, DirectedGraph graph, java.util.Collection remainingNodes)
node
- The given node.graph
- The given graph.remainingNodes
- Set of nodes that haven't been reached.protected void _disconnect(Edge edge, Node node)
Graph
_disconnect
in class Graph
edge
- The edge.node
- The node.protected void _initializeAnalyses()
_initializeAnalyses
in class Graph
Analysis
protected void _registerNode(Node node)
_registerNode
in class Graph
node
- The new node.Graph._registerEdge(Edge)
private java.util.ArrayList _inputEdgeList(Node node)
private java.util.ArrayList _outputEdgeList(Node node)
private void _removeIfPresent(java.util.ArrayList list, java.lang.Object element)
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES All Classes | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |