拓扑排序,但具有某种分组

时间:2012-01-11 23:52:06

标签: algorithm graph-algorithm

这似乎是一个常见的调度问题,但我没有看到解决方案甚至是什么称呼问题。这就像拓扑一样,但不同......

考虑到某些依赖关系,请说

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

拓扑排序可能有多种解决方案:

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

都是解决方案。

我需要一个返回此算法的算法:

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

也就是说,做A,然后是B和C的全部,那么你就可以做D.所有歧义或不关心都被分组。

我认为Topological Sort with Grouping等算法无法正确处理以下情况。

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

为此,算法应返回

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

这个

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

应该返回

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

虽然这个

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

应该返回

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

这个

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

应该返回

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

这个问题有名称和传统解决方案吗? (在Topological Sort with Grouping张贴的算法是否正确处理了这个?)

编辑以回答更多示例的请求:

A->B->C
A->C 

应该返回

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

并且

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

应该返回

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

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

应该返回

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

1 个答案:

答案 0 :(得分:7)

设G是图的传递闭包。设G'是从G中去除方向并取补色的无向图。 G'的连通组件是您正在寻找的组合。