This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Depth First SearchDepth First Search
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 2 5
106
11
15
3 4 7 129
13
14
8
Backtrack to 10,6,79, 11, 8, 5
◦ Stop at 5Backtrack to 8,1115,14,12
◦ STOP – All nodes are marked!!
OutputList:
1 2 4 3 7 6 10
13 9 1
1 8 5 15
14
12
1 2
3
5
6
11
4
10
15
7 9
8
12
13
14
Depth First Search – Depth First Search – Real Life Real Life ApplicationApplication
Topological Sort AlgorithmTopological Sort AlgorithmWe 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 SortTopological 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-Topological Sort Step-by-Step DescriptionStep Description1) Do a DFS starting with some node.
2) The “last” node you reach before you are forced to backtrack.
◦ Goes at the end of the topological sort.
3) Continue with your DFS, placing each “dead end” node into the topo sort in backwards order.
Topological Sort CodeTopological Sort Codetop_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)}
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 ExampleTopological Sort ExampleConsider the following items of
clothing to wear:Shirt Slacks Shoes Socks Belt Undergarme
nts1 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
ReferencesReferencesSlides 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 WeissAdditional images: