41
INCREMENTAL TOPOLOGICAL ORDERING (AND CYCLE DETECTION) Bernhard Haeupler, Telikepalli Kavitha, Rogers Mathew, Siddhartha Sen, and Robert E. Tarjan

Incremental Topological Ordering (and Cycle Detection)

Embed Size (px)

Citation preview

Page 1: Incremental Topological Ordering (and Cycle Detection)

INCREMENTAL TOPOLOGICAL ORDERING(AND CYCLE DETECTION)

Bernhard Haeupler, Telikepalli Kavitha, Rogers Mathew, Siddhartha Sen, and Robert E. Tarjan

Page 2: Incremental Topological Ordering (and Cycle Detection)

Topological Ordering Input: directed graph G = (V, E) Goal: Find a total order of V so:

u < v there is no path from v to u in G If a graph has a cycle, this is impossible

Instead report that a cycle is detected

A

B

C

DE

Unique ordering: A < D < E < B < C

Page 3: Incremental Topological Ordering (and Cycle Detection)

Static algorithms If G is already known (fixed) then this

problem is easy: Remove one source/sink at a time If no sources/sinks then a cycle must exist Runs in O(m + n) (n vertices, m edges)

Page 4: Incremental Topological Ordering (and Cycle Detection)

What if G changes? Assume V is fixed, but E could change Three possibilities:

Incremental (edges are only added) Decremental (edges are only deleted) Dynamic (both)

Here we will deal only with the incremental case

Page 5: Incremental Topological Ordering (and Cycle Detection)

Goals Data structure that stores a topological

ordering for G After each edge insertion updates are fast

We assume m n

Compare: Running static algorithm after each edge

addition takes O(m2) total time

Page 6: Incremental Topological Ordering (and Cycle Detection)

Why is this useful? Two example applications:

1. Evaluation order in spreadsheets Topological order gives the order in which to

evaluate cells Cells may be added leading to new dependencies A cycle represents an error

2. Compilation order New files added to a project may introduce new

dependencies Compilation needs to proceed in topological

order

Page 7: Incremental Topological Ordering (and Cycle Detection)

Outline First approach: limited search

Improvements Analysis

A better way: two-way limited search Algorithm overview Example

Semi-ordered search Search in dense graphs

Example Conclusion

Page 8: Incremental Topological Ordering (and Cycle Detection)

Simple approach: “Limited search”

1. Maintain a topological order2. After an edge insertion (u, v):

a) Check whether u < v in the orderb) Otherwise, run a search from v to uc) If the search succeeds, report a cycled) Otherwise, we need to fix the order:

i. Move all visited vertices after unvisited vertices

ii. Order the visited vertices

Page 9: Incremental Topological Ordering (and Cycle Detection)

Making it better May have to search most of the graph each

time So this doesn’t improve on O(m2)

Improvement: When searching from v to u, we can ignore

vertices w with u < w How much time does it take now?

If (x, y) is traversed when searching from v, then x < u, so after (u, v) added it won’t be traversed again from v

So over all searches, at most O(mn) edges are traversed

Page 10: Incremental Topological Ordering (and Cycle Detection)

Doing the reordering Dynamic ordered list problem

Store a list of distinct elements, supporting: Order queries (x < y?) Insertions Deletions

Can be done in O(1) time per operation (Dietz & Sleator 1987)

With this structure the total time is O(mn)

Page 11: Incremental Topological Ordering (and Cycle Detection)

A better way: two-way search Instead of just searching v u, also search

u v, until: Either a common vertex is found Or we are sure there is no path possible

Maintain two sets: A contains forward vertices (those reached

forward from v) with untraversed outgoing edges

B contains backward vertices with untraversed incoming edges

Page 12: Incremental Topological Ordering (and Cycle Detection)

Two-way search algorithm Adding an edge (u, v) with v < u in the order Initialize:

Mark v forward, and add to A if it has an outgoing edge Mark u backward, and add to B if it has an incoming edge

Repeat until min(A) > max(B): Forward search:

Choose x in A and choose an untraversed edge (x, y) and mark traversed.

Possibly delete x from A. If y is backward, stop and report cycle. If y is unvisited, mark it forward and possibly add to A.

Backward search: Same as above, but opposite.

Page 13: Incremental Topological Ordering (and Cycle Detection)

Restoring order Search doesn’t find a cycle

So either A is empty, B is empty, or min(A) > max(B)

