Question

It seems this must be a common scheduling problem, but I don't see the solution or even what to call the problem. It's like a topological sort, but different....

Given some dependencies, say

A -> B -> D -- that is, A must come before B, which must come before D
A -> C -> D

there might be multiple solutions to a topological sort:

    A, B, C, D
and A, C, B, D

are both solutions.

I need an algorithm that returns this:

(A) -> (B,C) -> (D)

That is, do A, then all of B and C, then you can do D. All the ambiguities or don't-cares are grouped.

I think algorithms such as those at Topological Sort with Grouping won't correctly handle cases like the following.

A -> B -> C -> D -> E
A - - - > M - - - > E

For this, the algorithm should return

(A) -> (B, C, D, M) -> (E)

This

A -> B -> D -> F
A -> C -> E -> F

should return

(A) -> (B, D, C, E) -> (F)

While this

A -> B -> D -> F
A -> C -> E -> F
     C -> D
     B -> E

should return

(A) -> (B, C) -> (D, E) -> (F)    

And this

A -> B -> D -> F
A -> C -> E -> F
A -> L -> M -> F
     C -> D
     C -> M
     B -> E
     B -> M
     L -> D
     L -> E

should return

(A) -> (B, C, L) -> (D, E, M) -> (F)    

Is there a name and a conventional solution to this problem? (And do the algorithms posted at Topological Sort with Grouping correctly handle this?)

Edit to answer requests for more examples:

A->B->C
A->C 

should return

(A) -> (B) -> (C). That would be a straight topological sort.

And

A->B->D
A->C->D
A->D

should return

(A) -> (B, C) -> (D)

And

A->B->C
A->C
A->D

should return

(A) -> (B,C,D)
Was it helpful?

Solution

Let G be the transitive closure of the graph. Let G' be the undirected graph that results from removing the orientation from G and taking the complement. The connected components of the G' are the sets you are looking for.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top