【发布时间】:2012-06-28 02:04:15
【问题描述】:
我找到了几种算法来解释如何在有向图中找到强连通分量,但没有一个解释为什么你会想要这样做。强连接组件有哪些应用?
【问题讨论】:
-
像大多数数学一样,这是一种在你需要它们之前看起来完全没用的东西。
标签: algorithm computer-science graph-theory
我找到了几种算法来解释如何在有向图中找到强连通分量,但没有一个解释为什么你会想要这样做。强连接组件有哪些应用?
【问题讨论】:
标签: algorithm computer-science graph-theory
在车辆路线应用程序中可以找到另一个应用程序。道路网络可以建模为有向图,顶点是交叉点,弧线是有向路段或单独的车道。如果图表不是强连通的,那么车辆可能会被困在图表的某个部分(即它们可以进入,但不能出去)。
在许多此类车辆路径应用程序中,您希望为特定区域生成路径(例如城市内的路径问题)。在生成路线之前,您必须提取街道数据,例如从 Google 地图、Here 地图或 Open Street 地图中提取。这些地图不仅涵盖了您感兴趣的区域,而且涵盖了整个世界。因此,您最终会拍摄感兴趣区域的快照,例如通过计算地理坐标位于感兴趣区域内的所有交叉点的诱导子图。生成的子图不一定是强连接的(例如,您可以有一条进出该区域的道路,但不与该区域内的任何其他道路连接)。然后通过枚举所有强连接的组件来预处理子图,并丢弃除最大组件之外的所有组件。
【讨论】:
一个例子是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因此获得了图灵奖!
【讨论】:
您应该查看 Tim Roughgarden 在 Coursera 上的“算法简介”课程。对于他介绍的每一种算法,他都会解释它的一些应用。很有用,让人看到学习算法的价值!
我记得他说过,使用强连接组件可以在大量数据中找到关系更密切的人群。想想 facebook 以及他们如何推荐可能成为你朋友的人......
这也可以用来查看人口的块。说,“哇,这个巨大的组件都有倒退的爱好,喜欢吃发霉的披萨!”它可以显示相关性。发霉披萨的广告商会使用这些数据来定位喜欢倒着走的人。谁知道呢!
【讨论】: