28
Finding Paths in Graphs Robert Sedgewick Princeton University

Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

  • Upload
    others

  • View
    12

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Finding Paths in Graphs

Robert SedgewickPrinceton University

Page 2: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

is a fundamental operation that demands understanding

Ground rules for this talk• work in progress (more questions than answers)• analysis of algorithms• save “deep dive” for the right problem

Applications• graph-based optimization models• networks• percolation• computer vision• (many more)

Basic research• fundamental abstract operation with numerous applications• worth doing even if no immediate application• resist temptation to prematurely study impact

Finding a path in a graph

s

t

Page 3: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Motivating exampleFord-Fulkerson maxflow scheme

• find a path in a graph• augment flow along path (may create or delete edges)• iterate until no path exists

Goal: compare performance of two basic implementations• shortest augmenting path• maximum capacity augmenting path

Key steps in analysis• How many augmenting paths?• What is the cost of finding each path?

Page 4: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Motivating example: max flowCompare performance of Ford-Fulkerson implementations

• shortest augmenting path• maximum-capacity augmenting path

How many augmenting paths?

Bound on running time: multiply by E

worst case upper bound

shortest VE/2VM

max capacity 2ElgM

Page 5: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Motivating example: max flowCompare performance of Ford-Fulkerson implementations

• shortest augmenting path• maximum-capacity augmenting path

Example graph• V = 177 (vertices)• E = 2000 (edges)• M = 100 (max capacity)

How many augmenting paths?

Bound on running time: multiply by E

worst case upper bound for example

shortest VE/2VM

177,00017,700

max capacity 2ElgM 26,575

Page 6: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Motivating example: max flowCompare performance of Ford-Fulkerson implementations

• shortest augmenting path• maximum-capacity augmenting path

Example graph• V = 177 (vertices)• E = 2000 (edges)• M = 100 (max capacity)

How many augmenting paths?

Bound on running time: multiply by E

worst case upper bound for example actual

shortest VE/2VM

177,00017,700 37

max capacity 2ElgM 26,575 7

off by a factor of a million or more for thousand-node graphs!

Page 7: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Motivating example: max flowCompare performance of Ford-Fulkerson implementations

• shortest augmenting path• maximum-capacity augmenting path

How many augmenting paths?

Bound on running time: multiply by E

worst case upper bound

shortest VE/2VM

max capacity 2ElgM

WARNING: The Algorithm Generalhas determined that using such results to predict performance or to compare algorithms may be hazardous.

Page 8: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Analysis of graph algorithms

Goals• predict performance (running time)• guarantee that cost is below specified bounds

Common wisdom• random graph models are unrealistic• average-case analysis of algorithms is too difficult• worst-case performance bounds are the standard

Unfortunate truth about worst-case bounds• often useless for prediction (fictional)• often useless for guarantee (too high)• often misused to compare algorithms

Bounds are useful in plenty of applications:

Open problem: Do better!

worst-case bounds

actual costs

which ones??

Page 9: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Inner loop of Ford-Fulkerson (and many other algorithms)is to find a path in a graph

Several well-studied fundamental algorithms are known

Breadth-first search (BFS)• finds shortest path

Depth-first search (DFS)• easiest to implement

Union-Find (UF)• need second pass to find the path

Worst-case analysis is not useful for prediction• all three examine E edges in the worst case

Which basic algorithm should a practitioner use?

Starting point

s

t

Page 10: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Graph Models

Algorithm performance certainly depends on the graph

Initial choice: grid graphs• sufficiently challenging to be interesting• found in practice (or similar to graphs found in practice)• scalable• potential for analysis

Initial ground rules• algorithms should work for all graphs• algorithms should avoid obvious dependencies on model

s

t

s

t

...manyappropriatecandidates

complete random grid neighbor

s

t

s

t

Page 11: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Example 1: Statistical physics• percolation model• extensive simulations• some analytic results• arbitrarily huge graphs

Example 2: Image processing• model pixels in images• maxflow/mincut• energy minimization• huge graphs

Applications of grid graphs

conductivityconcretegranular materialsporous mediapolymersforest firesepidemicsInternetresistor networksevolutionsocial influenceFermi paradoxfractal geometrystereo visionimage restorationobject segmentationscene reconstruction...

s

t

s

t

Page 12: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Literature on similar problems

