AuD
Lecture 'Algorithmen und Datenstrukturen' (code examples)
aud.example.graph.PriorityFirstSearch Class Referenceabstract

Priority first search implementation. More...

+ Inheritance diagram for aud.example.graph.PriorityFirstSearch:
+ Collaboration diagram for aud.example.graph.PriorityFirstSearch:

Public Member Functions

 PriorityFirstSearch (MyGraph g)
 
void start (MyNode s0)
 start traversal at node s0 More...
 
- Public Member Functions inherited from aud.example.graph.Traversal
 Traversal (MyGraph g)
 initiate traversal of g
More...
 
abstract String name ()
 get traversal name More...
 
abstract void start (MyNode s0)
 start traversal at node s0 More...
 
void showMark (MyNode node)
 callback to give visual feedback on marking a node More...
 

Protected Member Functions

abstract double priority (MyNode node, MyEdge e)
 Compute priority of a node: More...
 
- Protected Member Functions inherited from aud.example.graph.Traversal
void initialize ()
 initialize graph for traversal (reset all attributes), provided for convenience to be called by start More...
 

Protected Attributes

Comparator< MyNodecompareNodes
 comparator for {#link aud.PriorityQueue} More...
 
- Protected Attributes inherited from aud.example.graph.Traversal
MyGraph g_ = null
 
int time_ = 0
 

Additional Inherited Members

- Public Attributes inherited from aud.example.graph.Traversal
SingleStepper singlestepper = null
 may halt if single stepper was set More...
 
int nsteps = 1
 halt every nsteps steps in time_
More...
 
int verbose = 0
 set verbosity (extra output if >0) More...
 

Detailed Description

Priority first search implementation.

The priority function must be implemented (e.g., Dijkstra, Prim}.

Definition at line 9 of file PriorityFirstSearch.java.

Constructor & Destructor Documentation

◆ PriorityFirstSearch()

Definition at line 20 of file PriorityFirstSearch.java.

20 {
21 super(g);
22 }

Member Function Documentation

◆ priority()

abstract double aud.example.graph.PriorityFirstSearch.priority ( MyNode  node,
MyEdge  e 
)
abstractprotected

Compute priority of a node:

  • node.d+e.getWeight() for Dijkstra's algorithm to find shortest paths (and the shortest path tree)
  • e.getWeight() for Prim's algorithm to find the minimum spanning tree

Reimplemented in aud.example.graph.DijkstraShortestPaths, and aud.example.graph.PrimMinimumSpanningTree.

◆ start()

void aud.example.graph.PriorityFirstSearch.start ( MyNode  s0)

start traversal at node s0

Reimplemented from aud.example.graph.Traversal.

Definition at line 34 of file PriorityFirstSearch.java.

34 {
35 initialize(); // reset all node attributes
36
37 int count=0;
38 PriorityQueue<MyNode> open=
39 new PriorityQueue<MyNode>(g_.getNumNodes(),compareNodes);
40 s0.d=0.0;
41
42 showMark(s0);
43
44 open.push(s0);
45
46 while (!open.is_empty()) {
47 if (verbose>0)
48 System.out.println("open="+open.toString());
49
50 MyNode s=open.pop();
51
52 assert(!Double.isInfinite(s.d));
53 showVisit(s);
54
55 for (MyEdge e : g_.getOutEdges(s)) {
56
57 if (verbose>0)
58 System.err.println(e);
59
60 MyNode t=(MyNode) e.destination();
61 if (t==s)
62 t=(MyNode) e.source(); // undirected graph
63
64 double pr=priority(s,e);
65
66 if (Double.isInfinite(t.d)) {
67
68 assert(!open.contains(t));
69
70 t.ord=count++;
71 t.p=s;
72 t.d=pr;
73
74 showMark(t);
75
76 open.push(t);
77 }
78 else if (t.d>pr && open.contains(t)) { // update distance/priority
79
80 if (verbose>0)
81 System.out.println("update "+t+": priority "+t.d+" -> "+pr+
82 ", parent "+t.p+" -> "+s);
83
84 t.p=s;
85 t.d=pr;
86
87 open.lower(t);
88
89 if (verbose>0)
90 System.out.println("open="+open.toString());
91 }
92 }
93 }
94 }
abstract double priority(MyNode node, MyEdge e)
Compute priority of a node:
Comparator< MyNode > compareNodes
comparator for {#link aud.PriorityQueue}
int verbose
set verbosity (extra output if >0)
Definition: Traversal.java:15
void initialize()
initialize graph for traversal (reset all attributes), provided for convenience to be called by start
Definition: Traversal.java:34
void showMark(MyNode node)
callback to give visual feedback on marking a node
Definition: Traversal.java:44
Vector< Edge > getOutEdges(Node node)
Definition: GraphAM.java:98

References aud.example.graph.PriorityFirstSearch.compareNodes, aud.example.graph.MyNode.d, aud.example.graph.Traversal.g_, aud.graph.GraphAM< Node extends AbstractNode, Edge extends AbstractEdge >.getNumNodes(), aud.example.graph.Traversal.initialize(), aud.PriorityQueue< T >.is_empty(), aud.PriorityQueue< T >.pop(), aud.PriorityQueue< T >.push(), aud.example.graph.Traversal.showMark(), aud.PriorityQueue< T >.toString(), and aud.example.graph.Traversal.verbose.

+ Here is the call graph for this function:

Member Data Documentation

◆ compareNodes

Comparator<MyNode> aud.example.graph.PriorityFirstSearch.compareNodes
protected
Initial value:
=
new Comparator<MyNode>() {
@Override public int compare(MyNode a,MyNode b) {
double d=a.d-b.d ;
return (d<0.0) ? -1 : (d>0.0 ? +1 : 0);
}
}

comparator for {#link aud.PriorityQueue}

Definition at line 12 of file PriorityFirstSearch.java.

Referenced by aud.example.graph.PriorityFirstSearch.start().


The documentation for this class was generated from the following file: