【问题标题】:Induced subgraph; existence of path between two nodes诱导子图;两个节点之间存在路径
【发布时间】:2011-06-03 00:45:30
【问题描述】:

对不起,文字墙,它尽可能简洁!

我有一个非常大的有向图 G 和 G 内部的顶点子集 S。我想做的是找到由 S 诱导的 G 的子图,另外考虑是否存在某些路径在 G 中的一个顶点 p 和一个顶点 q 之间,在诱导子图中这两个顶点之间存在一条边。这是关键;它比通常的诱导子图问题更复杂(我认为)。

我能想到的解决问题的最基本方法如下(我意识到这可能不是最有效的,如果您有其他不太复杂的建议,请告诉我实现):对于 S 中的每一对顶点,测试它们之间在 G 中是否存在路径。如果存在这样的路径,则在诱导子图中插入 p 和 q 之间的边。就我的目的而言,n^2 次并不是那么不好。

所以,我想我有两个问题: 1)确定两个顶点之间是否存在路径的最快方法是什么?我不需要知道路径,只需要知道它是否存在。此外,如果我可以对整个图进行一些预处理以加快计算速度,那可能是什么,因为我必须在每对顶点之间执行此计算?

2) 有没有比我建议的更快的方法来找到我描述的诱导子图的类型?

非常感谢您的帮助!

【问题讨论】:

    标签: algorithm shortest-path graph-algorithm subgraph


    【解决方案1】:

    查找两个顶点之间是否存在路径的问题称为传递闭包问题,在一般情况下与矩阵乘法一样难。我将首先在您的图上运行一个强连通分量算法,以将循环压缩到一个节点中并形成一个有向图。如果你幸运的话,你会有一些大循环,这将使随后的传递问题变得容易。然后我会在该图上运行 Floyd Warshall 所有对最短路径算法来计算传递闭包,因为它的编码非常简单。也许基于 o(n^3) 矩阵乘法的算法之一会更快,但我怀疑它会更快,因为常数太低 Floyd Warhsall。

    这是strongly connected components 的快速算法。

    这包含了matrix multiplication and transitive closure.等价的证明

    我不确定是否有任何好方法可以绕过计算传递闭包来解决您的原始问题。我怀疑不是,但另一方面,有时聪明的人会想出一些很棒的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-21
      • 1970-01-01
      • 2021-12-10
      • 2021-12-18
      相关资源
      最近更新 更多