Set t = min(A) (or max(B) or u) Set F to all forward vertices < t Set R all backward vertices > t

Rearrange: If t is not forward (other case symmetric):

Move those in R after t, those in F after R Order those in R, F topologically

Page 14: Incremental Topological Ordering (and Cycle Detection)

Two-way search Example

ab

d

e

gf

c

vu

h

Original topological order: a, v, c, b, e, h, g, f, u, d

Page 15: Incremental Topological Ordering (and Cycle Detection)

Two-way search Example

ab

d

e

gf

c

vu

h

Original topological order: a, v, c, b, e, h, g, f, u, d

Adding new edge (u, v)

Page 16: Incremental Topological Ordering (and Cycle Detection)

Two-way search Example

ab

d

e

gf

c

vu

h

Original topological order: a, v, c, b, e, h, g, f, u, d

A: {v}B: {u}

Forward Backward

Page 17: Incremental Topological Ordering (and Cycle Detection)

Forward step

ab

d

e

gf

c

vu

h

Original topological order: a, v, c, b, e, h, g, f, u, d

A: {c}B: {u}

Forward Backward

Page 18: Incremental Topological Ordering (and Cycle Detection)

Backward step

ab

d

e

gf

c

vu

h

Original topological order: a, v, c, b, e, h, g, f, u, d

A: {c}B: {f}

Forward Backward

Page 19: Incremental Topological Ordering (and Cycle Detection)

Forward step

ab

d

e

gf

c

vu

h

Original topological order: a, v, c, b, e, h, g, f, u, d

A: {} is now empty, so we are doneB: {f}

Forward Backward

Page 20: Incremental Topological Ordering (and Cycle Detection)

Restoring order

ab

d

e

gf

c

vu

h

Original topological order: a, v, c, b, e, h, g, f, u, d

t = f, F = {v, c, b}, R = {u}

Forward Backward

Page 21: Incremental Topological Ordering (and Cycle Detection)

Restoring order

ab

d

e

gf

c

vu

h

Original topological order: a, v, c, b, e, h, g, f, u, d

t = f, F = {v, c, b}, R = {u}

Forward Backward

New topological order: a, e, h, g, f, u, v, c, b, d

Page 22: Incremental Topological Ordering (and Cycle Detection)

Which step to perform? In the example we alternated forward and

backward steps This is balanced search

To choose a vertex, choose the minimum vertex from A and the max from B This is ordered search

To implement, make A and B heaps Theorem 1: Ordered, balanced search does

O(m3/2) steps, so O(m3/2 log n) total

Page 23: Incremental Topological Ordering (and Cycle Detection)

Semi-ordered search Ordered search is too restrictive

Compatible search: Balanced search where the backward step is

compatible with preceding forward step If prev. forward step chose u, then backward step

can choose any z as long as u < z

Theorem 2: Compatible search does O(m3/2) steps.

Page 24: Incremental Topological Ordering (and Cycle Detection)

Proof of Theorem 2 The last search does O(m) steps. For the other searches, we count edge-edge

pairs. Let (w, x) and (y, z) be edges with w < z.

(w, x) traversed in forward step (y, z) traversed in backward step

The edge that was added creates a path from z through (u, v) to w

So these edges are on the same path But they weren’t before

Page 25: Incremental Topological Ordering (and Cycle Detection)

Proof of Theorem 2 – cont’d Let there be k backward steps Sort all edges (w, x) traversed in forward

steps on w Each edge has a “twin” edge (y, z)

w < z by compatibility Each edge forms a related pair with its

twin, and the twin of every following edge in the sorted order: O(k2) pairs

Page 26: Incremental Topological Ordering (and Cycle Detection)

Proof of Theorem 2 – cont’d For each search, two cases:

If it does < 2m1/2 forward steps: Then total time for all these searches is O(m3/2)

Otherwise: It increases number of pairs by O(k2) It does O(k) forward steps, increasing number

of edge pairs by O(km1/2) The total number of edge pairs is O(m2) So these searches also do O(m3/2) total

Page 27: Incremental Topological Ordering (and Cycle Detection)

Semi-ordered search conclusion Extra flexibility allows O(1) time per step

Use sets (represented as arrays) instead of heaps Use conservative estimates instead of the real

min(A), max(B) and t Thus O(m3/2) total time.

Lower bound: Any local incremental algorithm must spend (nm1/2) time. Local: only reorders vertices between v and u. So semi-ordered search optimal for sparse graphs.

