CS61C L16 Disks © UC Regents 1 CS161 Lecture 25 - Disks Laxmi Bhuyan bhuyan
Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs...
Transcript of Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs...
![Page 1: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/1.jpg)
Lecture 11
Weighted Graphs: Dijkstra and Bellman-Ford
1
NOTE: We didn’t actually get to Bellman-Ford!
We will do it next time.
![Page 2: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/2.jpg)
Announcements
• The Midterm is over!
• Congrats to everyone!
• We will work on grading them ASAP.
• HW5 is out today!
• Have a nice long weekend!
• Monday is Presidents’ day!
• My office hours are cancelled tomorrow morning.
• I’ll be out of town.
2
![Page 3: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/3.jpg)
Piazza Heroes
3
![Page 4: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/4.jpg)
4
![Page 5: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/5.jpg)
Previous two lectures
• Graphs!
• DFS
• Topological Sorting
• Strongly Connected Components
• BFS
• Shortest Paths in unweighted graphs
5
![Page 6: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/6.jpg)
Today
• What if the graphs are weighted?
• Part 1: Dijkstra!
• This will take most of today’s class
• Part 2: Bellman-Ford!
• Real quick at the end if we have time!
• We’ll come back to Bellman-Ford in more detail, so today is just a taste.
6
![Page 7: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/7.jpg)
CS161
Gates
Union
Dish
Stadium
Hospital
Caltrain
PackardYOU
ARE
HERE
7
![Page 8: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/8.jpg)
Just the graph
CS161
Gates
Union
Dish
Stadium
Hospital
Caltrain
Packard
8
![Page 9: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/9.jpg)
Shortest path from Gates to the Union?
CS161
Gates
Union
Dish
Stadium
Hospital
Caltrain
Packard
Run BFS …
I should go to the dish
and then back to the
union!
1
1
425
20
10
1017
15
22
That doesn’t make sense if I label
the edges by walking time.9
![Page 10: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/10.jpg)
CS161
Gates
Union
Dish
Stadium
Hospital
Caltrain
Packard
1
1
425
20
10
1017
15
22 If I pay attention to
the weights, I should
go to Packard, then
CS161, then the
union.
weighted
graph
w(u,v) = weight
of edge between
u and v.
For now, edge
weights are non-
negative.
Shortest path from Gates to the Union?
10
![Page 11: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/11.jpg)
Shortest path problem
• What is the shortest path between u and v in a weighted graph?• the cost of a path is the sum of the weights along that path
• The shortest path is the one with the minimum cost.
• The distance d(u,v) between two vertices u and v is the cost of the the shortest path between u and v.
• For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.
ts
3
1
202
This path from s to t
has cost 25.
112
This path is shorter,
it has cost 5.
=
11
![Page 12: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/12.jpg)
Shortest paths
CS161
Gates
Union
Dish
Stadium
Hospital
Caltrain
Packard1
1
425
20
10
1017
15
22
Q: What’s the shortest
path from Packard to
the Union?
This is the shortest
path from Gates to
the Union.
It has cost 6.
12
![Page 13: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/13.jpg)
Warm-up
• A sub-path of a shortest path is also a shortest path.
• Say this is a shortest path from s to t.
• Claim: this is a shortest path from s to x.
• Suppose not, this one is a shorter path from s to x.
• But then that gives an even shorter path from s to t!
s
x t
CO
NT
RA
DIC
TIO
N!!
13
![Page 14: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/14.jpg)
Single-source shortest-path problem
• I want to know the shortest path from one vertex (Gates) to all other vertices.
Destination Cost To get there
Packard 1 Packard
CS161 2 Packard-CS161
Hospital 10 Hospital
Caltrain 17 Caltrain
Union 6 Packard-CS161-Union
Stadium 10 Stadium
Dish 23 Packard-Dish
(Not necessarily stored as a table – how this information
is represented will depend on the application)14
![Page 15: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/15.jpg)
Example
• “what is the shortest path from Palo Alto to [anywhere else]” using BART, Caltrain, lightrail, MUNI, bus, Amtrak, bike, walking, uber/lyft.
• Edge weights have something to do with time, money, hassle.
15
![Page 16: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/16.jpg)
Example
• Network routing
• I send information
over the internet, from my computer to to all over the world.
• Each path has a cost which depends on link length, traffic, other costs, etc..
• How should we send packets?
16
![Page 17: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/17.jpg)
CS161
Gates
Union
Dish
Stadium
Hospital
Caltrain
Packard
Back to this example
18
![Page 18: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/18.jpg)
Dijkstra’s algorithm
• Finds shortest paths from Gates to everywhere else.
Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161
19
![Page 19: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/19.jpg)
Gates
UnionDishPackardCS161
YOINK!
Dijkstra intuition
20
![Page 20: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/20.jpg)
Gates
UnionDishPackardCS161
YOINK!
A vertex is done when it’s not
on the ground anymore.
Dijkstra intuition
21
![Page 21: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/21.jpg)
Gates
UnionDish
Packard
CS161
YOINK!
1
Dijkstra intuition
22
![Page 22: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/22.jpg)
Gates
Union
Packard
CS161
YOINK!
1
1
Dish
Dijkstra intuition
23
![Page 23: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/23.jpg)
Gates
Union
Packard
CS161
YOINK!
1
1
Dish
4
Dijkstra intuition
24
![Page 24: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/24.jpg)
Dijkstra intuition Gates
Union
Packard
CS161
YOINK!
1
1
Dish
422
25
![Page 25: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/25.jpg)
Dijkstra intuition Gates
Union
Packard
CS161
YOINK!
1
1
Dish
422
This creates a tree!
The shortest paths
are the lengths
along this tree.
26
![Page 26: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/26.jpg)
How do we actually implement this?
•Without string and gravity?
27
![Page 27: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/27.jpg)
Dijkstra by example Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161I’m not sure yet
I’m sure
How far is a node from Gates?
xx = d[v] is my best over-estimate
for dist(Gates,v).
∞
∞
∞
∞Initialize d[v] = ∞
for all non-starting vertices v,
and d[Gates] = 0
0
• Pick the not-sure node u with the
smallest estimate d[u].
28
![Page 28: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/28.jpg)
Dijkstra by example Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161I’m not sure yet
I’m sure
How far is a node from Gates?
x
0
∞
∞
∞
∞
• Pick the not-sure node u with the
smallest estimate d[u].
• Update all u’s neighbors v:
• d[v] = min( d[v] , d[u] + edgeWeight(u,v))
Current node u
x = d[v] is my best over-estimate
for dist(Gates,v).
29
![Page 29: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/29.jpg)
Dijkstra by example Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161I’m not sure yet
I’m sure
How far is a node from Gates?
x
0
∞
∞
25
1
• Pick the not-sure node u with the
smallest estimate d[u].
• Update all u’s neighbors v:
• d[v] = min( d[v] , d[u] + edgeWeight(u,v))
• Mark u as sure.
Current node u
x = d[v] is my best over-estimate
for dist(Gates,v).
30
![Page 30: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/30.jpg)
Dijkstra by example Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161I’m not sure yet
I’m sure
How far is a node from Gates?
x
0
∞
∞
25
1
• Pick the not-sure node u with the
smallest estimate d[u].
• Update all u’s neighbors v:
• d[v] = min( d[v] , d[u] + edgeWeight(u,v))
• Mark u as sure.
• Repeat
Current node u
x = d[v] is my best over-estimate
for dist(Gates,v).
31
![Page 31: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/31.jpg)
Dijkstra by example Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161I’m not sure yet
I’m sure
How far is a node from Gates?
x
0
∞
∞
25
1
• Pick the not-sure node u with the
smallest estimate d[u].
• Update all u’s neighbors v:
• d[v] = min( d[v] , d[u] + edgeWeight(u,v))
• Mark u as sure.
• Repeat
Current node u
x = d[v] is my best over-estimate
for dist(Gates,v).
Packard has three
neighbors. What happens
when we update them?
1 min. think; 1 min. share
32
![Page 32: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/32.jpg)
Dijkstra by example Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161I’m not sure yet
I’m sure
How far is a node from Gates?
x
0
2
∞
23
1
• Pick the not-sure node u with the
smallest estimate d[u].
• Update all u’s neighbors v:
• d[v] = min( d[v] , d[u] + edgeWeight(u,v))
• Mark u as sure.
• Repeat
Current node u
x = d[v] is my best over-estimate
for dist(Gates,v).
Packard has three
neighbors. What
happens when we
update them?
33
![Page 33: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/33.jpg)
Dijkstra by example Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161I’m not sure yet
I’m sure
How far is a node from Gates?
x
0
2
∞
23
1
• Pick the not-sure node u with the
smallest estimate d[u].
• Update all u’s neighbors v:
• d[v] = min( d[v] , d[u] + edgeWeight(u,v))
• Mark u as sure.
• Repeat
Current node u
x = d[v] is my best over-estimate
for dist(Gates,v).
34
![Page 34: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/34.jpg)
Dijkstra by example Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161I’m not sure yet
I’m sure
How far is a node from Gates?
x
0
2
∞
23
1
• Pick the not-sure node u with the
smallest estimate d[u].
• Update all u’s neighbors v:
• d[v] = min( d[v] , d[u] + edgeWeight(u,v))
• Mark u as sure.
• Repeat
Current node u
x = d[v] is my best over-estimate
for dist(Gates,v).
35
![Page 35: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/35.jpg)
Dijkstra by example Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161I’m not sure yet
I’m sure
How far is a node from Gates?
x
0
2
6
23
1
• Pick the not-sure node u with the
smallest estimate d[u].
• Update all u’s neighbors v:
• d[v] = min( d[v] , d[u] + edgeWeight(u,v))
• Mark u as sure.
• Repeat
Current node u
x = d[v] is my best over-estimate
for dist(Gates,v).
36
![Page 36: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/36.jpg)
Dijkstra by example Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161I’m not sure yet
I’m sure
How far is a node from Gates?
x
0
2
6
23
1
• Pick the not-sure node u with the
smallest estimate d[u].
• Update all u’s neighbors v:
• d[v] = min( d[v] , d[u] + edgeWeight(u,v))
• Mark u as sure.
• Repeat
Current node u
x = d[v] is my best over-estimate
for dist(Gates,v).
37
![Page 37: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/37.jpg)
Dijkstra by example Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161I’m not sure yet
I’m sure
How far is a node from Gates?
x
0
2
6
23
1
• Pick the not-sure node u with the
smallest estimate d[u].
• Update all u’s neighbors v:
• d[v] = min( d[v] , d[u] + edgeWeight(u,v))
• Mark u as sure.
• Repeat
Current node u
x = d[v] is my best over-estimate
for dist(Gates,v).
38
![Page 38: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/38.jpg)
Dijkstra by example Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161I’m not sure yet
I’m sure
How far is a node from Gates?
x
0
2
6
23
1Current node u
• Pick the not-sure node u with the
smallest estimate d[u].
• Update all u’s neighbors v:
• d[v] = min( d[v] , d[u] + edgeWeight(u,v))
• Mark u as sure.
• Repeat
x = d[v] is my best over-estimate
for dist(Gates,v).
39
![Page 39: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/39.jpg)
Dijkstra by example Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161I’m not sure yet
I’m sure
x
0
2
6
23
1
• Pick the not-sure node u with the
smallest estimate d[u].
• Update all u’s neighbors v:
• d[v] = min( d[v] , d[u] + edgeWeight(u,v))
• Mark u as sure.
• Repeat
Current node u
How far is a node from Gates?
x = d[v] is my best over-estimate
for dist(Gates,v).
40
![Page 40: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/40.jpg)
Dijkstra by example Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161I’m not sure yet
I’m sure
x
0
2
6
23
1
• Pick the not-sure node u with the
smallest estimate d[u].
• Update all u’s neighbors v:
• d[v] = min( d[v] , d[u] + edgeWeight(u,v))
• Mark u as sure.
• Repeat
Current node u
How far is a node from Gates?
x = d[v] is my best over-estimate
for dist(Gates,v).
41
![Page 41: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/41.jpg)
Dijkstra by example Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161I’m not sure yet
I’m sure
x
0
2
6
23
1
• Pick the not-sure node u with the
smallest estimate d[u].
• Update all u’s neighbors v:
• d[v] = min( d[v] , d[u] + edgeWeight(u,v))
• Mark u as sure.
• Repeat
Current node u
How far is a node from Gates?
x = d[v] is my best over-estimate
for dist(Gates,v).
• After all nodes are sure, say that d(Gates, v) = d[v] for all v42
![Page 42: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/42.jpg)
Dijkstra’s algorithm
• Set all vertices to not-sure
• d[v] = ∞ for all v in V
• d[s] = 0
• While there are not-sure nodes:
• Pick the not-sure node u with the smallest estimate d[u].
• For v in u.neighbors:
• d[v] ←min( d[v] , d[u] + edgeWeight(u,v))
• Mark u as sure.
• Now d(s, v) = d[v]
See IPython Notebook for code!
Lots of implementation details left un-explained.
We’ll get to that!
Dijkstra(G,s):
43
![Page 43: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/43.jpg)
As usual
• Does it work?
• Yes.
• Is it fast?
• Depends on how you implement it.
44
![Page 44: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/44.jpg)
Why does this work?
• Theorem: • Suppose we run Dijkstra on G =(V,E), starting from s.
• At the end of the algorithm, the estimate d[v] is the actual distance d(s,v).
• Proof outline:• Claim 1: For all v, d[v] ≥ d(s,v).
• Claim 2: When a vertex v is marked sure, d[v] = d(s,v).
• Claims 1 and 2 imply the theorem.• When v is marked sure, d[v] = d(s,v).
• d[v] ≥ d(s,v) and never increases, so after v is sure, d[v] stops changing.
• This implies that at any time after v is marked sure, d[v] = d(s,v).
• All vertices are sure at the end, so all vertices end up with d[v] = d(s,v).
Let’s rename “Gates” to
“s”, our starting vertex.
Next let’s prove the claims!
Claim 2
Claim 1 + def of algorithm
45
![Page 45: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/45.jpg)
Claim 1d[v] ≥ d(s,v) for all v.
• Every time we update d[v], we have a path in mind:
• d[v] = length of the path we have in mind
≥ length of shortest path
= d(s,v)
Gates
Union
Dish
Packard
1
1
425
20
22
CS161
0
2
∞
23
1
6
Informally:
Formally:
• We should prove this by induction.
• (See skipped slide or do it yourself)
Intuition!
d[v] ←min( d[v] , d[u] + edgeWeight(u,v) )
Whatever path we
had in mind beforeThe shortest path to u, and
then the edge from u to v.
46
![Page 46: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/46.jpg)
Claim 1d[v] ≥ d(s,v) for all v.
• Inductive hypothesis.
• After t iterations of Dijkstra,
d[v] ≥ d(s,v) for all v.
• Base case:
• At step 0, d s, s = 0, and 𝑑 𝑠, 𝑣 ≤ ∞
• Inductive step: say hypothesis holds for t.
• At step t+1:
• Pick u; for each neighbor v:
• d[v] ← min( d[v] , d[u] + w(u,v) )
Gates
Union
Dish
Packard
1
1
425
20
22
CS161
0
2
∞
23
1
u
v
6
By induction,
𝑑 𝑠, 𝑣 ≤ 𝑑[𝑣]
d 𝑠, 𝑣 ≤ 𝑑 𝑠, 𝑢 + 𝑑 𝑢, 𝑣≤ 𝑑[𝑢] + 𝑤 𝑢, 𝑣
using induction again for d[u]
≥ 𝑑(𝑠, 𝑣)
So the inductive
hypothesis holds
for t+1, and Claim
1 follows.
THIS SLIDE
SKIPPED IN CLASS
47
![Page 47: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/47.jpg)
Intuition for Claim 2When a vertex u is marked sure, d[u] = d(s,u)
• The first path that lifts u off the ground is the shortest one.
• Let’s prove it!
• Or at least see a proof outline.
Gates
Union
Packard
CS161
YOINK!
1
1
Dish
4
u
s
48
![Page 48: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/48.jpg)
Claim 2When a vertex u is marked sure, d[u] = d(s,u)
• Inductive Hypothesis: • When we mark the t’th vertex v as sure, d[v] = dist(s,v).
• Base case (t=1):• The first vertex marked sure is s, and d[s] = d(s,s) = 0.
• Inductive step:• Assume by induction that every v already marked sure has
d[v] = d(s,v).• Suppose that we are about to add u to the sure list.
• That is, we picked u in the first line here:
• Want to show that d[u] = d(s,u).
• Pick the not-sure node u with the smallest estimate d[u].
• Update all u’s neighbors v:
• d[v] ← min( d[v] , d[u] + edgeWeight(u,v))
• Mark u as sure.
• Repeat
49
(Assuming edge weights
are non-negative!)
Informal
outline!
![Page 49: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/49.jpg)
Claim 2Inductive step
• Want to show that u is good.
• Consider a true shortest path from s to u:
u
s
True shortest path.
Temporary definition:
v is “good” means that d[v] = d(s,v)
The vertices in between
are beige because they
may or may not be sure. 50
![Page 50: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/50.jpg)
Claim 2Inductive step
• Want to show that u is good.
• Say z is the last good vertex before u.
• z’ is the vertex after z.
u
s
True shortest path.
Temporary definition:
v is “good” means that d[v] = d(s,v)
means good means not good
The vertices in between
are beige because they
may or may not be sure.
z != u, since u is not good.
It may be that z’ = u.It may be that z = s. z
z’
“by way of contradiction”
u
BWOC, suppose u isn’t good.
51
![Page 51: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/51.jpg)
Claim 2Inductive step
• Want to show that u is good.
u
z’
zs
r
Temporary definition:
v is “good” means that d[v] = d(s,v)
means good means not good
𝑑 𝑧 = 𝑑 𝑠, 𝑧 ≤ 𝑑 𝑠, 𝑢 ≤ 𝑑[𝑢]z is good Subpaths of
shortest paths are
shortest paths.(We’re also using that
the edge weights are
non-negative here).
BWOC, suppose u isn’t good.
d(s,z)
d(s,u)
52
![Page 52: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/52.jpg)
Claim 2Inductive step
• Want to show that u is good.
u
z’
zs
r
Temporary definition:
v is “good” means that d[v] = d(s,v)
means good means not good
𝑑 𝑧 = 𝑑 𝑠, 𝑧 ≤ 𝑑 𝑠, 𝑢 ≤ 𝑑[𝑢]z is good Subpaths of
shortest paths are
shortest paths.
Claim 1
• Since u is not good, 𝑑 𝑧 ≠ 𝑑 𝑢 .
• So 𝑑 𝑧 < 𝑑 𝑢 , so z is sure. We chose u so that d[u] was
smallest of the unsure vertices.
BWOC, suppose u isn’t good.
53
![Page 53: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/53.jpg)
Claim 2Inductive step
• Want to show that u is good.
u
z’
zs
r
Temporary definition:
v is “good” means that d[v] = d(s,v)
means good means not good
𝑑 𝑧 = 𝑑 𝑠, 𝑧 ≤ 𝑑 𝑠, 𝑢 ≤ 𝑑[𝑢]z is good Subpaths of
shortest paths are
shortest paths.
Claim 1
• If 𝑑 𝑧 = 𝑑 𝑢 , then u is good.
• So 𝑑 𝑧 < 𝑑 𝑢 , so z is sure. We chose u so that d[u] was
smallest of the unsure vertices.
BWOC, suppose u isn’t good.
But u is not good!
54
![Page 54: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/54.jpg)
Claim 2Inductive step
• Want to show that u is good.
• If z is sure then we’ve already updated z’:
• 𝑑 𝑧′ ≤ 𝑑 𝑧 + 𝑤 𝑧, 𝑧.
= 𝑑 𝑠, 𝑧 + 𝑤(𝑧, 𝑧.)= 𝑑 𝑠, 𝑧.
≤ 𝑑[𝑧.]
Temporary definition:
v is “good” means that d[v] = d(s,v)
means good means not good
w(z,z’)
def of update
u
z’
zs
r
sub-paths of shortest paths are shortest paths
Claim 1 So d(s,z’) = d[z’] and so z’ is good.
CONTRADICTION!!
z
BWOC, suppose u isn’t good.
𝑑 𝑧′ ← 𝑚𝑖𝑛{ 𝑑 𝑧! , 𝑑 𝑧 + 𝑤 𝑧, 𝑧! }
By induction when z was added to
the sure list it had d(s,z) = d[z]
So u is good!
That is, the value of
d[z] when z was
marked sure…
55
![Page 55: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/55.jpg)
Claim 2When a vertex u is marked sure, d[u] = d(s,u)
• Inductive Hypothesis: • When we mark the t’th vertex v as sure, d[v] = dist(s,v).
• Base case:• The first vertex marked sure is s, and d[s] = d(s,s) = 0.
• Inductive step:• Suppose that we are about to add u to the sure list.
• That is, we picked u in the first line here:
• Assume by induction that every v already marked sure has d[v] = d(s,v).
• Want to show that d[u] = d(s,u).
• Pick the not-sure node u with the smallest estimate d[u].
• Update all u’s neighbors v:
• d[v] ← min( d[v] , d[u] + edgeWeight(u,v))
• Mark u as sure.
• Repeat
Back to this slide
Conclusion: Claim 2 holds!56
![Page 56: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/56.jpg)
Why does this work?
• Theorem:
• Run Dijkstra on G =(V,E) starting from s.
• At the end of the algorithm, the estimate d[v] is the actual distance d(s,v).
• Proof outline:
• Claim 1: For all v, d[v] ≥ d(s,v).
• Claim 2: When a vertex is marked sure, d[v] = d(s,v).
• Claims 1 and 2 imply the theorem.
Now back to this slide
57
![Page 57: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/57.jpg)
What have we learned?
• Dijkstra’s algorithm finds shortest paths in weighted graphs with non-negative edge weights.
• Along the way, it constructs a nice tree.
• We could post this tree in Gates!
• Then people would know how to get places quickly.
Gates
Union
Packard
CS161
1
1
Dish
422
YOINK!
58
![Page 58: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/58.jpg)
As usual
• Does it work?
• Yes.
• Is it fast?
• Depends on how you implement it.
59
![Page 59: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/59.jpg)
Running time?
• n iterations (one per vertex)
• How long does one iteration take?
Depends on how we implement it…
• Set all vertices to not-sure
• d[v] = ∞ for all v in V• d[s] = 0
• While there are not-sure nodes:
• Pick the not-sure node u with the smallest estimate d[u].
• For v in u.neighbors:
• d[v] ←min( d[v] , d[u] + edgeWeight(u,v) )
• Mark u as sure.
• Now dist(s, v) = d[v]
Dijkstra(G,s):
60
![Page 60: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/60.jpg)
We need a data structure that:
• Stores unsure vertices v
• Keeps track of d[v]
• Can find u with minimum d[u]
• findMin()
• Can remove that u
• removeMin(u)
• Can update (decrease) d[v]
• updateKey(v,d)
• Pick the not-sure node u with the
smallest estimate d[u].
• Update all u’s neighbors v:
• d[v] ← min( d[v] , d[u] +
edgeWeight(u,v))
• Mark u as sure.
0!∈#
𝑇 2indMin + 0$∈!.&'()*+,-.
𝑇 updateKey + 𝑇(removeMin)
= n( T(findMin) + T(removeMin) ) + m T(updateKey)
Total running time is big-oh of:
Just the inner loop:
61
![Page 61: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/61.jpg)
If we use an array
• T(findMin) = O(n)
• T(removeMin) = O(n)
• T(updateKey) = O(1)
• Running time of Dijkstra
=O(n( T(findMin) + T(removeMin) ) + m T(updateKey))
=O(n2) + O(m)
=O(n2)
62
![Page 62: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/62.jpg)
If we use a red-black tree
• T(findMin) = O(log(n))
• T(removeMin) = O(log(n))
• T(updateKey) = O(log(n))
• Running time of Dijkstra
=O(n( T(findMin) + T(removeMin) ) + m T(updateKey))
=O(nlog(n)) + O(mlog(n))
=O((n + m)log(n))
Better than an array if the graph is sparse!aka if m is much smaller than n263
![Page 63: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/63.jpg)
Heaps support these operations
• findMin
• removeMin
• updateKey
• A heap is a tree-based data structure that has the property that every node has a smaller key than its children.
• Not covered in this class – see CS166
• But! We will use them.
104
3
0
2
56
65
![Page 64: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/64.jpg)
Many heap implementations
Nice chart on Wikipedia:
66
![Page 65: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/65.jpg)
Say we use a Fibonacci Heap
• T(findMin) = O(1) (amortized time*)
• T(removeMin) = O(log(n)) (amortized time*)
• T(updateKey) = O(1) (amortized time*)
• See CS166 for more!
• Running time of Dijkstra
=O(n( T(findMin) + T(removeMin) ) + m T(updateKey))
=O(nlog(n) + m) (amortized time)
*This means that any sequence of d removeMin calls takes time at most O(dlog(n)).
But a few of the d may take longer than O(log(n)) and some may take less time..67
![Page 66: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/66.jpg)
In practice
See IPython Notebook for Lecture 11
The heap is implemented using heapdict
Dijkstra using a Python
list to keep track of
vertices has quadratic
runtime.
Dijkstra using a heap
looks a bit more linear
(actually nlog(n))
BFS is really fast by
comparison! But it
doesn’t work on
weighted graphs.68
![Page 67: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/67.jpg)
Dijkstra is used in practice
• eg, OSPF (Open Shortest Path First), a routing protocol for IP networks, uses Dijkstra.
But there are
some things it’s not so good at.
69
![Page 68: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/68.jpg)
Dijkstra Drawbacks
• Needs non-negative edge weights.
• If the weights change, we need to re-run the whole thing.
• in OSPF, a vertex broadcasts any changes to the network, and then every vertex re-runs Dijkstra’s algorithm from scratch.
70
![Page 69: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/69.jpg)
WE BASICALLY STOPPED HERE IN LECTURE!
• We’ll do Bellman-Ford in Lecture 12.
• (This slide added after lecture J ).
71
![Page 70: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/70.jpg)
Bellman-Ford algorithm
• (-) Slower than Dijkstra’s algorithm
• (+) Can handle negative edge weights.
• Can be useful if you want to say that some edges are actively good to take, rather than costly.
• Can be useful as a building block in other algorithms.
• (+) Allows for some flexibility if the weights change.
• We’ll see what this means later
72
![Page 71: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/71.jpg)
Today: intro to Bellman-Ford
• We’ll see a definition by example.
• We’ll come back to it next lecture with more rigor.
• Don’t worry if it goes by quickly today.
• There are some skipped slides with pseudocode, but we’ll see them again next lecture.
• Basic idea:
• Instead of picking the u with the smallest d[u] to update, just update all of the u’s simultaneously.
73
![Page 72: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/72.jpg)
Bellman-Ford algorithm
• d[v] = ∞ for all v in V
• d[s] = 0
• For i=0,…,n-1:
• For u in V:
• For v in u.neighbors:
• d[v] ←min( d[v] , d[u] + edgeWeight(u,v))
• While there are not-sure nodes:
• Pick the not-sure node u with the smallest estimate d[u].
• For v in u.neighbors:
• d[v] ←min( d[v] , d[u] + edgeWeight(u,v))
• Mark u as sure.
Compare to Dijkstra:
Bellman-Ford(G,s):
Instead of picking u cleverly,
just update for all of the u’s.
SLIDE SKIPPED IN
CLASS
74
![Page 73: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/73.jpg)
For pedagogical reasonswhich we will see next lecture
• We are actually going to change this to be less smart.
• Keep n arrays: d(0), d(1), …, d(n-1)
• d(i)[v] = ∞ for all v in V, for all i=0,…,n-1
• d(0)[s] = 0
• For i=0,…,n-2:
• For u in V:
• For v in u.neighbors:
• d(i+1)[v] ←min(d(i)[v] , d(i+1)[v], d(i)[u] + edgeWeight(u,v))
• Then dist(s,v) = d(n-1)[v]
Bellman-Ford*(G,s):
Slightly different than the original
Bellman-Ford algorithm, but the
analysis is basically the same.
SLIDE SKIPPED IN
CLASS
75
![Page 74: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/74.jpg)
Bellman-Ford Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161
How far is a node from Gates?
0
∞
∞
∞
∞
Start with the same graph, no
negative weights.
=
• For i=0,…,n-2:
• For u in V:
• For v in u.neighbors:
• d(i+1)[v] ←min(d(i)[v] , d(i+1)[v], d(i)[u] + edgeWeight(u,v))
∞0 ∞ ∞ ∞
Gates Packard CS161 Union Dish
d(0)
d(1)
d(2)
d(3)
d(4)
76
![Page 75: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/75.jpg)
Bellman-Ford Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161
How far is a node from Gates?
0
∞
∞
25
1
Start with the same graph, no
negative weights.
=
• For i=0,…,n-2:
• For u in V:
• For v in u.neighbors:
• d(i+1)[v] ←min(d(i)[v] , d(i+1)[v], d(i)[u] + edgeWeight(u,v))
∞
25
0 ∞ ∞ ∞
Gates Packard CS161 Union Dish
d(0)
0 1 ∞ ∞d(1)
d(2)
d(3)
d(4)
77
![Page 76: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/76.jpg)
Bellman-Ford Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161
How far is a node from Gates?
0
2
45
23
1
Start with the same graph, no
negative weights.
=
• For i=0,…,n-2:
• For u in V:
• For v in u.neighbors:
• d(i+1)[v] ←min(d(i)[v] , d(i+1)[v], d(i)[u] + edgeWeight(u,v))
∞
25
0 ∞ ∞ ∞
Gates Packard CS161 Union Dish
d(0)
0 1 ∞ ∞d(1)
0 1 2 45d(2) 23
d(3)
d(4)
78
![Page 77: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/77.jpg)
Bellman-Ford Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161
How far is a node from Gates?
0
2
6
23
1
Start with the same graph, no
negative weights.
=
• For i=0,…,n-2:
• For u in V:
• For v in u.neighbors:
• d(i+1)[v] ←min(d(i)[v] , d(i+1)[v], d(i)[u] + edgeWeight(u,v))
∞
25
0 ∞ ∞ ∞
Gates Packard CS161 Union Dish
d(0)
0 1 ∞ ∞d(1)
0 1 2 45d(2) 23
0 1 2 6d(3) 23
d(4)
79
![Page 78: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/78.jpg)
Bellman-Ford Gates
Union
Dish
Packard
1
1
4
25
20
22
CS161
How far is a node from Gates?
0
2
6
23
1
Start with the same graph, no
negative weights.
=
• For i=0,…,n-2:
• For u in V:
• For v in u.neighbors:
• d(i+1)[v] ←min(d(i)[v] , d(i+1)[v], d(i)[u] + edgeWeight(u,v))
∞
25
0 ∞ ∞ ∞
Gates Packard CS161 Union Dish
d(0)
0 1 ∞ ∞d(1)
0 1 2 45d(2) 23
0 1 2 6d(3) 23
0 1 2 6d(4)23
These are the final distances!
80
![Page 79: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/79.jpg)
As usual
• Does it work?
• Yes
• Idea to the right.
• (See hidden slides for details)
• Is it fast?
• Not really…
∞
25
0 ∞ ∞ ∞
Gates Packard CS161 Union Dish
d(0)
0 1 ∞ ∞d(1)
0 1 2 45d(2) 23
0 1 2 6d(3) 23
Idea: proof by induction.
Inductive Hypothesis:
d(i)[v] is equal to the cost of the
shortest path between s and v
with at most i edges.
Conclusion:
d(n-1)[v] is equal to the cost of the
shortest simple path between s
and v. (Since all simple paths
have at most n-1 edges).
0 1 2 6 23d(4)
81
A simple
path is a
path with
no cycles.
![Page 80: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/80.jpg)
Proof by induction
• Inductive Hypothesis:
• After iteration i, for each v, d(i)[v] is equal to the cost of the shortest path between s and v with at most i edges.
• Base case:
• After iteration 0…
• Inductive step:
Skipped in class
82
![Page 81: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/81.jpg)
Inductive step
• Suppose the inductive hypothesis holds for i.
• We want to establish it for i+1.
v
u
s
Let u be the vertex right
before v in this path.Say this is the shortest path between
s and v of with at most i+1 edges:
at most i edges
• By induction, d(i)[u] is the cost of a shortest path between s and u of i edges.
• By setup, d(i)[u] + w(u,v) is the cost of a shortest path between s and v of i+1 edges.
• In the i+1’st iteration, we ensure d(i+1)[v] <= d(i)[u] + w(u,v).
• So d(i+1)[v] <= cost of shortest path between s and v with i+1 edges.
• But d(i+1)[v] = cost of a particular path of at most i+1 edges >= cost of shortest path.
• So d[v] = cost of shortest path with at most i+1 edges.
w(u,v)
Hypothesis: After iteration i, for each v, d(i) [v] is
equal to the cost of the shortest path between s
and v with at most i edges.
Skipped in class
83
![Page 82: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/82.jpg)
Proof by induction
• Inductive Hypothesis:
• After iteration i, for each v, d(i)[v] is equal to the cost of the shortest path between s and v of length at most i edges.
• Base case:
• After iteration 0…
• Inductive step:
• Conclusion:
• After iteration n-1, for each v, d[v] is equal to the cost of the shortest path between s and v of length at most n-1 edges.
• Aka, d[v] = d(s,v) for all v as long as there are no negative
cycles!
Skipped in class
84
![Page 83: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/83.jpg)
Pros and cons of Bellman-Ford
• Running time: O(mn) running time
• For each of n steps we update m edges
• Slower than Dijkstra
• However, it’s also more flexible in a few ways.
• Can handle negative edges
• If we constantly do these iterations, any changes in the network will eventually propagate through.
85
![Page 84: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/84.jpg)
Wait a second…
• What is the shortest path from Gates to the Union?
Gates
Union
Dish
Packard
1
1
4
-3
10
-2
CS161
Cost: 6
86
![Page 85: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/85.jpg)
Wait a second…
• What is the shortest path from Gates to the Union?
Gates
Union
Dish
Packard
1
1
4
-3
10
-2
CS161
Cost: 2
87
![Page 86: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/86.jpg)
Negative edge weights?
• What is the shortest path from Gates to the Union?
• Shortest paths aren’t defined
if there are negative cycles!
Gates
Union
Dish
Packard
1
1
4
-3
10
-2
CS161
Cost: −∞
88
![Page 87: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/87.jpg)
Bellman-Ford and
negative edge weights
• B-F works with negative edge weights…as long as there are not negative cycles.
• A negative cycle is a path with the same start and end vertex whose cost is negative.
• However, B-F can detect negative cycles.
89
![Page 88: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/88.jpg)
Back to the correctness
• Does it work?
• Yes
• Idea to the right.
∞
25
0 ∞ ∞ ∞
Gates Packard CS161 Union Dish
d(0)
0 1 ∞ ∞d(1)
0 1 2 45d(2) 23
0 1 2 6d(3) 23
0 1 2 6d(4) 23
Idea: proof by induction.
Inductive Hypothesis:
d(i)[v] is equal to the cost of the
shortest path between s and v
with at most i edges.
Conclusion:
d(n-1)[v] is equal to the cost of the
shortest simple path between s
and v. (Since all simple paths
have at most n-1 edges).
If there are negative cycles,
then non-simple paths matter!
So the proof breaks for
negative cycles.
90
![Page 89: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/89.jpg)
B-F with negative cycles Gates
Union
Dish
Packard
1
1
-3
10
-2
CS161
• For i=0,…,n-2:
• For u in V:
• For v in u.neighbors:
• d(i+1)[v] ←min(d(i)[v] , d(i+1)[v], d(i)[u] + edgeWeight(u,v))
∞
-3
0 ∞ ∞ ∞
Gates Packard CS161 Union Dish
d(0)
0 1 ∞ ∞d(1)
0 -5 2 7d(2) -3
-4 -5 -4 6d(3) -34
This is not looking good!
92
![Page 90: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/90.jpg)
B-F with negative cycles Gates
Union
Dish
Packard
1
1
-3
10
-2
CS161
• For i=0,…,n-1:
• For u in V:
• For v in u.neighbors:
• d(i+1)[v] ←min(d(i)[v] , d(i+1)[v], d(i)[u] + edgeWeight(u,v))
∞
-3
0 ∞ ∞ ∞
Gates Packard CS161 Union Dish
d(0)
0 1 ∞ ∞d(1)
0 -5 2 7d(2) -3
-4 -5 -4 6d(3) -3
-4 -5 -4 6d(4)-7
4
But we can tell that it’s not looking good:
Some stuff changed!
-4 -9 -4 3d(5) -7
93
![Page 91: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/91.jpg)
How Bellman-Ford deals with negative cycles
• If there are no negative cycles: • Everything works as it should.• The algorithm stabilizes after n-1 rounds.
• Note: Negative edges are okay!!
• If there are negative cycles: • Not everything works as it should…
• it couldn’t possibly work, since shortest paths aren’t well-defined if there are negative cycles.
• The d[v] values will keep changing.
• Solution:• Go one round more and see if things change.
• If so, return NEGATIVE CYCLE L
• (Pseudocode on skipped slide)
94
![Page 92: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/92.jpg)
Bellman-Ford algorithm
• d(0)[v] = ∞ for all v in V
• d(0)[s] = 0
• For i=0,…,n-1:
• For u in V:
• For v in u.neighbors:
• d(i+1)[v] ←min(d(i)[v] , d(i+1)[v], d(i)[u] + edgeWeight(u,v))
• If d(n-1) != d(n) :
• Return NEGATIVE CYCLE L
• Otherwise, dist(s,v) = d(n-1)[v]
Bellman-Ford*(G,s):SLIDE SKIPPED IN CLASS
95
![Page 93: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/93.jpg)
• The Bellman-Ford algorithm:
• Finds shortest paths in weighted graphs with negative edge weights
• runs in time O(nm) on a graph G with n vertices and m edges.
• If there are no negative cycles in G:
• the BF algorithm terminates with d(n-1)[v] = d(s,v).
• If there are negative cycles in G:
• the BF algorithm returns negative cycle.
SummaryIt’s okay if that went by fast, we’ll come back to Bellman-Ford
96
![Page 94: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/94.jpg)
Bellman-Ford is also used in practice.
• eg, Routing Information Protocol (RIP) uses something like Bellman-Ford.
• Older protocol, not used as much anymore.
• Each router keeps a table of distances to every other router.
• Periodically we do a Bellman-Ford update.
• This means that if there are changes in the
network, this will propagate. (maybe slowly…)
Destination Cost to get
there
Send to
whom?
172.16.1.0 34 172.16.1.1
10.20.40.1 10 192.168.1.2
10.155.120.1 9 10.13.50.0
97
![Page 95: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/95.jpg)
Recap: shortest paths
• BFS:
• (+) O(n+m)
• (-) only unweighted graphs
• Dijkstra’s algorithm:• (+) weighted graphs
• (+) O(nlog(n) + m) if you implement it right.
• (-) no negative edge weights
• (-) very “centralized” (need to keep track of all the vertices to know which to update).
• The Bellman-Ford algorithm:• (+) weighted graphs, even with negative weights
• (+) can be done in a distributed fashion, every vertex using only information from its neighbors.
• (-) O(nm)98
![Page 96: Lecture 11web.stanford.edu/class/cs161/Lectures/Lecture11/Lecture...•For this lecture all graphs are directed, but to save on notation I’m just going to draw undirected edges.](https://reader034.fdocuments.in/reader034/viewer/2022042310/5ed8379a0fa3e705ec0e0dc2/html5/thumbnails/96.jpg)
Next Time
• Dynamic Programming!!!
• Pre-lecture exercise for Lecture 12
• Remember the Fibonacci numbers from HW1?
Before next time
99