directed acyclic graphs and topological sort cs16: introduction to data structures & algorithms...

35
DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

Upload: hugo-foster

Post on 06-Jan-2018

232 views

Category:

Documents


0 download

DESCRIPTION

Directed Acyclic Graphs (DAGs) A DAG is a graph that has two special properties: Directed: Each edge has an origin and a destination (visually represented by an arrow) directed not directed Acyclic: There is no way to start at a vertex and end up at the same vertex by traversing edges. There are no ‘cycles’ Which of these have cycles? Tuesday, March 10, B A B A A C D B A C D B A B yesnoyes

TRANSCRIPT

Page 1: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

1

DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT

CS16: Introduction to Data Structures & Algorithms

Tuesday, March 10, 2015

Page 2: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

2

Outline1) Directed Acyclic Graphs2) Topological sort

1) Run-Through2) Pseudocode3) Runtime Analysis

Tuesday, March 10, 2015

Page 3: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

Directed Acyclic Graphs (DAGs)• A DAG is a graph that has two special properties:

• Directed: Each edge has an origin and a destination (visually represented by an arrow)

directed not directed

• Acyclic: There is no way to start at a vertex and end up at the same vertex by traversing edges. There are no ‘cycles’

• Which of these have cycles?

Tuesday, March 10, 2015 3

B A B A

A

C

D

B A

C

D

B A B

yes no yes

Page 4: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

4

Directed Acyclic Graphs (DAGs) (2)• DAGs are often used to model situations in which one element

must come before another (course prerequisites, small tasks in a big project, etc.)

• Sources are vertices that have no incoming edges (no edges point to them)• “socks” and “underwear” are sources

• Sinks are vertices that have no outgoing edges (no edges have that vertex as their origin)• “shoes” and “belt”

• In-degree of a node is number of incoming edges• Out-degree of a node is number of outgoing edges

Tuesday, March 10, 2015

socks

pants

shoes

belt

Ex: Getting Dressed

under-wear

Page 5: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

33

Example DAG – Brown CS Course Prerequisites

1615

123 224

141 241

22

Sink

Source

Tuesday, March 10, 2015 5

Page 6: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

6

Intro to…• Imagine that you are a CS concentrator trying to plan your courses for the next three years…

• How might you plan the order in which to take these courses?

• Topological sort! That’s how!

Tuesday, March 10, 2015

Page 7: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

7

Topological Sort• Topological ordering

• Ordering of vertices in a DAG• For each vertex v, all of v’s

“prerequisite” vertices are before v

• Topological sort• Given a DAG, produce a

topological ordering!• If you lined up all vertices in

topological order, all edges would point to the right

• One DAG can have multiple valid topological orderings

Tuesday, March 10, 2015

16

15

141

22

Valid Topological Orderings:1. 15, 22, 16, 1412. 15, 16, 22, 1413. 22, 15, 16, 141

Sink

Source

1615 14122

Page 8: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

8

Top Sort: General Approach• If a node is a source, there are no prerequisites, so we can visit it!

• Once we visit a node, we can delete all of its outgoing edges

• Deleting edges might create new sources, which we can now visit!

• Data Structures Needed:• DAG we’re top-sorting• Set of all sources (represented by a stack)• List for our topological ordering

Tuesday, March 10, 2015

Page 9: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

9

Topological Sort Run-Through

Tuesday, March 10, 2015

List:

33

1615

123 224

141 241

22

Stack

Page 10: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

10

Topological Sort Run-Through (2)

Tuesday, March 10, 2015

33

1615

123 224

141 241

22

StackList:

First: Populate Stack

15

22

Page 11: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

11

Topological Sort Run-Through (3)

Tuesday, March 10, 2015

33

1615

123 224

141 241

22

StackList:

Next: Pop element from stack and add to list

15

Page 12: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

12

Topological Sort Run-Through (4)

Tuesday, March 10, 2015

33

1615

123 224

141 241

22

StackList:

Next: Remove outgoing edges and check the correspondingvertices

15

Page 13: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

13

Topological Sort Run-Through (5)

Tuesday, March 10, 2015

33

1615

123 224

141 241

22

StackList:

Next: Since 141 still has an incoming edge, move to next element on the stack

15

# incident edges: 1

Page 14: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

14

Topological Sort Run-Through (6)

Tuesday, March 10, 2015

33

1615

123 224

141 241

22

StackList:

Next: Pop the next element off the stack and repeat this process until the stack is empty

15

Page 15: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

15

Topological Sort Run-Through (7)

Tuesday, March 10, 2015

33

1615

123 224

141 241

22

StackList:

# incident edges: 0

This time, since 16 has an inDegree of 0, push it on the stack

Page 16: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

16

Topological Sort Run-Through (8)

Tuesday, March 10, 2015

33

1615

123 224

141 241

22

StackList:

Rinse and repeat!

16

Page 17: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

17

Topological Sort Run-Through (9)

Tuesday, March 10, 2015

33

1615

123 224

141 241

22

StackList:

# incident edges: 0

# incident edges: 0

16

Page 18: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

18

Stack

Topological Sort Run-Through (10)

Tuesday, March 10, 2015

33

1615

123 224

141 241

22

List: 16

141

33

Page 19: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

19

Topological Sort Run-Through (12)

Tuesday, March 10, 2015

33

1615

123 224

141 241

22

StackList: 16 33

141

# incident edges: 0

Page 20: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

20

Topological Sort Run-Through (13)

Tuesday, March 10, 2015

33

1615

123 224

141 241

22

StackList: 16 33

141

123

Page 21: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

21

Topological Sort Run-Through (14)

Tuesday, March 10, 2015