Page 28: Incremental Topological Ordering (and Cycle Detection)

Dense graphs If m = (n2) then semi-ordered search is

no better than regular limited search

New approach: topological search Still a two-way search Main differences:

Balances vertices instead of edges Searches topological order Different reordering method

Page 29: Incremental Topological Ordering (and Cycle Detection)

Topological search Inserting a new edge (u, v) with u > v F = vertices reachable from v going forward, using

a current vertex x R = vertices from which u is reachable going

backward, using a current vertex y Initialization:

Set F = {v}, R = {u}, x = v, y = u Alternate until x = y:

Replace x by next vertex in order until there is an edge (w, x) with w in F. Then add x to F.

Replace y by prev. vertex in order until there is an edge (y, z) with z in R. Then add y to R.

Page 30: Incremental Topological Ordering (and Cycle Detection)

Topological Search Example

ab

d

e

gf

c

vu

h

Original topological order: a, v, c, b, e, h, g, f, u, d

Adding new edge (u, v)

Page 31: Incremental Topological Ordering (and Cycle Detection)

Topological Search Example

ab

d

e

gf

c

vu

h

Original topological order: a, v, c, b, e, h, g, f, u, d

F: {v} x = vR: {u} y = u

Forward Backward

Page 32: Incremental Topological Ordering (and Cycle Detection)

Topological Search Example

ab

d

e

gf

c

vu

h

Original topological order: a, v, c, b, e, h, g, f, u, d

F: {v, c} x = c, (v, c) is an edgeR: {u} y = u

Forward Backward

Page 33: Incremental Topological Ordering (and Cycle Detection)

Topological Search Example

ab

d

e

gf

c

vu

h

Original topological order: a, v, c, b, e, h, g, f, u, d

F: {v, c} x = cR: {u, f} y = f, (f, u) is an edge

Forward Backward

Page 34: Incremental Topological Ordering (and Cycle Detection)

Topological Search Example

ab

d

e

gf

c

vu

h

Original topological order: a, v, c, b, e, h, g, f, u, d

F: {v, c, b} x = b, (c, b) is an edgeR: {u, f} y = f

Forward Backward

Page 35: Incremental Topological Ordering (and Cycle Detection)

Topological Search Example

ab

d

e

gf

c

vu

h

Original topological order: a, v, c, b, e, h, g, f, u, d

F: {v, c, b} x = bR: {u, f, g} y = g, (g, f) is an edge

Forward Backward

Page 36: Incremental Topological Ordering (and Cycle Detection)

Topological Search Example

ab

d

e

gf

c

vu

h

Original topological order: a, v, c, b, e, h, g, f, u, d

F: {v, c, b} x = e, h, g STOP!R: {u, f, g} y = g

Forward Backward

Page 37: Incremental Topological Ordering (and Cycle Detection)

Vertex Reordering Could do it just like before, using t = x=

y as the “pivot” valuea

b

d

e

gf

c

vu

h

Original topological order: a, v, c, b, e, h, g, f, u, d

F: {v, c, b}, R = {u, f, g}, t = gNew topological order: a, e, h, g, f, u, v, c, b, d

Page 38: Incremental Topological Ordering (and Cycle Detection)

Why not? Doing reordering this way doesn’t give good

time bounds: (n3) in worst case We need a new reordering method Sketch:

Treat F as a queue of “violated” vertices which must be reordered

Repeat: Search through the topological order to find a

violated vertex, then add it to F Replace that vertex with an invalid vertex (Alternate, doing the same for R)

Page 39: Incremental Topological Ordering (and Cycle Detection)

Topological search analysis Analyzing the running time is tricky Analysis:

Runtime bounded by a constant times sum of distances of all vertex moves

To simplify, break down vertex moves into pairwise vertex swaps

Potential analysis: Any sequence of swaps has total distance O(n2.5)

Theorem 3: Topological search spends O(n2.5) time for all edge additions.

Page 40: Incremental Topological Ordering (and Cycle Detection)

Conclusion Semi-ordered search takes O(m3/2) Topological search takes O(n2.5)

But may be O(n2 log n) A different algorithm runs in O(n2 log n)

(Bender, Fineman, and Gilbert 2009) Exploits the idea of a partial order

Is the lower bound of (nm1/2) achievable for all graphs?

Page 41: Incremental Topological Ordering (and Cycle Detection)

THE ENDQuestions?