110 likes | 235 Views
15.082 and 6.855J. Topological Ordering. Preliminary to Topological Sorting. LEMMA. If each node has at least one arc going out, then the first inadmissible arc of a depth first search determines a directed cycle.
E N D
15.082 and 6.855J Topological Ordering
Preliminary to Topological Sorting • LEMMA. If each node has at least one arc going out, then the first inadmissible arc of a depth first search determines a directed cycle. • COROLLARY 1. If G has no directed cycle, then there is a node in G with no arcs going. And there is at least one node in G with no arcs coming in. • COROLLARY 2. If G has no directed cycle, then one can relabel the nodes so that for each arc (i,j), i < j. 3 1 4 6 7
1 2 3 4 5 6 7 8 Node Indegree 2 2 3 2 1 1 0 2 7 0 next LIST Initialization 6 1 “Next” will be the label of nodes in the topological order. Determine the indegree of each node LIST is the set of nodes with indegree of 0. 5 8 3 2 7 4
LIST Select a node from LIST 6 1 next := next +1order(i) := next; update indegrees update LIST Select a node from LIST and delete it. 5 8 3 2 7 7 4 1 0 1 next 1 2 3 4 5 6 7 8 Node Indegree 2 2 3 1 2 0 1 1 0 2 7 5
LIST Select a node from LIST 6 1 next := next +1order(i) := next; update indegrees update LIST Select a node from LIST and delete it. 2 5 5 8 3 2 7 7 4 1 2 0 1 next 1 2 3 4 5 6 7 8 Node Indegree 2 2 1 3 0 1 2 0 1 1 0 0 2 4 5 7 6
LIST Select a node from LIST 3 6 6 1 next := next +1order(i) := next; update indegrees update LIST Select a node from LIST and delete it. 2 5 5 8 3 2 7 7 4 1 3 1 2 0 next 1 2 3 4 5 6 7 8 Node Indegree 1 2 2 1 0 3 2 1 0 0 1 0 1 0 2 4 7 5 6 2
LIST Select a node from LIST 3 6 6 1 next := next +1order(i) := next; update indegrees update LIST Select a node from LIST and delete it. 2 5 5 2 2 8 3 4 7 7 4 1 4 1 3 2 0 next 1 2 3 4 5 6 7 8 Node Indegree 0 1 2 1 0 2 3 0 1 2 1 0 1 0 0 2 4 5 7 2 6 1
LIST Select a node from LIST 5 3 6 6 1 1 next := next +1order(i) := next; update indegrees update LIST Select a node from LIST and delete it. 2 5 5 2 2 8 3 4 7 7 4 1 1 2 5 0 4 3 next 1 2 3 4 5 6 7 8 Node Indegree 2 1 0 2 0 1 2 3 2 1 0 0 1 0 1 0 2 1 4 7 5 1 2 6
LIST Select a node from LIST 5 3 6 6 1 1 next := next +1order(i) := next; update indegrees update LIST Select a node from LIST and delete it. 2 5 5 2 2 8 3 4 7 7 4 4 1 6 1 0 2 4 5 3 6 next 1 2 3 4 5 6 7 8 Node Indegree 1 0 2 0 1 2 3 2 1 2 0 1 0 1 1 0 0 1 0 2 6 4 1 2 5 7 8
LIST Select a node from LIST 5 3 6 6 1 1 next := next +1order(i) := next; update indegrees update LIST Select a node from LIST and delete it. 7 2 5 5 2 2 8 8 3 4 7 7 4 4 1 6 1 4 5 6 2 3 7 0 next 1 2 3 4 5 6 7 8 Node Indegree 2 1 0 0 1 2 0 3 2 1 0 1 2 0 1 0 1 0 2 1 0 8 3
LIST Select a node from LIST 5 3 6 6 1 1 next := next +1order(i) := next; update indegrees update LIST Select a node from LIST and delete it. 7 8 2 5 5 2 2 8 8 3 3 4 7 7 4 4 1 6 4 1 6 7 8 5 3 2 0 next List is empty. The algorithm terminates with a topological order of the nodes 1 2 3 4 5 6 7 8 Node Indegree 2 0 1 0 1 2 0 2 3 1 2 0 1 0 1 0 1 0 2 0 1 3