SlideShare ist ein Scribd-Unternehmen logo
1 von 74
Downloaden Sie, um offline zu lesen
Shortest Path
Algorithm
Data Structures and Algorithms
Emory University
Jinho D. Choi
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
92
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
S T
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
S T
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
Visited
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
(5, 0)
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
5
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
(3, 3)5
5
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
(3, 3)5
5
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
(3, 3)5
5
9
5
(4, 9)
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
5 3
5
9
5
(4, 9)
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
5 3
13
53
(1, 13)9
5
(4, 9)
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
5 3
13
53
(1, 13)9
5
(4, 9)
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
5 3
13
53
(1, 13)
(4, 7)
97
53
(4, 9)
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
5 3
13
53
(1, 13)
4
97
53
(4, 9)
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
5 3
13
53
(1, 13)
4
97
53
(4, 9)
10
4
(2, 10)
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
5 3
13
53
(1, 13)
4
97
53
10
4
(2, 10)
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
5 3
13
53
(1, 13)
4
97
53
10
4
2
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
5 3
13
53
(1, 13)
4
97
53
10
4
2
12
2
(0, 12)
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
5 3
13
53
(1, 13)
4
97
53
10
4
2
12
2
(0, 12)
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
5 3
13
53
(1, 13)
4
97
53
10
4
2
12
2
0
2
3
3
4
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
5 3
13
53
4
97
53
10
4
2
12
2
0
2
3
3
4
1
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
5 3
13
53
4
97
53
10
4
2
12
2
0
2
3
3
4
1
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
5 3
13
53
4
97
53
10
4
2
12
2
0
2
3
3
4
1
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
5 3
13
53
4
97
53
10
4
2
12
2
0
2
3
3
4
1
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
5 3
13
53
4
97
53
10
4
2
12
2
0
2
3
3
4
1
Dijkstra's Algorithm
Emory University Logo Guidelines
-
2
0
1
2
3
4
5
4
5
10
9
∞ ∞ ∞ ∞ ∞ ∞
0 1 2 3 4 5
Distance
∅ ∅ ∅ ∅ ∅ ∅Previous
Queue
S T
0
Visited
3
5 3
13
53
4
97
53
10
4
2
12
2
0
2
3
3
4
1
Dijkstra's Algorithm
Emory University Logo Guidelines
-
Dijkstra's Algorithm
3
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
21
12
4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
3
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
21
12
4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
3
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
(3, 0)
21
12
4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
3
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
21
3 12
4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
3
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
21
3
1
3
(1, 1)12
4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
3
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
21
3
1
3
(1, 1)12
4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
3
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
21
3
1
3
(1, 1)
2
3
(2, 2)
12
4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
3
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
21
3
1
3
2
3
(2, 2)
1 12
4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
3
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
21
3
1
3
2
3
(2, 2)1
3
1
(0, 3)
12
4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
3
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
21
3
1
3
2
3
1
3
1
(0, 3)
2 12
4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
3
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
21
3
1
3
2
3
1
3
1
2 0 12
4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
3
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
21
3
1
3
2
3
1
3
1
2 0 12
4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
3
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
21
3
1
3
2
3
1
3
1
2 0 12
4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
3
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
21
3
1
3
2
3
1
3
1
2 0 12
4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
3
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
21
3
1
3
2
3
1
3
1
2 0 12
4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
3
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
21
3
1
3
2
3
1
3
1
2 0 12
4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
4
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
1
1 2
2
-4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
4
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
1
1 2
2
-4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
4
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
(3, 0)1
1 2
2
-4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
4
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
1
1
3
2
2
-4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
4
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
1
1
3
1
3
(1, 1)
2
2
-4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
4
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
1
1
3
1
3
(1, 1)
2
2
-4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
4
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
1
1
3
1
3
(1, 1)
2
3
(2, 2)
2
2
-4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
4
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
1
1
3
1
3
2
3
(2, 2)
1
2
2
-4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
4
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
1
1
3
1
3
2
3
(2, 2)1
3
1
(0, 3)
2
2
-4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
4
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
1
1
3
1
3
2
3
1
3
1
(0, 3)
2
2
2
-4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
4
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
1
1
3
1
3
2
3
1
3
1
(0, 3)
2
-2
2
(1, -2)
2
2
-4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
4
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
1
1
3
1
3
2
3
1
3
1
(0, 3)
2
-2
2
2
2
-4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
4
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
1
1
3
1
3
2
3
1
3
1
2 0
-2
2
2
2
-4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
4
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
1
1
3
1
3
2
3
1
3
1
2 0
-2
2
2
2
-4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
4
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
1
1
3
1
3
2
3
1
3
1
2 0
-2
2
2
2
-4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
4
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
1
1
3
1
3
2
3
1
3
1
2 0
-2
2
2
2
-4
Emory University Logo Guidelines
-
Dijkstra's Algorithm
4
1
0 3
2
∅∅∅∅Previous
∞∞∞∞Distance
0 1 2 3
QueueVisited
TS
0
1
1
3
1
3
2
3
1
3
1
2 0
-2
2
2
2
-4
Emory University Logo Guidelines
-
Vertex Distance Pair
5
private class VertexDistancePair implements Comparable<VertexDistancePair>
{
public int vertex;
public double distance;
public VertexDistancePair(int vertex, double distance)
{
this.vertex = vertex;
this.distance = distance;
}
@Override
public int compareTo(VertexDistancePair p)
{
double diff = this.distance - p.distance;
if (diff > 0) return 1;
if (diff < 0) return -1;
return 0;
}
}
Emory University Logo Guidelines
-
Dijkstra's Algorithm
6
public Integer[] getShortestPath(Graph graph, int source, int target)
{
PriorityQueue<VertexDistancePair> queue = new PriorityQueue<>();
Integer[] previous = new Integer[graph.size()];
double[] distances = new double[graph.size()];
Set<Integer> visited = new HashSet<>();
init(distances, previous, target);
queue.add(new VertexDistancePair(target, distances[target]));
while (!queue.isEmpty())
{
// To be filled.
}
return previous;
}
Emory University Logo Guidelines
-
Dijkstra's Algorithm
6
public Integer[] getShortestPath(Graph graph, int source, int target)
{
PriorityQueue<VertexDistancePair> queue = new PriorityQueue<>();
Integer[] previous = new Integer[graph.size()];
double[] distances = new double[graph.size()];
Set<Integer> visited = new HashSet<>();
init(distances, previous, target);
queue.add(new VertexDistancePair(target, distances[target]));
while (!queue.isEmpty())
{
// To be filled.
}
return previous;
}
Emory University Logo Guidelines
-
Dijkstra's Algorithm
6
public Integer[] getShortestPath(Graph graph, int source, int target)
{
PriorityQueue<VertexDistancePair> queue = new PriorityQueue<>();
Integer[] previous = new Integer[graph.size()];
double[] distances = new double[graph.size()];
Set<Integer> visited = new HashSet<>();
init(distances, previous, target);
queue.add(new VertexDistancePair(target, distances[target]));
while (!queue.isEmpty())
{
// To be filled.
}
return previous;
}
Emory University Logo Guidelines
-
Dijkstra's Algorithm
7
private void init(double[] distances, Integer[] previous, int target)
{
for (int i=0; i<distances.length; i++)
{
if (i == target)
distances[i] = 0;
else
{
distances[i] = Double.MAX_VALUE;
previous[i] = null;
}
}
}
Emory University Logo Guidelines
-
Dijkstra's Algorithm
7
private void init(double[] distances, Integer[] previous, int target)
{
for (int i=0; i<distances.length; i++)
{
if (i == target)
distances[i] = 0;
else
{
distances[i] = Double.MAX_VALUE;
previous[i] = null;
}
}
}
Emory University Logo Guidelines
-
8
while (!queue.isEmpty())
{
VertexDistancePair u = queue.poll();
visited.add(u.vertex);
for (Edge edge : graph.getIncomingEdges(u.vertex))
{
int v = edge.getSource();
if (!visited.contains(v))
{
double dist = distances[u.vertex] + edge.getWeight();
if (dist < distances[v])
{
distances[v] = dist;
previous [v] = u.vertex;
queue.add(new VertexDistancePair(v, dist));
}
}
}
}
Emory University Logo Guidelines
-
8
while (!queue.isEmpty())
{
VertexDistancePair u = queue.poll();
visited.add(u.vertex);
for (Edge edge : graph.getIncomingEdges(u.vertex))
{
int v = edge.getSource();
if (!visited.contains(v))
{
double dist = distances[u.vertex] + edge.getWeight();
if (dist < distances[v])
{
distances[v] = dist;
previous [v] = u.vertex;
queue.add(new VertexDistancePair(v, dist));
}
}
}
}
Complexity?
Emory University Logo Guidelines
-
Dijkstra's vs A*
9
private void init(double[] distances, Integer[] previous, int target)
{
for (int i=0; i<distances.length; i++)
{
if (i == target)
distances[i] = 0;
else
{
distances[i] = Double.MAX_VALUE;
previous[i] = null;
}
}
}
Emory University Logo Guidelines
-
Dijkstra's vs A*
9
private void init(double[] distances, Integer[] previous, int target)
{
for (int i=0; i<distances.length; i++)
{
if (i == target)
distances[i] = 0;
else
{
distances[i] = Double.MAX_VALUE;
previous[i] = null;
}
}
}
+ heuristic(i, target);
Emory University Logo Guidelines
-
10
while (!queue.isEmpty())
{
VertexDistancePair u = queue.poll();
visited.add(u.vertex);
for (Edge edge : graph.getIncomingEdges(u.vertex))
{
int v = edge.getSource();
if (!visited.contains(v))
{
double dist = distances[u.vertex] + edge.getWeight();
if (dist < distances[v])
{
distances[v] = dist;
previous [v] = u.vertex;
queue.add(new VertexDistancePair(v, dist));
}
}
}
}
Emory University Logo Guidelines
-
10
while (!queue.isEmpty())
{
VertexDistancePair u = queue.poll();
visited.add(u.vertex);
for (Edge edge : graph.getIncomingEdges(u.vertex))
{
int v = edge.getSource();
if (!visited.contains(v))
{
double dist = distances[u.vertex] + edge.getWeight();
if (dist < distances[v])
{
distances[v] = dist;
previous [v] = u.vertex;
queue.add(new VertexDistancePair(v, dist));
}
}
}
}
+ heuristic(v, target);
Emory University Logo Guidelines
-
A* Abstract Class
11
public abstract class AStar
{
public Integer[] getShortestPath(Graph graph, int source, int target)
{
PriorityQueue<VertexDistancePair> queue = new PriorityQueue<>();
Integer[] previous = new Integer[graph.size()];
double[] distances = new double[graph.size()];
Set<Integer> visited = new HashSet<>();
...
return previous;
}
}
protected abstract double heuristic(int source, int target);
Emory University Logo Guidelines
-
Dijkstra’s Algorithm
12
public class Dijkstra extends AStar
{
@Override
protected double heuristic(int source, int target)
{
return 0;
}
}

