Topological Sort

Announcements





Exam Next week
Review on Monday in
class.
Review on
Wednesday in lab.
DisjointSets lab
program due tonight.
BucketSort lab due
next Wednesday.
On Monday…


Radix Sort
2 proofs:
◦ A Lower bound for
comparison based
sorting.
◦ A lower bound for
swapping adjacent
elements.

Graphs
◦ Definitions
◦ DFS
◦ BFS
Today
Quick review of DFS and BFS
 Topological Sort
 Intro to Dijkstra’s

Output
List:
Depth First Search
1
2
4
3
1
7
2
6
10
5
6
3
4
13
9
11
8
8
10
5
11
15
14
12
15
13
7
9
12
14
Start with 1
 2,4,3

◦ Stop at 3
Backtrack to 4, can we search?
 7,6

Backtrack to 10,6,7
 9, 11, 8, 5

◦ Stop at 5
◦ Stop at 2
Backtrack to 6, can we search?
 10,13

◦ Stop at 13


Backtrack to 8,11
15,14,12
◦ STOP – All nodes are marked!!
Depth First Search – Real Life Application
From
xkcd.com
Breadth First Search
1
2
5
6
3





L0:
L1:
L2:
L3:
L4:
4
7
8
10
11
15
13
9
12
14
1
2, 3
4,5,6,11
7,8,10,9,15
13,12,14
Final output: 1, 2, 3, 4, 5, 6, 11, 7, 8, 10, 9, 15, 13, 12, 14
Topological Sort
Topological Sort

The goal of a Topological Sort:
◦ When given a list of items with dependencies (i.e.
item 5 must be completed before item 3, etc.)
◦ Produce an ordering of the items that satisfies the
given constraints.

In order for the problem to be solvable, there
can’t be a cyclic set of constraints.
◦ We can’t have item 5 must be completed before
item 3, item 3 must be completed before item 7, and
item 7 must be completed before item 5.
 Since that would be IMPOSSIBLE!!
Topological Sort

We can model dependencies (or
constraints) like these using




◦ A Directed Acyclic Graph

◦ The constraints would be




Given a set of items and
constraints, we create the
corresponding graph as follows:
1)
Each item corresponds to a vertex in
the graph.
2)
For each constraint where item A must
finish before item B, place a directed
edge A  B.
A stands for waking up,
B stands for taking a shower,
C stands for eating
breakfast
D leaving for work

A before B,
A before C,
B before D,
and C before D.
A
B
C
D
A topological sort
would give A, B, C, D.
Topological Sort

Consider the following CS classes and their prereq’s:

CS classes:
◦
◦
◦
◦
◦
◦
◦
◦
◦

COP 3223
COP 3502
COP 3330
COT 3100,
COP 3503
CDA 3103
COT 3960 (Foundation Exam)
COP 3402
COT 4210.

Prereq’s:

COP 3223 before COP 3330 and COP
3502.

COP 3330 before COP 3503.

COP 3502 before COT 3960, COP 3503,
CDA 3103.

COT 3100 before COT 3960.

COT 3960 before COP 3402 and COT
4210.

COP 3503 before COT 4210.
The goal of a topological sort would be to find an
ordering of these classes that you can take.
 How Convenient!!
Topological Sort Algorithm

We can use a DFS in our algorithm to determine a
topological sort!
◦ The idea is:
 When you do a DFS on a directed acyclic graph, eventually you
will reach a node with no outgoing edges. Why?
 Because if this never happened, you hit a cycle, because the number of
nodes if finite.
 This node that you reach in a DFS is “safe” to place at the end of
the topological sort.
 Think of leaving for work!
◦ Now what we find is
 If we have added each of the vertices “below” a vertex into our
topological sort, it is safe then to add this one in.
 If we added in Leaving for work at the end, then we can surely add
taking a shower.
Topological Sort
A
B

C

D
If we explore from A
◦ And if we have marked
B,C,D as well as anything
connected
 And added all of them into
our topological sort in
backwards order.

Then we can add A!
So basically all you
have to do is run a
DFS
◦ But add the fact that
add the end of the
recursive function, add
the node the DFS was
called with to the end
of the topological sort.
Topological Sort Step-by-Step
Description
1)
Do a DFS starting with some node.
2)
The “last” node you reach before you
are forced to backtrack.
◦
3)
Goes at the end of the topological sort.
Continue with your DFS, placing each
“dead end” node into the topo sort in
backwards order.
Example on the Board
Topological Sort Code
top_sort(Adjacency Matrix adj, Array ts)
{
n = adj.last
k = n
//assume k is global
for i=1 to n
visit[i] = false
for i=1 to n
if (!visit[i])
top_sort_rec(adj, i, ts)
}
Topological Sort Code
top_sort_rec(Adjacency Matrix adj, Vertex start, Array ts)
{
visit[start] = true
trav = adj[start] //trav points to a LL
while (trav != null)
{
v = trav.ver
if (!visit[v])
top_sort_recurs(adj, v, ts);
trav = trav.next
}
ts[k] = start, k=k-1
}
Topological Sort Example


Consider the following items of clothing to
wear:
Shirt
Slacks
Shoes
Socks
Belt
Undergarments
1
2
3
4
5
6
There isn't exactly one order to put these items
on, but we must adhere to certain restrictions
◦
◦
◦
◦
Socks must be put on before Shoes
Undergarments must be put on before Slacks and Shirt
Slacks must be put on before Belt
Slacks must be put on before Shoes
Finish Example on the Board
References
Slides adapted from Arup Guha’s Computer
Science II Lecture notes:
http://www.cs.ucf.edu/~dmarino/ucf/cop3503/le
ctures/
 Additional material from the textbook:

Data Structures and Algorithm Analysis in Java (Second
Edition) by Mark Allen Weiss

Additional images:
www.wikipedia.com
xkcd.com