|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||
java.lang.Objectptolemy.graph.Graph
ptolemy.graph.DirectedGraph
ptolemy.graph.DirectedAcyclicGraph
public class DirectedAcyclicGraph
A directed acyclic graph (DAG).
The graphs constructed by this class cannot have cycles. For performance
reasons, this requirement is not checked (except for self-loops) during
the construction of the graph (calls to add and
addEdge), but is checked when any of the other methods is
called for the first time after the addition of nodes or edges. If the
graph is cyclic, a GraphTopologyException is thrown. The check for cycles
is done by computing the transitive closure, so the first operation after
a graph change is slower.
This class implements the CPO interface since the Hasse diagram of a CPO
can be viewed as a DAG. Therefore, this class can be viewed as both a DAG
and a finite CPO. In the case of CPO, the node weights
are the CPO elements. The CPO does not require the bottom
element to exist. The call to bottom returns
null if the bottom element does not exist.
NOTE: This class is a starting point for implementing graph algorithms, more methods will be added.
| Green (kienhuis) |
| Green (yuhong) |
| Field Summary | |
|---|---|
private java.lang.Object |
_bottom
|
private boolean[][] |
_closure
|
private java.lang.Object |
_top
|
private boolean[][] |
_tranClosureTranspose
|
private TransitiveClosureAnalysis |
_transitiveClosureAnalysis
|
| Fields inherited from interface ptolemy.graph.CPO |
|---|
HIGHER, INCOMPARABLE, LOWER, SAME |
| Constructor Summary | |
|---|---|
DirectedAcyclicGraph()
Construct an empty DAG. |
|
DirectedAcyclicGraph(int nodeCount)
Construct an empty DAG with enough storage allocated for the specified number of elements. |
|
| Method Summary | |
|---|---|
protected Edge |
_addEdge(Node node1,
Node node2,
boolean weighted,
java.lang.Object weight)
Create and add an edge with a specified source node, sink node, and optional weight. |
private int |
_compareNodeId(int i1,
int i2)
|
protected void |
_initializeAnalyses()
Initialize the list of analyses that are associated with this graph, and initialize the change counter of the graph. |
private java.lang.Object |
_leastElementNodeId(int[] ids)
|
private java.lang.Object |
_leastElementShared(java.lang.Object[] subset)
|
private java.lang.Object |
_lubShared(java.lang.Object[] subset)
|
private java.lang.Object |
_lubShared(java.lang.Object e1,
java.lang.Object e2)
|
private java.lang.Object[] |
_upSetShared(java.lang.Object e)
|
private void |
_validate()
|
private void |
_validateDual()
|
java.lang.Object |
bottom()
Return the bottom element of this CPO. |
int |
compare(java.lang.Object e1,
java.lang.Object e2)
Compare two elements in this CPO. |
java.lang.Object[] |
downSet(java.lang.Object e)
Compute the down-set of an element in this CPO. |
java.lang.Object |
greatestElement(java.lang.Object[] subset)
Compute the greatest element of a subset. |
java.lang.Object |
greatestLowerBound(java.lang.Object[] subset)
Compute the greatest lower bound (GLB) of a subset. |
java.lang.Object |
greatestLowerBound(java.lang.Object e1,
java.lang.Object e2)
Compute the greatest lower bound (GLB) of two elements. |
boolean |
isLattice()
Test if this CPO is a lattice. |
java.lang.Object |
leastElement(java.lang.Object[] subset)
Compute the least element of a subset. |
java.lang.Object |
leastUpperBound(java.lang.Object[] subset)
Compute the least upper bound (LUB) of a subset. |
java.lang.Object |
leastUpperBound(java.lang.Object e1,
java.lang.Object e2)
Compute the least upper bound (LUB) of two elements. |
java.lang.Object |
top()
Return the top element of this CPO. |
java.lang.Object[] |
topologicalSort()
Topological sort the whole graph. |
java.lang.Object[] |
topologicalSort(java.lang.Object[] weights)
Sort the given node weights in their topological order. |
java.lang.Object[] |
upSet(java.lang.Object e)
Compute the up-set of an element in this CPO. |
| Methods inherited from class ptolemy.graph.Graph |
|---|
_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 boolean[][] _closure
private boolean[][] _tranClosureTranspose
private TransitiveClosureAnalysis _transitiveClosureAnalysis
private java.lang.Object _bottom
private java.lang.Object _top
| Constructor Detail |
|---|
public DirectedAcyclicGraph()
public DirectedAcyclicGraph(int nodeCount)
nodeCount - The number of elements.| Method Detail |
|---|
public java.lang.Object bottom()
bottom in interface CPOnull if the bottom does not exist.
public int compare(java.lang.Object e1,
java.lang.Object e2)
compare in interface CPOe1 - An Object representing a CPO element.e2 - An Object representing a CPO element.
CPO.LOWER, CPO.SAME,
CPO.HIGHER, CPO.INCOMPARABLE.
java.lang.IllegalArgumentException - If at least one of the
specified Objects is not an element of this CPO.public java.lang.Object[] downSet(java.lang.Object e)
downSet in interface CPOe - An Object representing an element in this CPO.
java.lang.IllegalArgumentException - If the specified Object is not
an element in this CPO.public java.lang.Object greatestElement(java.lang.Object[] subset)
greatestElement in interface CPOsubset - An array of Objects representing the subset.
null if the greatest element does not exist.
java.lang.IllegalArgumentException - If at least one Object in the
specified array is not an element of this CPO.
public java.lang.Object greatestLowerBound(java.lang.Object e1,
java.lang.Object e2)
greatestLowerBound in interface CPOe1 - An Object representing an element in this CPO.e2 - An Object representing an element in this CPO.
null if the GLB does not exist.
java.lang.IllegalArgumentException - If at least one of the
specified Objects is not an element of this CPO.public java.lang.Object greatestLowerBound(java.lang.Object[] subset)
null is returned.
greatestLowerBound in interface CPOsubset - An array of Objects representing the subset.
null if the GLB does not exist.
java.lang.IllegalArgumentException - If at least one Object
in the specified array is not an element of this CPO.public boolean isLattice()
isLattice in interface CPOfalse otherwise.public java.lang.Object leastElement(java.lang.Object[] subset)
leastElement in interface CPOsubset - An array of Objects representing the subset.
null if the least element does not exist.
java.lang.IllegalArgumentException - If at least one Object in the
specified array is not an element of this CPO.
public java.lang.Object leastUpperBound(java.lang.Object e1,
java.lang.Object e2)
leastUpperBound in interface CPOe1 - An Object representing an element in this CPO.e2 - An Object representing element in this CPO.
null if the LUB does not exist.
java.lang.IllegalArgumentException - If at least one of the
specified Objects is not an element of this CPO.public java.lang.Object leastUpperBound(java.lang.Object[] subset)
null is returned.
leastUpperBound in interface CPOsubset - An array of Objects representing the subset.
null if the LUB does not exist.
java.lang.IllegalArgumentException - If at least one Object
in the specified array is not an element of this CPO.public java.lang.Object top()
top in interface CPOnull if the top does not exist.public java.lang.Object[] topologicalSort()
GraphStateException - If the graph is cyclic.public java.lang.Object[] topologicalSort(java.lang.Object[] weights)
topologicalSort in class DirectedGraphweights - The given node weights.
DirectedGraph.topologicalSort(Collection)public java.lang.Object[] upSet(java.lang.Object e)
upSet in interface CPOe - An Object representing an element in this CPO.
java.lang.IllegalArgumentException - If the specified Object is not
an element of this CPO.
protected Edge _addEdge(Node node1,
Node node2,
boolean weighted,
java.lang.Object weight)
_addEdge in class Graphnode1 - The source node of the edge.node2 - The sink node of the edge.weighted - True if the edge is to be weighted.weight - The weight that is to be applied if the edge is to
be weighted.
GraphConstructionException - If the specified nodes
are identical.
GraphElementException - If either of the specified nodes
is not in the graph.
java.lang.NullPointerException - If the edge is to be weighted, but
the specified weight is null.protected void _initializeAnalyses()
_initializeAnalyses in class DirectedGraphAnalysis
private int _compareNodeId(int i1,
int i2)
private java.lang.Object _leastElementNodeId(int[] ids)
private java.lang.Object _leastElementShared(java.lang.Object[] subset)
private java.lang.Object _lubShared(java.lang.Object e1,
java.lang.Object e2)
private java.lang.Object _lubShared(java.lang.Object[] subset)
private java.lang.Object[] _upSetShared(java.lang.Object e)
private void _validate()
private void _validateDual()
|
|||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | ||||||||