SlideShare a Scribd company logo
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 Resolution
Jinho 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 Representation
Jinho Choi
 
Semantic Role Labeling
Semantic Role LabelingSemantic Role Labeling
Semantic Role Labeling
Jinho Choi
 
CKY Parsing
CKY ParsingCKY Parsing
CKY Parsing
Jinho Choi
 
CS329 - WordNet Similarities
CS329 - WordNet SimilaritiesCS329 - WordNet Similarities
CS329 - WordNet Similarities
Jinho Choi
 
CS329 - Lexical Relations
CS329 - Lexical RelationsCS329 - Lexical Relations
CS329 - Lexical Relations
Jinho 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 Management
Jinho 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 Parsing
Jinho 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 Dialogue
Jinho 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 Understanding
Jinho Choi
 
Topological Sort
Topological SortTopological Sort
Topological Sort
Jinho Choi
 
Tries - Put
Tries - PutTries - Put
Tries - Put
Jinho 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 Disease
Jinho 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 Contexts
Jinho 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 Intelligently
Jinho 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 Templates
Jinho Choi
 
Resume Classification with Term Attention Embeddings
Resume Classification with Term Attention EmbeddingsResume Classification with Term Attention Embeddings
Resume Classification with Term Attention Embeddings
Jinho Choi
 
[DSA-Java] Heap Sort
[DSA-Java] Heap Sort[DSA-Java] Heap Sort
[DSA-Java] Heap Sort
Jinho 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

By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
Pierluigi Pugliese
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
Product School
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
Alison B. Lowndes
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
BookNet Canada
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
Jemma Hussein Allen
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Product School
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
UiPathCommunity
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
DanBrown980551
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
ThousandEyes
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Thierry Lestable
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
nkrafacyberclub
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Aggregage
 
Quantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIsQuantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIs
Vlad Stirbu
 
Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.
ViralQR
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
Peter Spielvogel
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
Sri Ambati
 

Recently uploaded (20)

By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024By Design, not by Accident - Agile Venture Bolzano 2024
By Design, not by Accident - Agile Venture Bolzano 2024
 
How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...How world-class product teams are winning in the AI era by CEO and Founder, P...
How world-class product teams are winning in the AI era by CEO and Founder, P...
 
Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........Bits & Pixels using AI for Good.........
Bits & Pixels using AI for Good.........
 
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...Transcript: Selling digital books in 2024: Insights from industry leaders - T...
Transcript: Selling digital books in 2024: Insights from industry leaders - T...
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
The Future of Platform Engineering
The Future of Platform EngineeringThe Future of Platform Engineering
The Future of Platform Engineering
 
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
Unsubscribed: Combat Subscription Fatigue With a Membership Mentality by Head...
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
Le nuove frontiere dell'AI nell'RPA con UiPath Autopilot™
 
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
LF Energy Webinar: Electrical Grid Modelling and Simulation Through PowSyBl -...
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdfFIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
FIDO Alliance Osaka Seminar: The WebAuthn API and Discoverable Credentials.pdf
 
Assuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyesAssuring Contact Center Experiences for Your Customers With ThousandEyes
Assuring Contact Center Experiences for Your Customers With ThousandEyes
 
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
Empowering NextGen Mobility via Large Action Model Infrastructure (LAMI): pav...
 
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptxSecstrike : Reverse Engineering & Pwnable tools for CTF.pptx
Secstrike : Reverse Engineering & Pwnable tools for CTF.pptx
 
Generative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to ProductionGenerative AI Deep Dive: Advancing from Proof of Concept to Production
Generative AI Deep Dive: Advancing from Proof of Concept to Production
 
Quantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIsQuantum Computing: Current Landscape and the Future Role of APIs
Quantum Computing: Current Landscape and the Future Role of APIs
 
Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.Welocme to ViralQR, your best QR code generator.
Welocme to ViralQR, your best QR code generator.
 
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdfSAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
SAP Sapphire 2024 - ASUG301 building better apps with SAP Fiori.pdf
 
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
GenAISummit 2024 May 28 Sri Ambati Keynote: AGI Belongs to The Community in O...
 

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