AuD
Lecture 'Algorithmen und Datenstrukturen' (code examples)
PriorityFirstSearch.java
Go to the documentation of this file.
1package aud.example.graph;
2
3import java.util.Comparator;
4import aud.PriorityQueue;
5
9public abstract class PriorityFirstSearch extends Traversal {
10
12 protected Comparator<MyNode> compareNodes =
13 new Comparator<MyNode>() {
14 @Override public int compare(MyNode a,MyNode b) {
15 double d=a.d-b.d ;
16 return (d<0.0) ? -1 : (d>0.0 ? +1 : 0);
17 }
18 };
19
21 super(g);
22 }
23
32 protected abstract double priority(MyNode node,MyEdge e);
33
34 @Override public void start(MyNode s0) {
35 initialize(); // reset all node attributes
36
37 int count=0;
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 }
95
96}
Priority queue based on binary min-heap.
boolean is_empty()
Is PQ empty?
void push(T x)
Add entry to PQ.
boolean contains(T x)
Is x contained in PQ?
T pop()
Pop minimal element from PQ.
void lower(T x)
update heap after lowering priority of x
edge with all possible attributes that we require ;-)
Definition: MyEdge.java:6
graph based on aud.graph.GraphAM
Definition: MyGraph.java:11
node with all possible attributes that we require ;-)
Definition: MyNode.java:6
MyNode p
node from which node was reached (defines spanning tree)
Definition: MyNode.java:16
double d
distance to start node (sum of weighs or edge count if no weights defined)
Definition: MyNode.java:21
int ord
time when node is (first marked/put into front)
Definition: MyNode.java:13
Priority first search implementation.
abstract double priority(MyNode node, MyEdge e)
Compute priority of a node:
void start(MyNode s0)
start traversal at node s0
Comparator< MyNode > compareNodes
comparator for {#link aud.PriorityQueue}
interface for traversals of MyGraph
Definition: Traversal.java:6
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
AuD lecture: Data structures, algorithms, examples.
Definition: A234Tree.java:1