Graphs + Shortest Paths David Kauchak cs302 Spring 2013.
-
Upload
gwen-walker -
Category
Documents
-
view
221 -
download
0
description
Transcript of Graphs + Shortest Paths David Kauchak cs302 Spring 2013.
Graphs + Shortest Paths
David Kauchakcs302
Spring 2013
Admin
Tree BFS
Running time of Tree BFSAdjacency list
How many times does it visit each vertex? How many times is each edge traversed? O(|V|+|E|)
Adjacency matrix For each vertex visited, how much work is done? O(|V|2)
BFS RecursivelyHard to do!
BFS for graphsWhat needs to change for graphs?
Need to make sure we don’t visit a node multiple times
B
D E
F
A
C
G
distance variable keeps track of how far from the starting node and whether we’ve seen the node yet
B
D E
F
A
C
G
B
D E
F
A
C
G
set all nodes as unseen
B
D E
F
A
C
G
check if the node has been seen
B
D E
F
A
C
G
set the node as seen and record distance
B
D E
F
A
C
G
B
D E
F
A
C
G
B
D E
F
A
C
G
0
Q: A
B
D E
F
A
C
G
0
Q:
B
D E
F
A
C
G
0 1
11
Q: D, E, B
B
D E
F
A
C
G
0 1
11
Q: E, B
B
D E
F
A
C
G
0 1
11
Q: B
B
D E
F
A
C
G
0 1
11
Q: B
B
D E
F
A
C
G
0 1
11
Q:
B
D E
F
A
C
G
0 1
11
Q:
B
D E
F
A
C
G
0 1
2
2
11
Q: F, C
B
D E
F
A
C
G
0 1
2
2 3
11
B
D E
F
A
C
G
0 1
2
2 3
11
B
D E
F
A
C
G
0 1
2
2 3
11
Is BFS correct?Does it visit all nodes reachable from the starting node?Can you prove it?
Assume we “miss” some node ‘u’, i.e. a path exists, but we don’t visit ‘u’
S … U
Is BFS correct?Does it visit all nodes reachable from the starting node?Can you prove it?
Find the last node along the path to ‘u’ that was visited
S … U… Z W
why do we know that such a node exists?
Is BFS correct?Does it visit all nodes reachable from the starting node?Can you prove it?
We visited ‘z’ but not ‘w’, which is a contradiction, given the pseudocode
S … U… Z W
contradiction
Is BFS correct?Does it correctly label each node with the shortest distance from the starting node?
Is BFS correct?Does it correctly label each node with the shortest distance from the starting node?
Assume the algorithm labels a node with a longer distance. Call that node ‘u’
S … U
Is BFS correct?Does it correctly label each node with the shortest distance from the starting node?
Find the last node in the path with the correct distance
S … U… Z W
correct incorrect
Is BFS correct?Does it correctly label each node with the shortest distance from the starting node?
Find the last node in the path with the correct distance
S … U… Z W
contradiction
Runtime of BFSNothing changed over our analysis of TreeBFS
Runtime of BFS
Adjacency list: O(|V| + |E|)Adjacency matrix: O(|V|2)
Depth First Search (DFS)
Depth First Search (DFS)
Tree DFS
A
B
C
ED
F G
Tree DFS
A
B
C
ED
F G
Tree DFS
A
B
C
ED
F G
Tree DFS
A
B
C
ED
F G
Tree DFS
A
B
C
ED
F G
Frontier?
Tree DFS
A
B
C
ED
F G
Tree DFS
A
B
C
ED
F G
Tree DFS
A
B
C
ED
F G
Tree DFS
A
B
C
ED
F G
DFS on graphs
DFS on graphs
mark all nodes as not visited
DFS on graphs
until all nodes have been visited repeatedly call DFS-Visit
DFS on graphs
What happened to the stack?
What does DFS do?Finds connected components
Each call to DFS-Visit from DFS starts exploring a new set of connected components
Helps us understand the structure/connectedness of a graph
Is DFS correct?
Does DFS visit all of the nodes in a graph?
Running time?
Like BFS Visits each node exactly once Processes each edge exactly twice (for an
undirected graph) O(|V|+|E|)
DAGsCan represent dependency graphs
underwear
pants
belt
shirt
tie
jacket
socks
shoes
watch
Topological sortA linear ordering of all the vertices such that for all edges (u,v) E, u appears before v in the ordering
An ordering of the nodes that “obeys” the dependencies, i.e. an activity can’t happen until it’s dependent activities have happened
underwear
pants
belt
shirt
tie
jacket
socks
shoes
watch
underwear
pants
belt
watch
shirt
tie
socks
shoes
jacket
Topological sort
Topological sort
underwear
pants
belt
shirt
tie
jacket
socks
shoes
watch
Topological sort
underwear
pants
belt
shirt
tie
jacket
socks
shoes
watch
Topological sort
underwear
pants
belt
shirt
tie
jacket
socks
shoes
watch
Topological sort
underwear
pants
belt
shirt
tie
jacket
socks
shoes
watch
Topological sort
underwear
pants
belt
shirt
tie
jacket
socks
shoes
watch
Topological sort
underwear
pants
belt
shirt
tie
jacket
socks
shoes
watch
Topological sort
underwear
pants
belt
shirt
tie
jacket
socks
shoes
watch
Topological sort
underwear
pants
belt
shirt
tie
jacket
socks
shoes
watch
…
Running time?
Running time?
O(|V|+|E|)
Running time?
O(E) overall
Running time?
How many calls? |V|
Running time?
Overall running time?
O(|V|2+|V| |E|)
Can we do better?
Topological sort 2
Topological sort 2
Topological sort 2
Topological sort 2
Running time?How many times do we process each node?How many times do we process each edge?
O(|V| + |E|)
Connectedness
Given an undirected graph, for every node u V, can we reach all other nodes in the graph?
Run BFS or DFS-Visit (one pass) and mark nodes as we visit them. If we visit all nodes, return true, otherwise false.
Running time: O(|V| + |E|)
Strongly connectedGiven a directed graph, can we reach any node v from any other node u?
Ideas?
Transpose of a graphGiven a graph G, we can calculate the transpose of a graph GR by reversing the direction of all the edges
A
B
C
ED
A
B
C
ED
G GR
Running time to calculate GR? O(|V| + |E|)
Strongly connected
Is it correct?What do we know after the first pass?
Starting at u, we can reach every node
What do we know after the second pass? All nodes can reach u. Why? We can get from u to every node in GR, therefore, if we reverse
the edges (i.e. G), then we have a path from every node to u
Which means that any node can reach any other node. Given any two nodes s and t we can create a path through u
s u t… …
Runtime?
O(|V| + |E|)
O(|V| + |E|)
O(|V| + |E|)
O(|V| + |E|)
O(|V|)
O(|V|)
Detecting cyclesUndirected graph
BFS or DFS. If we reach a node we’ve seen already, then we’ve found a cycle
Directed graph
A
BD
have to be careful
Detecting cyclesUndirected graph
BFS or DFS. If we reach a node we’ve seen already, then we’ve found a cycle
Directed graph Call TopologicalSort If the length of the list returned ≠ |V| then a cycle exists
Shortest pathsWhat is the shortest path from a to d?
A
B
C E
D
Shortest pathsBFS
A
B
C E
D
Shortest pathsWhat is the shortest path from a to d?
A
B
C E
D
1
1
3
2
23
4
Shortest pathsWe can still use BFS
A
B
C E
D
1
1
3
2
23
4
Shortest pathsWe can still use BFS
A
B
C E
D
1
1
3
2
23
4
A
B
C E
D
Shortest pathsWe can still use BFS
A
B
C E
D
Shortest pathsWhat is the problem?
A
B
C E
D
Shortest pathsRunning time is dependent on the weights
A
B
C4
1
2
A
B
C200
50
100
Shortest paths
A
B
C200
50
100
A
B
C
Shortest paths
A
B
C
Shortest paths
A
B
C
Shortest paths
A
B
C
Nothing will change as we expand the frontier until we’ve gone out 100 levels
Dijkstra’s algorithm
Dijkstra’s algorithm
Dijkstra’s algorithmprev keeps track of the shortest path
Dijkstra’s algorithm
Dijkstra’s algorithm
Dijkstra’s algorithm
A
B
C E
D
1
1
3
3
21
4
A
B
C E
D
1
1
3
3
21
4
A
B
C E
D
1
1
3
3
21
4
0
Heap
A 0B C D E
A
B
C E
D
1
1
3
3
21
4
0
Heap
B C D E
A
B
C E
D
1
1
3
3
21
4
0
Heap
B C D E
A
B
C E
D
1
1
3
3
21
4
1
0
Heap
C 1B D E
A
B
C E
D
1
1
3
3
21
4
1
0
Heap
C 1B D E
A
B
C E
D
1
1
3
3
21
4
3
1
0
Heap
C 1B 3D E
A
B
C E
D
1
1
3
3
21
4
3
1
0
Heap
C 1B 3D E
3
A
B
C E
D
1
1
3
21
4
3
1
0
Heap
B 3D E
3
A
B
C E
D
1
1
3
21
4
3
1
0
Heap
B 3D E
3
A
B
C E
D
1
1
3
21
4
3
1
0
Heap
B 3D E
3
A
B
C E
D
1
1
3
21
4
2
1
0
Heap
B 2D E
3
A
B
C E
D
1
1
3
21
4
2
1
0
Heap
B 2D E
3
A
B
C E
D
1
1
3
21
4
2
51
0
Heap
B 2E 5D
3
A
B
C E
D
1
1
3
21
4
2
51
0
Heap
B 2E 5D
Frontier?
3
A
B
C E
D
1
1
3
21
4
2
51
0
Heap
B 2E 5D
All nodes reachable from starting node within a given distance
3
A
B
C E
D
1
1
3
21
4
2 5
31
0
Heap
E 3D 5
3
A
B
C E
D
1
1
3
21
4
2 5
31
0
Heap
D 5
3
A
B
C E
D
1
1
3
21
4
2 5
31
0
Heap
A
B
C E
D
1
11
2 5
31
0
Heap
3