【问题标题】:What are strongly connected components used for?强连接组件有什么用?
【发布时间】:2012-06-28 02:04:15
【问题描述】:

我找到了几种算法来解释如何在有向图中找到强连通分量,但没有一个解释为什么你会想要这样做。强连接组件有哪些应用?

【问题讨论】:

  • 像大多数数学一样,这是一种在你需要它们之前看起来完全没用的东西。

标签: algorithm computer-science graph-theory


【解决方案1】:

在车辆路线应用程序中可以找到另一个应用程序。道路网络可以建模为有向图,顶点是交叉点,弧线是有向路段或单独的车道。如果图表不是强连通的,那么车辆可能会被困在图表的某个部分(即它们可以进入,但不能出去)。

在许多此类车辆路径应用程序中,您希望为特定区域生成路径(例如城市内的路径问题)。在生成路线之前,您必须提取街道数据,例如从 Google 地图、Here 地图或 Open Street 地图中提取。这些地图不仅涵盖了您感兴趣的区域,而且涵盖了整个世界。因此,您最终会拍摄感兴趣区域的快照,例如通过计算地理坐标位于感兴趣区域内的所有交叉点的诱导子图。生成的子图不一定是强连接的(例如,您可以有一条进出该区域的道路,但不与该区域内的任何其他道路连接)。然后通过枚举所有强连接的组件来预处理子图,并丢弃除最大组件之外的所有组件。

【讨论】:

    【解决方案2】:

    一个例子是model checking:

    formal verification 中的显式model checking 中查找强连接组件。

    在模型检查中 - 我们有一个状态机,它代表我们软件/硬件的模型,我们试图在上面证明temporal logic1 公式。

    例如:公式EG(p)的意思是:图中有一条路径,对于每个状态,逻辑公式p产生true

    algorithm for proving if EG(p) is true on a graph(模型)寻找最大强连通分量 (SCC),然后在图中检查通向它的路径

    请注意,模型检查在行业中得到广泛应用——尤其是用于证明硬件组件的正确性。


    (1)时序逻辑对计算机科学的重要性是巨大的,它的发明者Amir Pnueli因此获得了图灵奖!

    【讨论】:

      【解决方案3】:

      您应该查看 Tim Roughgarden 在 Coursera 上的“算法简介”课程。对于他介绍的每一种算法,他都会解释它的一些应用。很有用,让人看到学习算法的价值!

      我记得他说过,使用强连接组件可以在大量数据中找到关系更密切的人群。想想 facebook 以及他们如何推荐可能成为你朋友的人......

      这也可以用来查看人口的块。说,“哇,这个巨大的组件都有倒退的爱好,喜欢吃发霉的披萨!”它可以显示相关性。发霉披萨的广告商会使用这些数据来定位喜欢倒着走的人。谁知道呢!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-17
        相关资源
        最近更新 更多