Weitere ähnliche Inhalte

Mehr von Jinho Choi

Transformers to Learn Hierarchical Contexts in Multiparty Dialogue for Span-b...
Transformers to Learn Hierarchical Contexts in Multiparty Dialogue for Span-b...Transformers to Learn Hierarchical Contexts in Multiparty Dialogue for Span-b...
Transformers to Learn Hierarchical Contexts in Multiparty Dialogue for Span-b...Jinho Choi
 
The Myth of Higher-Order Inference in Coreference Resolution
The Myth of Higher-Order Inference in Coreference ResolutionThe Myth of Higher-Order Inference in Coreference Resolution
The Myth of Higher-Order Inference in Coreference ResolutionJinho Choi
 
Noise Pollution in Hospital Readmission Prediction: Long Document Classificat...
Noise Pollution in Hospital Readmission Prediction: Long Document Classificat...Noise Pollution in Hospital Readmission Prediction: Long Document Classificat...
Noise Pollution in Hospital Readmission Prediction: Long Document Classificat...Jinho Choi
 
Abstract Meaning Representation
Abstract Meaning RepresentationAbstract Meaning Representation
Abstract Meaning RepresentationJinho Choi
 
Semantic Role Labeling
Semantic Role LabelingSemantic Role Labeling
Semantic Role LabelingJinho Choi
 
