SlideShare a Scribd company logo
1 of 74
Download to read offline
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;
}
}

More Related Content

More from 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
 

More from 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
 

Recently uploaded

Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityIES VE
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxLoriGlavin3
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rick Flair
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfIngrid Airi González
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesThousandEyes
 

Recently uploaded (20)

Decarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a realityDecarbonising Buildings: Making a net-zero built environment a reality
Decarbonising Buildings: Making a net-zero built environment a reality
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptxPasskey Providers and Enabling Portability: FIDO Paris Seminar.pptx
Passkey Providers and Enabling Portability: FIDO Paris Seminar.pptx
 
Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...Rise of the Machines: Known As Drones...
Rise of the Machines: Known As Drones...
 
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
Generative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdfGenerative Artificial Intelligence: How generative AI works.pdf
Generative Artificial Intelligence: How generative AI works.pdf
 
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyesAssure Ecommerce and Retail Operations Uptime with ThousandEyes
Assure Ecommerce and Retail Operations Uptime with ThousandEyes
 

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; } }