【问题标题】:How to process nodes of strongly connected components in a directed graph?如何处理有向图中强连通分量的节点?
【发布时间】:2015-07-26 14:15:19
【问题描述】:

我是图形算法编程领域的初学者。我正在努力解决一个关于强连接组件的有趣问题,对此的任何帮助都非常感谢。

在我的应用程序中,目标是尽可能在多个线程上执行任务。这些任务在有向图中表示为节点,并且任务可能具有循环依赖关系。通过找到强连接的组件然后执行预定义的规则来删除一条边来打破循环依赖关系。这样,强连接组件中的所有任务最终都会串行执行。

现在考虑一个示例,其中任务 1,2,...8 具有以下依赖模式。 {1 -> 2, 2 -> 3, 3 -> 1, 3 -> 4, 4 -> 5, 5 -> 6, 6 -> 4, 7 -> 8}。使用强连通分量和预定义规则打破循环依赖,我们得到三组节点,即 A={1 -> 2 -> 3},B={4 -> 5 -> 6},和 C={7 - > 8},但由于 A 和 B 由一条边连接,它们不能并行执行。

我想知道是否有任何算法或算法集可用于获取节点集,以便我可以将 A 和 B 顺序执行,而 C 可以与 A 或 B 并行执行。根据我的理解,拓扑排序可能会有所帮助,但它仅用于非循环图。非常感谢任何建议或帮助。谢谢。

【问题讨论】:

    标签: algorithm graph-algorithm


    【解决方案1】:

    您用节点 A、B、C 等描述的商图始终是非循环的:如果它有一个循环,例如涉及 A 和 B,则 A 中的所有任务都可以从 B 中的所有任务到达,反之亦然,所以A和B是同一个SCC。 所以是的,您可以对该图进行拓扑排序。

    【讨论】:

    • 好的,你的意思是我应该识别所有强连接的组件,然后将每个 SCC 视为一个单独的节点。然后对这些新的“SCC”节点进行拓扑排序。这是对的吗?谢谢。
    • @Sachin:是的,完全正确。
    猜你喜欢
    • 2018-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 2011-09-14
    • 1970-01-01
    • 2017-01-25
    相关资源
    最近更新 更多