CS329 - WordNet Similarities
CS329 - WordNet SimilaritiesCS329 - WordNet Similarities
CS329 - WordNet SimilaritiesJinho Choi
 
CS329 - Lexical Relations
CS329 - Lexical RelationsCS329 - Lexical Relations
CS329 - Lexical RelationsJinho Choi
 
Automatic Knowledge Base Expansion for Dialogue Management
Automatic Knowledge Base Expansion for Dialogue ManagementAutomatic Knowledge Base Expansion for Dialogue Management
Automatic Knowledge Base Expansion for Dialogue ManagementJinho Choi
 
Attention is All You Need for AMR Parsing
Attention is All You Need for AMR ParsingAttention is All You Need for AMR Parsing
Attention is All You Need for AMR ParsingJinho Choi
 
Graph-to-Text Generation and its Applications to Dialogue
Graph-to-Text Generation and its Applications to DialogueGraph-to-Text Generation and its Applications to Dialogue
Graph-to-Text Generation and its Applications to DialogueJinho Choi
 
Real-time Coreference Resolution for Dialogue Understanding
Real-time Coreference Resolution for Dialogue UnderstandingReal-time Coreference Resolution for Dialogue Understanding
Real-time Coreference Resolution for Dialogue UnderstandingJinho Choi
 