33

1615

123 224

141 241

22

StackList: 16 33 123

141

# incident edges: 0

Page 22: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

22

Topological Sort Run-Through (15)

Tuesday, March 10, 2015

33

1615

123 224

141 241

22

StackList: 16 33 123

141

224

Page 23: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

23

Topological Sort Run-Through (16)

Tuesday, March 10, 2015

33

1615

123 224

141 241

22

StackList: 16 33 123 224

141

Page 24: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

24

Topological Sort Run-Through (17)

Tuesday, March 10, 2015

33

1615

123 224

141 241

22

Stack

List: 16 33 123 224 141

# incident edges: 0

Page 25: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

25

Topological Sort Run-Through (18)

Tuesday, March 10, 2015

33

1615

123 224

141 241

22

Stack

List: 16 33 123 224 141

241

Page 26: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

26

Topological Sort Run-Through (19)

Tuesday, March 10, 2015

33

1615

123 224

141 241

22

Stack

List:

All done!

16 33 123 224 141 241

Page 27: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

27

Top Sort Pseudocode

Tuesday, March 10, 2015

function topological_sort(G)://Input: A DAG G//Output: A list of the vertices of G in topological order

S = Stack() L = List() for each vertex in G : if vertex has no incident edges: S.push(vertex) while S is not empty: v = S.pop()L.append(v)for each outgoing edge e from v:w = e.destinationdelete eif w has no incident edges:S.push(w)

return L

Page 28: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

28

Top Sort Runtime• So, what’s the runtime?• Let’s consider the major steps:1. Create a set of all sources.2. While the set isn’t empty,

• Remove a vertex from the set and add it to the sorted list

• For every edge from that vertex:• Delete the edge from the graph• Check all of its destination vertices and

add them to the set if they have no incoming edges

Tuesday, March 10, 2015

Page 29: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

Top Sort Runtime• So, what’s the runtime?• Let’s consider the major steps:1. Create a set of all sources.2. While the set isn’t empty,

• Remove a vertex from the set and add it to the sorted list

• For every edge from that vertex:• Delete the edge from the graph• Check all of its destination vertices

and add them to the set if they have no incoming edges

Tuesday, March 10, 2015 29

Step 1 requires looping through all of the vertices to find those with no incident edges – O(|V|)

Page 30: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

Top Sort Runtime• So, what’s the runtime?• Let’s consider the major steps:1. Create a set of all sources.2. While the set isn’t empty,

• Remove a vertex from the set and add it to the sorted list

• For every edge from that vertex:• Delete the edge from the graph• Check all of its destination vertices

and add them to the set if they have no incoming edges

Tuesday, March 10, 2015 30

Step 2 also requires looping through every vertex, but also looks at edges. Since you only visit the edges that begin at that vertex, every edge gets visited only once. Thus, the runtime for this section is O(|V| + |E|).

Step 1 requires looping through all of the vertices to find those with no incident edges – O(|V|)

Page 31: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

31

• Overall, this makes the algorithm run in O(|V|) + O(|V| + |E|) = O(2*|V| + |E|) = O(|V| + |E|) time.

Top Sort Runtime• So, what’s the runtime?• Let’s consider the major steps:1. Create a set of all sources.2. While the set isn’t empty,

• Remove a vertex from the set and add it to the sorted list

• For every edge from that vertex:• Delete the edge from the graph• Check all of its destination vertices

and add them to the set if they have no incoming edges

Tuesday, March 10, 2015 31

Step 2 also requires looping through every vertex, but also looks at edges. Since you only visit the edges that begin at that vertex, every edge gets visited only once. Thus, the runtime for this section is O(|V| + |E|).

Step 1 requires looping through all of the vertices to find those with no incident edges – O(|V|)

Page 32: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

32

Top Sort Pseudocode – O(|V| + |E|)

Tuesday, March 10, 2015

function topological_sort(G)://Input: A DAG G//Output: A list of the vertices of G in topological order

S = Stack() L = List() for each vertex in G : O(|V|) if vertex has no incident edges: S.push(vertex) while S is not empty: O(|V| + |E|)v = S.pop()L.append(v)for each outgoing edge e from v:w = e.destinationdelete eif w has no incident edges:S.push(w)

return L

Page 33: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

33

Top Sort Variations• What if we’re not allowed to remove edges from the input graph?

• That’s okay! Just use decorations.• In the beginning: decorate each vertex with its in-degree• Instead of removing an edge, just decrement the in-

degree of the destination node. When the in-degree reaches 0, push it onto the stack!

Tuesday, March 10, 2015

Page 34: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

34

Top Sort Variations (2)• Do we need to use a stack in topological sort?

• Nope! Any data structure would do: queue, list, set, etc…

• Different data structures produce different valid orderings. But why do they all work?• A node is only added to the data structure when it’s

degree reaches 0 – i.e. when all of its “prerequisite” nodes have been processed and added to the final output list. This is an invariant throughout the course of the algorithm, so a valid topological order is always guaranteed!

Tuesday, March 10, 2015

Page 35: DIRECTED ACYCLIC GRAPHS AND TOPOLOGICAL SORT CS16: Introduction to Data Structures & Algorithms Tuesday, March 10, 2015 1

35

Top Sort: Why only on DAGs?• When is there no valid topological ordering?

• I need experience to get a job…I need a job to get experience…I need experience to get a job…I need a job to get experience…Uh oh!

• If there is a cycle there is no valid topological ordering!

• In fact, we can actually use topological sort to see if a graph contains a cycle• If there are still edges left in the graph at the end of the

algorithm, that means there must be a cycle.

Tuesday, March 10, 2015

Job Experience