- 262 Views
- Uploaded on
- Presentation posted in: General

Topological Sort

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

- Introduction.
- Definition of Topological Sort.
- Topological Sort is Not Unique.
- Topological Sort Algorithms.
- An Example.
- Implementation of Source Removal Algorithm.
- Review Questions.

- There are many problems involving a set of tasks in which some of the tasks must be done before others.
- For example, consider the problem of taking a course only after taking its prerequisites.
- Is there any systematic way of linearly arranging the courses in the order that they should be taken?

Yes! - Topological sort.

Example:

- A directed acyclic graph (DAG) is a directed graph without cycles.
- DAGs arrise in modeling many problems that involve prerequisite constraints (construction projects, course prerequisites, document version control, compilers, etc.)
- Some properties of DAGs:
- Every DAG must have at least one vertex with in-degree zero and at least one vertex with out-degree zero
- A vertex with in-degree zero is called a source vertex, a vertex with out-degree zero is called a sink vertex.

- G is a DAG iff each vertex in G is in its own strongly connected component
- Every edge (v, w) in a DAG G has finishingTime[w] < finishingTime[v] in a DFS traversal of G

- Every DAG must have at least one vertex with in-degree zero and at least one vertex with out-degree zero

- Given a directed graph G = (V, E) a topological sort of G is an
ordering of V such that for any edge (u, v), u comes before v in

the ordering.

- Example1:

- Example2:

- Example3: The graph in (a) can be topologically sorted as in (b)

(a)

(b)

s1 = {a, b, c, d, e, f, g, h, i}

s2 = {a, c, b, f, e, d, h, g, i}

s3 = {a, b, d, c, e, g, f, h, i}

s4 = {a, c, f, b, e, h, d, g, i}

etc.

- Topological sort is not unique.
- The following are all topological sort of the graph below:

- Topological-Sort(G)
- {
- 1. Call dfsAllVertices on G to compute f[v] for each vertex v
- 2. If G contains a back edge (v, w) (i.e., if f[w] > f[v]) , report error ;
- 3. else, as each vertex is finished prepend it to a list;// or push in stack
- 4. Return the list; // list is a valid topological sort

- }

- Running time is O(V+E), which is the running time for DFS.

Topological order: A C D B E H F G

- The Source Removal Topological sort algorithm is:
- Pick a source u [vertex with in-degree zero], output it.
- Remove u and all edges out of u.
- Repeat until graph is empty.

- int topologicalOrderTraversal( ){
- int numVisitedVertices = 0;
- while(there are more vertices to be visited){
- if(there is no vertex with in-degree 0)
- break;
- else{
- select a vertex v that has in-degree 0;
- visit v;
- numVisitedVertices++;
- delete v and all its emanating edges;

1

3

2

0

2

A

B

C

D

E

F

G

H

I

J

1

0

2

0

2

D G A B F H J E I C

- The number beside each vertex is the in-degree of the vertex at the start of the algorithm.

- The algorithm is implemented as a traversal method that visits the vertices in a topological sort order.
- An array of length |V| is used to record the in-degrees of the vertices. Hence no need to remove vertices or edges.
- A priority queue is used to keep track of vertices with in-degree zero that are not yet visited.

public int topologicalOrderTraversal(Visitor visitor){

int numVerticesVisited = 0;

int[] inDegree = new int[numberOfVertices];

for(int i = 0; i < numberOfVertices; i++)

inDegree[i] = 0;

Iterator p = getEdges();

while (p.hasNext()) {

Edge edge = (Edge) p.next();

Vertex to = edge.getToVertex();

inDegree[getIndex(to)]++;

}

BinaryHeap queue = new BinaryHeap(numberOfVertices);

p = getVertices();

while(p.hasNext()){

Vertex v = (Vertex)p.next();

if(inDegree[getIndex(v)] == 0)

queue.enqueue(v);

}

while(!queue.isEmpty() && !visitor.isDone()){

Vertex v = (Vertex)queue.dequeueMin();

visitor.visit(v);

numVerticesVisited++;

p = v.getSuccessors();

while (p.hasNext()){

Vertex to = (Vertex) p.next();

if(--inDegree[getIndex(to)] == 0)

queue.enqueue(to);

}

}

return numVerticesVisited;

}

- List the order in which the nodes of the directed graph GB are visited by
- topological order traversal that starts from vertex a. Use both DFS-based and Source Removal algorithm
- 2. What kind of DAG has a unique topological sort?
- 3. Generate a directed graph using the required courses for your major. Now apply topological sort on the directed graph you obtained.