Topological Sort
Topological SortTopological Sort
Topological SortJinho Choi
 
Multi-modal Embedding Learning for Early Detection of Alzheimer's Disease
Multi-modal Embedding Learning for Early Detection of Alzheimer's DiseaseMulti-modal Embedding Learning for Early Detection of Alzheimer's Disease
Multi-modal Embedding Learning for Early Detection of Alzheimer's DiseaseJinho Choi
 
Building Widely-Interpretable Semantic Networks for Dialogue Contexts
Building Widely-Interpretable Semantic Networks for Dialogue ContextsBuilding Widely-Interpretable Semantic Networks for Dialogue Contexts
Building Widely-Interpretable Semantic Networks for Dialogue ContextsJinho Choi
 
How to make Emora talk about Sports Intelligently
How to make Emora talk about Sports IntelligentlyHow to make Emora talk about Sports Intelligently
How to make Emora talk about Sports IntelligentlyJinho Choi
 
Text-to-SQL with Data-Driven Templates
Text-to-SQL with Data-Driven TemplatesText-to-SQL with Data-Driven Templates
Text-to-SQL with Data-Driven TemplatesJinho Choi
 
Resume Classification with Term Attention Embeddings
Resume Classification with Term Attention EmbeddingsResume Classification with Term Attention Embeddings
Resume Classification with Term Attention EmbeddingsJinho Choi
 
[DSA-Java] Heap Sort
[DSA-Java] Heap Sort[DSA-Java] Heap Sort
[DSA-Java] Heap SortJinho Choi
 

Mehr von Jinho Choi (20)

Transformers to Learn Hierarchical Contexts in Multiparty Dialogue for Span-b...
Transformers to Learn Hierarchical Contexts in Multiparty Dialogue for Span-b...Transformers to Learn Hierarchical Contexts in Multiparty Dialogue for Span-b...
Transformers to Learn Hierarchical Contexts in Multiparty Dialogue for Span-b...
 
The Myth of Higher-Order Inference in Coreference Resolution
The Myth of Higher-Order Inference in Coreference ResolutionThe Myth of Higher-Order Inference in Coreference Resolution
The Myth of Higher-Order Inference in Coreference Resolution
 
Noise Pollution in Hospital Readmission Prediction: Long Document Classificat...
Noise Pollution in Hospital Readmission Prediction: Long Document Classificat...Noise Pollution in Hospital Readmission Prediction: Long Document Classificat...
Noise Pollution in Hospital Readmission Prediction: Long Document Classificat...
 
Abstract Meaning Representation
Abstract Meaning RepresentationAbstract Meaning Representation
Abstract Meaning Representation
 
Semantic Role Labeling
Semantic Role LabelingSemantic Role Labeling
Semantic Role Labeling
 
CKY Parsing
CKY ParsingCKY Parsing
CKY Parsing
 
CS329 - WordNet Similarities
CS329 - WordNet SimilaritiesCS329 - WordNet Similarities
CS329 - WordNet Similarities
 
CS329 - Lexical Relations
CS329 - Lexical RelationsCS329 - Lexical Relations
CS329 - Lexical Relations
 
Automatic Knowledge Base Expansion for Dialogue Management
Automatic Knowledge Base Expansion for Dialogue ManagementAutomatic Knowledge Base Expansion for Dialogue Management
Automatic Knowledge Base Expansion for Dialogue Management
 
Attention is All You Need for AMR Parsing
Attention is All You Need for AMR ParsingAttention is All You Need for AMR Parsing
Attention is All You Need for AMR Parsing
 
Graph-to-Text Generation and its Applications to Dialogue
Graph-to-Text Generation and its Applications to DialogueGraph-to-Text Generation and its Applications to Dialogue
Graph-to-Text Generation and its Applications to Dialogue
 
Real-time Coreference Resolution for Dialogue Understanding
Real-time Coreference Resolution for Dialogue UnderstandingReal-time Coreference Resolution for Dialogue Understanding
Real-time Coreference Resolution for Dialogue Understanding
 
Topological Sort
Topological SortTopological Sort
Topological Sort
 
Tries - Put
Tries - PutTries - Put
Tries - Put
 
Multi-modal Embedding Learning for Early Detection of Alzheimer's Disease
Multi-modal Embedding Learning for Early Detection of Alzheimer's DiseaseMulti-modal Embedding Learning for Early Detection of Alzheimer's Disease
Multi-modal Embedding Learning for Early Detection of Alzheimer's Disease
 
Building Widely-Interpretable Semantic Networks for Dialogue Contexts
Building Widely-Interpretable Semantic Networks for Dialogue ContextsBuilding Widely-Interpretable Semantic Networks for Dialogue Contexts
Building Widely-Interpretable Semantic Networks for Dialogue Contexts
 
How to make Emora talk about Sports Intelligently
How to make Emora talk about Sports IntelligentlyHow to make Emora talk about Sports Intelligently
How to make Emora talk about Sports Intelligently
 
Text-to-SQL with Data-Driven Templates
Text-to-SQL with Data-Driven TemplatesText-to-SQL with Data-Driven Templates
Text-to-SQL with Data-Driven Templates
 
Resume Classification with Term Attention Embeddings
Resume Classification with Term Attention EmbeddingsResume Classification with Term Attention Embeddings
Resume Classification with Term Attention Embeddings
 
[DSA-Java] Heap Sort
[DSA-Java] Heap Sort[DSA-Java] Heap Sort
[DSA-Java] Heap Sort
 

Kürzlich hochgeladen

Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Scriptwesley chun
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Drew Madelung
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...Neo4j
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonetsnaman860154
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 

Kürzlich hochgeladen (20)

Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
How to convert PDF to text with Nanonets
How to convert PDF to text with NanonetsHow to convert PDF to text with Nanonets
How to convert PDF to text with Nanonets
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 

