似乎这是一个常见的调度问题,但我没有看到解决方案,甚至不知道如何称呼这个问题。它类似于拓扑排序,但又不同......
那就是,先执行A,然后执行所有的B和C,然后才能执行D。所有的不确定性或无关紧要的事情都被分组在一起。
我认为像Topological Sort with Grouping这样的算法无法正确处理以下情况。
为此,算法应返回:
这个问题有一个名字和常规解决方案吗?(并且在Topological Sort with Grouping发布的算法是否正确处理此问题?)
编辑以回答更多示例请求:
并且
假设有一些依赖关系,比如:
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)
This
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)
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
应该返回
(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.
And
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 -> D -> E; A -> M -> E
解释为(A) -> (B, C, D, M) -> (E)
,我认为这种解释非常可疑。答案说“B、C和D的顺序不重要”,但数据表明“B必须在C之前,C必须在D之前”。 - Jonathan Leffler