Percolation

Random walk

Nonselfintersecting paths in grids

Graph covering

??

Page 13: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

M by M grid of verticesUndirected edges connecting each vertex to its HV neighborssource vertex s at center of bottom boundary destination vertex t at center of top boundary

Find any path connecting s to t

Cost measure: number of graph edges examined

Finding an st-path in a grid graph

s

t M2 vertices

M vertices edges7 49 84

15 225 420

31 961 186063 3969 7812

127 16129 32004255 65025 129540

about 2M2 edges

Page 14: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Abstract data typesseparate clients from implementations

A data type is a set of values and the operations performed on themAn abstract data type is a data type whose representation is hidden

Implementation should not be tailored to particular client

Develop implementations that work properly for all clientsStudy their performance for the client at hand

Interface Clients Implementationsinvoke operations specifies how to invoke ops code that implements ops

Page 15: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Vertices are integers between 0 and V-1; edges are pairs of verticesGraph ADT implements

• Graph(Edge[]) to construct graph from array of edges• search(int, int) to conduct search from s to t• st(int) to return predecessor of v on path found

Graph abstract data type

int e = 0;Edge[] a = new Edge[E];for (int i = 0; i < V; i++) { if (i < V-M) a[e++] = new Edge(i, i+M); if (i >= M) a[e++] = new Edge(i, i-M); if ((i+1) % M != 0) a[e++] = new Edge(i, i+1); if (i % M != 0) a[e++] = new Edge(i, i-1); }GRAPH G = new GRAPH(a);G.search(M/2, V-1-M/2);for (int k = t; k != s; k = G.st(k)) System.out.println(s + “-” + t);

Example: client code for grid graphs

0 1 2 3 4

5 6 7 8 8

10 11 12 13 14

15 16 17 18 19

20 21 22 23 24

M = 5

s

t

Page 16: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Standard DFS implementation

for (int k = 0; k < E; k++) { int v = a[k].v, w = a[k].w; adj[v] = new Node(w, adj[v]); adj[w] = new Node(v, adj[w]); }

graph ADT constructor code

void searchR(int s, int t) { if (s == t) return; visited(s) = true; for(Node x = adj[s]; x != null; x = x.next) if (!visited[x.v]) searchR(x.v, t); }void search(int s, int t) { visited = new boolean[V]; searchR(s, t); }

DFS implementation (code to save path omitted)

0 1 2

3 4 5

6 7 8

4

7

7

4

graph representation

vertex-indexed array of linked lists

two nodes per edge

Page 17: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

cost strongly depends on trivial decision in client code!

Basic flaw in standard DFS scheme

...for (int i = 0; i < V; i++) { if ((i+1) % M != 0) a[e++] = new Edge(i, i+1); if (i % M != 0) a[e++] = new Edge(i, i-1); if (i < V-M) a[e++] = new Edge(i, i+M); if (i >= M) a[e++] = new Edge(i, i-M); }...

east, west, south, north north, south, west, east

order of thesestatementsdetermines

order in lists

order in listshas drastic effecton running time

s s

t t

~E/2 ~V1/2 bad newsfor ANY

graph model

Page 18: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Addressing the basic flaw

Advise the client to randomize the edges?• no, requires extra space• no, very poor software engineering

Randomize each edge list before use?• no, may not need the whole list

Solution: Use a randomized iterator

int N = adj[s].length;for(int i = 0; i < N; i++) { exch(adj[s], i, Math.random()*(N-i)); process vertex adj[s][i]; }

exch random vertex from adj[s][i+1 ... N]

with adj[s][i]

Note: leads to nonrandom adj listsfor undirected graphs

randomized iterator

int N = adj[s].length;for(int i = 0; i < N; i++) { process vertex adj[s][i]; }

standard iterator

represent graphwith arrays,

not lists

s

i N

s

i

N

i

s

Page 19: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Use of randomized iterators

Turns every graph algorithm into a randomized algorithm

Stabilizes algorithm performance

Yields well-defined and fundamental analytic problems• Average-case analysis of algorithm X for graph family Y(N)?• Distributions?• Full employment for algorithm analysts

s t

s

t

s

t

cost depends on problem not its representation

s

t

s

t

Page 20: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

(Revised) standard DFS implementation

