【问题标题】:Topological sort, but with a certain kind of grouping拓扑排序,但有某种分组
【发布时间】: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)?

标签: algorithm graph-algorithm


【解决方案1】:

令 G 为图的传递闭包。令 G' 是从 G 中移除方向并取补的无向图。 G' 的连通分量是您正在寻找的集合。

【讨论】:

  • 好的,现在我需要弄清楚这意味着什么。感谢您的领导!
  • 现在我明白了。现在我需要弄清楚如何在 XSLT 中对其进行编码。谢谢 wye-bee!
猜你喜欢
  • 2011-05-03
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多