|
|||||||||
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
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 CPO
null
if the bottom does not exist.public int compare(java.lang.Object e1, java.lang.Object e2)
compare
in interface CPO
e1
- 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 CPO
e
- 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 CPO
subset
- 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 CPO
e1
- 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 CPO
subset
- 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 CPO
false
otherwise.public java.lang.Object leastElement(java.lang.Object[] subset)
leastElement
in interface CPO
subset
- 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 CPO
e1
- 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 CPO
subset
- 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 CPO
null
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 DirectedGraph
weights
- The given node weights.
DirectedGraph.topologicalSort(Collection)
public java.lang.Object[] upSet(java.lang.Object e)
upSet
in interface CPO
e
- 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 Graph
node1
- 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 DirectedGraph
Analysis
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 All Classes | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |