【发布时间】:2012-02-08 08:22:04
【问题描述】:
看来这一定是一个常见的调度问题,但我没有看到解决方案,甚至没有看到该问题的名称。这就像一个拓扑排序,但不同......
给定一些依赖关系,比如说
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)
【问题讨论】:
-
A->B->C, A->C 的预期答案是什么?
-
不好意思打扰了,A->B->D, A->C->D, A->D 怎么样?
-
哦,真的!最后一个! A->B->C, A->C, A->D
-
(A) -> (B,C,D) 不正确吧?因为 B->C ?
-
能有这样的输入A->B->C->D->E,A->M->F吗?答案似乎是 A->(B,C,D,E,M,F)?