CS253: Shortest Path Algorithms (2019)

  • 1. Shortest Path Algorithm Data Structures and Algorithms Emory University Jinho D. Choi
  • 2. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 92 3 3 4 Dijkstra's Algorithm
  • 3. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 S T 2 3 3 4 Dijkstra's Algorithm
  • 4. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous S T 2 3 3 4 Dijkstra's Algorithm
  • 5. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T Visited 2 3 3 4 Dijkstra's Algorithm
  • 6. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 (5, 0) ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 2 3 3 4 Dijkstra's Algorithm
  • 7. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 5 2 3 3 4 Dijkstra's Algorithm
  • 8. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 (3, 3)5 5 2 3 3 4 Dijkstra's Algorithm
  • 9. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 (3, 3)5 5 2 3 3 4 Dijkstra's Algorithm
  • 10. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 (3, 3)5 5 9 5 (4, 9) 2 3 3 4 Dijkstra's Algorithm
  • 11. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 5 3 5 9 5 (4, 9) 2 3 3 4 Dijkstra's Algorithm
  • 12. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 5 3 13 53 (1, 13)9 5 (4, 9) 2 3 3 4 Dijkstra's Algorithm
  • 13. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 5 3 13 53 (1, 13)9 5 (4, 9) 2 3 3 4 Dijkstra's Algorithm
  • 14. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 5 3 13 53 (1, 13) (4, 7) 97 53 (4, 9) 2 3 3 4 Dijkstra's Algorithm
  • 15. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 5 3 13 53 (1, 13) 4 97 53 (4, 9) 2 3 3 4 Dijkstra's Algorithm
  • 16. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 5 3 13 53 (1, 13) 4 97 53 (4, 9) 10 4 (2, 10) 2 3 3 4 Dijkstra's Algorithm
  • 17. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 5 3 13 53 (1, 13) 4 97 53 10 4 (2, 10) 2 3 3 4 Dijkstra's Algorithm
  • 18. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 5 3 13 53 (1, 13) 4 97 53 10 4 2 2 3 3 4 Dijkstra's Algorithm
  • 19. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 5 3 13 53 (1, 13) 4 97 53 10 4 2 12 2 (0, 12) 2 3 3 4 Dijkstra's Algorithm
  • 20. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 5 3 13 53 (1, 13) 4 97 53 10 4 2 12 2 (0, 12) 2 3 3 4 Dijkstra's Algorithm
  • 21. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 5 3 13 53 (1, 13) 4 97 53 10 4 2 12 2 0 2 3 3 4 Dijkstra's Algorithm
  • 22. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 5 3 13 53 4 97 53 10 4 2 12 2 0 2 3 3 4 1 Dijkstra's Algorithm
  • 23. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 5 3 13 53 4 97 53 10 4 2 12 2 0 2 3 3 4 1 Dijkstra's Algorithm
  • 24. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 5 3 13 53 4 97 53 10 4 2 12 2 0 2 3 3 4 1 Dijkstra's Algorithm
  • 25. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 5 3 13 53 4 97 53 10 4 2 12 2 0 2 3 3 4 1 Dijkstra's Algorithm
  • 26. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 5 3 13 53 4 97 53 10 4 2 12 2 0 2 3 3 4 1 Dijkstra's Algorithm
  • 27. Emory University Logo Guidelines - 2 0 1 2 3 4 5 4 5 10 9 ∞ ∞ ∞ ∞ ∞ ∞ 0 1 2 3 4 5 Distance ∅ ∅ ∅ ∅ ∅ ∅Previous Queue S T 0 Visited 3 5 3 13 53 4 97 53 10 4 2 12 2 0 2 3 3 4 1 Dijkstra's Algorithm
  • 28. Emory University Logo Guidelines - Dijkstra's Algorithm 3 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited 21 12 4
  • 29. Emory University Logo Guidelines - Dijkstra's Algorithm 3 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 21 12 4
  • 30. Emory University Logo Guidelines - Dijkstra's Algorithm 3 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 (3, 0) 21 12 4
  • 31. Emory University Logo Guidelines - Dijkstra's Algorithm 3 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 21 3 12 4
  • 32. Emory University Logo Guidelines - Dijkstra's Algorithm 3 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 21 3 1 3 (1, 1)12 4
  • 33. Emory University Logo Guidelines - Dijkstra's Algorithm 3 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 21 3 1 3 (1, 1)12 4
  • 34. Emory University Logo Guidelines - Dijkstra's Algorithm 3 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 21 3 1 3 (1, 1) 2 3 (2, 2) 12 4
  • 35. Emory University Logo Guidelines - Dijkstra's Algorithm 3 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 21 3 1 3 2 3 (2, 2) 1 12 4
  • 36. Emory University Logo Guidelines - Dijkstra's Algorithm 3 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 21 3 1 3 2 3 (2, 2)1 3 1 (0, 3) 12 4
  • 37. Emory University Logo Guidelines - Dijkstra's Algorithm 3 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 21 3 1 3 2 3 1 3 1 (0, 3) 2 12 4
  • 38. Emory University Logo Guidelines - Dijkstra's Algorithm 3 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 21 3 1 3 2 3 1 3 1 2 0 12 4
  • 39. Emory University Logo Guidelines - Dijkstra's Algorithm 3 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 21 3 1 3 2 3 1 3 1 2 0 12 4
  • 40. Emory University Logo Guidelines - Dijkstra's Algorithm 3 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 21 3 1 3 2 3 1 3 1 2 0 12 4
  • 41. Emory University Logo Guidelines - Dijkstra's Algorithm 3 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 21 3 1 3 2 3 1 3 1 2 0 12 4
  • 42. Emory University Logo Guidelines - Dijkstra's Algorithm 3 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 21 3 1 3 2 3 1 3 1 2 0 12 4
  • 43. Emory University Logo Guidelines - Dijkstra's Algorithm 3 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 21 3 1 3 2 3 1 3 1 2 0 12 4
  • 44. Emory University Logo Guidelines - Dijkstra's Algorithm 4 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited 1 1 2 2 -4
  • 45. Emory University Logo Guidelines - Dijkstra's Algorithm 4 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 1 1 2 2 -4
  • 46. Emory University Logo Guidelines - Dijkstra's Algorithm 4 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 (3, 0)1 1 2 2 -4
  • 47. Emory University Logo Guidelines - Dijkstra's Algorithm 4 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 1 1 3 2 2 -4
  • 48. Emory University Logo Guidelines - Dijkstra's Algorithm 4 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 1 1 3 1 3 (1, 1) 2 2 -4
  • 49. Emory University Logo Guidelines - Dijkstra's Algorithm 4 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 1 1 3 1 3 (1, 1) 2 2 -4
  • 50. Emory University Logo Guidelines - Dijkstra's Algorithm 4 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 1 1 3 1 3 (1, 1) 2 3 (2, 2) 2 2 -4
  • 51. Emory University Logo Guidelines - Dijkstra's Algorithm 4 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 1 1 3 1 3 2 3 (2, 2) 1 2 2 -4
  • 52. Emory University Logo Guidelines - Dijkstra's Algorithm 4 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 1 1 3 1 3 2 3 (2, 2)1 3 1 (0, 3) 2 2 -4
  • 53. Emory University Logo Guidelines - Dijkstra's Algorithm 4 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 1 1 3 1 3 2 3 1 3 1 (0, 3) 2 2 2 -4
  • 54. Emory University Logo Guidelines - Dijkstra's Algorithm 4 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 1 1 3 1 3 2 3 1 3 1 (0, 3) 2 -2 2 (1, -2) 2 2 -4
  • 55. Emory University Logo Guidelines - Dijkstra's Algorithm 4 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 1 1 3 1 3 2 3 1 3 1 (0, 3) 2 -2 2 2 2 -4
  • 56. Emory University Logo Guidelines - Dijkstra's Algorithm 4 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 1 1 3 1 3 2 3 1 3 1 2 0 -2 2 2 2 -4
  • 57. Emory University Logo Guidelines - Dijkstra's Algorithm 4 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 1 1 3 1 3 2 3 1 3 1 2 0 -2 2 2 2 -4
  • 58. Emory University Logo Guidelines - Dijkstra's Algorithm 4 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 1 1 3 1 3 2 3 1 3 1 2 0 -2 2 2 2 -4
  • 59. Emory University Logo Guidelines - Dijkstra's Algorithm 4 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 1 1 3 1 3 2 3 1 3 1 2 0 -2 2 2 2 -4
  • 60. Emory University Logo Guidelines - Dijkstra's Algorithm 4 1 0 3 2 ∅∅∅∅Previous ∞∞∞∞Distance 0 1 2 3 QueueVisited TS 0 1 1 3 1 3 2 3 1 3 1 2 0 -2 2 2 2 -4
  • 61. Emory University Logo Guidelines - Vertex Distance Pair 5 private class VertexDistancePair implements Comparable<VertexDistancePair> { public int vertex; public double distance; public VertexDistancePair(int vertex, double distance) { this.vertex = vertex; this.distance = distance; } @Override public int compareTo(VertexDistancePair p) { double diff = this.distance - p.distance; if (diff > 0) return 1; if (diff < 0) return -1; return 0; } }
  • 62. Emory University Logo Guidelines - Dijkstra's Algorithm 6 public Integer[] getShortestPath(Graph graph, int source, int target) { PriorityQueue<VertexDistancePair> queue = new PriorityQueue<>(); Integer[] previous = new Integer[graph.size()]; double[] distances = new double[graph.size()]; Set<Integer> visited = new HashSet<>(); init(distances, previous, target); queue.add(new VertexDistancePair(target, distances[target])); while (!queue.isEmpty()) { // To be filled. } return previous; }
  • 63. Emory University Logo Guidelines - Dijkstra's Algorithm 6 public Integer[] getShortestPath(Graph graph, int source, int target) { PriorityQueue<VertexDistancePair> queue = new PriorityQueue<>(); Integer[] previous = new Integer[graph.size()]; double[] distances = new double[graph.size()]; Set<Integer> visited = new HashSet<>(); init(distances, previous, target); queue.add(new VertexDistancePair(target, distances[target])); while (!queue.isEmpty()) { // To be filled. } return previous; }
  • 64. Emory University Logo Guidelines - Dijkstra's Algorithm 6 public Integer[] getShortestPath(Graph graph, int source, int target) { PriorityQueue<VertexDistancePair> queue = new PriorityQueue<>(); Integer[] previous = new Integer[graph.size()]; double[] distances = new double[graph.size()]; Set<Integer> visited = new HashSet<>(); init(distances, previous, target); queue.add(new VertexDistancePair(target, distances[target])); while (!queue.isEmpty()) { // To be filled. } return previous; }
  • 65. Emory University Logo Guidelines - Dijkstra's Algorithm 7 private void init(double[] distances, Integer[] previous, int target) { for (int i=0; i<distances.length; i++) { if (i == target) distances[i] = 0; else { distances[i] = Double.MAX_VALUE; previous[i] = null; } } }
  • 66. Emory University Logo Guidelines - Dijkstra's Algorithm 7 private void init(double[] distances, Integer[] previous, int target) { for (int i=0; i<distances.length; i++) { if (i == target) distances[i] = 0; else { distances[i] = Double.MAX_VALUE; previous[i] = null; } } }
  • 67. Emory University Logo Guidelines - 8 while (!queue.isEmpty()) { VertexDistancePair u = queue.poll(); visited.add(u.vertex); for (Edge edge : graph.getIncomingEdges(u.vertex)) { int v = edge.getSource(); if (!visited.contains(v)) { double dist = distances[u.vertex] + edge.getWeight(); if (dist < distances[v]) { distances[v] = dist; previous [v] = u.vertex; queue.add(new VertexDistancePair(v, dist)); } } } }
  • 68. Emory University Logo Guidelines - 8 while (!queue.isEmpty()) { VertexDistancePair u = queue.poll(); visited.add(u.vertex); for (Edge edge : graph.getIncomingEdges(u.vertex)) { int v = edge.getSource(); if (!visited.contains(v)) { double dist = distances[u.vertex] + edge.getWeight(); if (dist < distances[v]) { distances[v] = dist; previous [v] = u.vertex; queue.add(new VertexDistancePair(v, dist)); } } } } Complexity?
  • 69. Emory University Logo Guidelines - Dijkstra's vs A* 9 private void init(double[] distances, Integer[] previous, int target) { for (int i=0; i<distances.length; i++) { if (i == target) distances[i] = 0; else { distances[i] = Double.MAX_VALUE; previous[i] = null; } } }
  • 70. Emory University Logo Guidelines - Dijkstra's vs A* 9 private void init(double[] distances, Integer[] previous, int target) { for (int i=0; i<distances.length; i++) { if (i == target) distances[i] = 0; else { distances[i] = Double.MAX_VALUE; previous[i] = null; } } } + heuristic(i, target);
  • 71. Emory University Logo Guidelines - 10 while (!queue.isEmpty()) { VertexDistancePair u = queue.poll(); visited.add(u.vertex); for (Edge edge : graph.getIncomingEdges(u.vertex)) { int v = edge.getSource(); if (!visited.contains(v)) { double dist = distances[u.vertex] + edge.getWeight(); if (dist < distances[v]) { distances[v] = dist; previous [v] = u.vertex; queue.add(new VertexDistancePair(v, dist)); } } } }
  • 72. Emory University Logo Guidelines - 10 while (!queue.isEmpty()) { VertexDistancePair u = queue.poll(); visited.add(u.vertex); for (Edge edge : graph.getIncomingEdges(u.vertex)) { int v = edge.getSource(); if (!visited.contains(v)) { double dist = distances[u.vertex] + edge.getWeight(); if (dist < distances[v]) { distances[v] = dist; previous [v] = u.vertex; queue.add(new VertexDistancePair(v, dist)); } } } } + heuristic(v, target);
  • 73. Emory University Logo Guidelines - A* Abstract Class 11 public abstract class AStar { public Integer[] getShortestPath(Graph graph, int source, int target) { PriorityQueue<VertexDistancePair> queue = new PriorityQueue<>(); Integer[] previous = new Integer[graph.size()]; double[] distances = new double[graph.size()]; Set<Integer> visited = new HashSet<>(); ... return previous; } } protected abstract double heuristic(int source, int target);
  • 74. Emory University Logo Guidelines - Dijkstra’s Algorithm 12 public class Dijkstra extends AStar { @Override protected double heuristic(int source, int target) { return 0; } }