【问题标题】:Graph - strongly connected components图 - 强连通分量
【发布时间】:2010-05-22 22:27:53
【问题描述】:

有没有什么快速的方法可以确定图中最大的强连通分量的大小?

我的意思是,显而易见的方法是确定每个 SCC(我想可以使用两个 DFS 调用来完成),然后遍历它们并取最大值。

如果我只需要该组件的大小并且只需要最大的一个,我很确定必须有一些更好的方法,但我想不出一个好的解决方案。有什么想法吗?

谢谢。

【问题讨论】:

  • 我不知道你的问题的答案,但你为什么要这样做,因为像 Tarjan 这样的算法是线性的,并且具有非常小的恒定开销来确定所有 SCC。它也很容易实现。

标签: c++ algorithm graph version-control


【解决方案1】:

让我用另一个问题来回答你的问题 -
如何在不检查所有值的情况下确定集合中的哪个值最大?

【讨论】:

  • 嗯,有时是可能的,例如如果你有关于你的集合/smth的额外信息。我不知道,也许确定-最大化方法同时是唯一也是最好的方法,但我的直觉告诉我一定有更好的方法。如果你绝对确定这不能更快地完成,我会相信你:)
  • 我不确定,这是直觉。如果我记得的话,有一些算法可以在一个 DFS 中获取组件。我非常怀疑你会找到一种算法,它可以在不到一次扫描中完成。如果您确实有关于图表的一些信息,请将其发布,也许我们可以提出一些建议。
【解决方案2】:

首先,您可以使用Tarjan's algorithm,它只需要一个 DFS 而不是两个。如果您清楚地理解该算法,则 SCC 会形成一个 DAG,并且该算法会以反向拓扑排序顺序找到它们。因此,如果您对图表有一定的了解(如视觉表示)并且如果您知道相对较大的 SCC 出现在 DAG 的末尾,那么您可以在找到前几个 SCC 后停止算法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-01
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 1970-01-01
    • 2019-04-06
    相关资源
    最近更新 更多