190 likes | 334 Views
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
E N D
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
Depth First Search Output List: 1 2 4 3 7 6 10 13 9 11 8 5 15 14 12 • Backtrack to 10,6,7 • 9, 11, 8, 5 • Stop at 5 • Backtrack to 8,11 • 15,14,12 • STOP – All nodes are marked!! • Start with 1 • 2,4,3 • Stop at 3 • Backtrack to 4, can we search? • 7,6 • Stop at 2 • Backtrack to 6, can we search? • 10,13 • Stop at 13 1 1 2 2 5 5 8 8 11 11 15 15 6 6 10 10 13 13 3 3 4 4 7 7 9 9 12 12 14 14
Depth First Search – Real Life Application From xkcd.com
Breadth First Search • L0: 1 • L1: 2, 3 • L2: 4,5,6,11 • L3: 7,8,10,9,15 • L4: 13,12,14 1 1 2 2 5 5 8 8 11 11 15 15 6 6 10 10 13 13 3 3 4 4 7 7 9 9 12 12 14 14 Final output: 1, 2, 3, 4, 5, 6, 11, 7, 8, 10, 9, 15, 13, 12, 14
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 • Given a set of items and constraints, we create the corresponding graph as follows: • Each item corresponds to a vertex in the graph. • 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 • The constraints would be • A before B, • A before C, • B before D, • and C before D. • A topological sort would give A, B, C, D. A B C D
Topological Sort • CS classes: • COP 3223 • COP 3502 • COP 3330 • COT 3100, • COP 3503 • CDA 3103 • COT 3960 (Foundation Exam) • COP 3402 • COT 4210. • Consider the following CS classes and their prereq’s: • 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 • 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. A B C D
Topological Sort Step-by-Step Description • Do a DFS starting with some node. • The “last” node you reach before you are forced to backtrack. • Goes at the end of the topological sort. • Continue with your DFS, placing each “dead end” node into the topo sort in backwards order.
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: • 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
References • Slides adapted from Arup Guha’s Computer Science II Lecture notes: http://www.cs.ucf.edu/~dmarino/ucf/cop3503/lectures/ • 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