for (int k = 0; k < E; k++) { int v = a[k].v, w = a[k].w; adj[v][deg[v]++] = w; adj[w][deg[w]++] = v; }

graph ADT constructor code

void searchR(int s, int t) { int N = adj[s].length; if (s == t) return; visited(s) = true; for(int i = 0; i < N; i++) { int v = exch(adj[s], i, Math.random()*(N-i)); if (!visited[v]) searchR(v, t); } }void search(int s, int t) { visited = new boolean[V]; searchR(s, t); }

DFS implementation (code to save path omitted)

0 1 2

3 4 5

6 7 8

4

7

7

4

graph representationvertex-indexed array of variable-length arrays

Page 21: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Standard BFS implementationUse a queue to hold fringe vertices

void searchC(int s, int t) { Queue Q = new Queue(); Q.put(s); visited[s] = true; while (!Q.empty()) { s = Q.get(); int N = adj[s].length; if (s == t) return; for (int i = 0; i < N; i++) { int v = exch(adj[s], i, Math.random()*(N-i)); if (!visited[v]) { Q.put(v); visited[v] = true; } } } }

while Q is nonempty

       get s from Q done if s = t for each unmarked v adj to s put v on Q mark v

unseen vertex

fringe vertex

tree vertex

FIFO queue for BFS

s

t

Generalized graph search: other queues yield other graph-search algorithms

randomized iterator

Page 22: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Union-Find implementation

1. Run union-find to find component containing s and t

2. Build subgraph with edges from that component3. Use DFS to find st-path in that subgraph

s

t

s

t

initialize array of iterators initialize UF array while s and t not in same component choose random iterator choose random edge for union

Page 23: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

for basic algorithms

DFS is substantially faster than BFS and UF

Analytic proof?

Faster algorithms available?

Empirical results

M V E BFS DFS UF7 49 168 .75 .32 1.05

15 225 840 .75 .45 1.02

31 961 3720 .75 .36 1.1463 3969 15624 .75 .32 1.05

127 16129 64008 .75 .40 .99255 65025 259080 .75 .42 1.08

BFS

DFS

UF

Page 24: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

for finding a path in a graph

Use two depth-first searches• one from the source• one from the destination• interleave the two

Examines 13% of the edges3-8 times faster than standard implementations

Not loglog N, but not bad!

A faster algorithm

M V E BFS DFS UF two7 49 168 .75 .32 1.05 .18

15 225 840 .75 .45 1.02 .13

31 961 3720 .75 .36 1.14 .1563 3969 15624 .75 .32 1.05 .14

127 16129 64008 .75 .40 .99 .13255 65025 259080 .75 .42 1.08 .12

Page 25: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

to finding a path in a graph

Other search algorithms• randomized? (no)• farthest-first?

Multiple searches• interleaving strategy?• merge strategy?• how many?• which algorithm?

Hybrid algorithms• which combination?• probabilistic restart?• merge strategy?• randomized choice?

Better than constant-factor improvement possible? Proof?

Other approaches

Page 26: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Use N searches• one from the source• one from the destination• N-2 from random vertices

Additional factor of two for N>2

Best method (by far): DFS with two searchers

Example: multiple searchers

2 3 4 5 10 20 40

.12

DFS

BFS

.70

frac

tion

of

edge

s ex

amin

ed

number of searchers

Page 27: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Answers• Randomization makes cost depend on graph, not representation.• DFS is faster than BFS or UF for finding paths in grid graphs.• Two DFSs are faster than 1 DFS — or N of them (!).

Questions• What is the BFS constant?• What is the UF constant?• What is the DFS constant?• Is two-way DFS sublinear?• If not, what is its constant?• Is some other algorithm sublinear?• Which methods adapt to digraphs?• What is the shape of the distribution for DFS?• How effective are these methods for other families of graphs?• How effective are these methods in applications?

More questions than answers

source

destination

Page 28: Finding Paths in Graphs - Princeton University Computer Sciencers/talks/PathsInGraphs.pdf · Finding Paths in Graphs Robert Sedgewick Princeton University. is a fundamental operation

Future research

Analysis• percolation• complete graphs• random graphs

Experimentation• other models• vary choice of s and t

Improved Ford-Fulkerson implementations• Idea 1: preprocess to order adj lists by distance to destination• Idea 2: restart st-search to mend broken path

Applications

s

t