子图包含无向图中长度限制的简单st路径一部分的所有节点和边


12

非常类似于我先前发布的问题。但是这一次,该图是无向的。

给定

  • 无向G没有多边缘或环,
  • 源顶点s
  • 目标顶点t
  • 最大路径长度l

我寻找G- 的子图G包含任何顶点和在任何边缘G(只有那些和),即是由至少一个简单的路径的一部分st与长度l

笔记:

  • 我不需要列举路径。
  • 我正在寻找一种高效的算法(时间和内存),因为我需要在非常大的图形(10 ^ 8个顶点,10 ^ 9个边)上执行该算法。

看一下这个。发现这种纸,这似乎做类似的最小代价流量减少,但利用网络的特殊性质来解决它更快那么一般MCF算法。
RB

Answers:


6

好吧,问题毕竟出在。我会保持以前的答案,因为它也适用于定向的情况下(这是全国人民代表大会,对其他问题的回答为),并表明它是˚F P 牛逼相对于PFPTl

在无方向情况下,它可以通过最小的成本流确定性地解决(这可能无法在问题中所指的范围内起作用,但它比指数算法好。

下面的过程将决定是否一些边缘应输出图形的一部分。为了回答原始问题,只需遍历所有边缘即可。e=(u,v)E

为了创建流网络,请执行以下操作:

步骤1:展开以拥有一个顶点x e,并将e替换为边u x ex eu v x ex ev (它们的方向为a流量网络的一部分),将其费用设置为0。exee(u,xe),(xe,u),(v,xe),(xe,v)

步骤2:替换每个顶点,除了X ë由两个顶点-+,并添加一个边缘- +。将这些边的成本设置为1。txett+(t,t+)

步骤3:每边的替换与边缘一个+b - ) b +- ) 将这些边的成本设置为0。{a,b}E(a+,b),(b+,a)

步骤4:添加新的顶点并添加成本为0 的边s y et y eye(s,ye),(t,ye)

步骤5:将所有容量设置为1。

现在运行最小成本流算法,搜索从y e的值2的流。xeye


分析:

  • xeyeX ëÿ ëxesyexetye
  • 路径是不相交的,因为对于每个顶点弧只有1个容量。t t +t(t,t+)
  • 返回的路径是两条距离之和最小的路径,这也是找到的流的成本。这使我们可以将添加到输出图或以其他方式删除。e

1
通过剥离归约流,可以更容易地理解上述答案中的论点。有从一个简单的路径到含有节点当且仅当有一个路径从到和路径从到使得和是除在节点不相交。这至关重要地使用了无方向性。可以通过流程进行检查,成本版本也可以通过最低成本流程进行。可以检查从到包含的简单路径v P v 小号Q v P Q v 小号ë ëstvPvsQvtPQvste通过在的中间引入一个节点。e
Chandra Chekuri 2014年

@ChandraChekuri -这是正确的,但要记住,如果这个问题没有长度的限制,有很多简单的算法来决定它- 在这里看到的
RB

当然,我也知道该解决方案-从概念上讲,即使可以通过DFS直接找到切点和双向连接的组件,也可以通过不相交的路径理解双向连接的组件。
Chandra Chekuri 2014年

@RB:谢谢。当l相对较大时,建议的算法可能会有效,但对于l的相对较小值,它可能不是最优的。我想我可以通过从s移除比floor(l / 2)更远的顶点和从t移除ceil(l / 2)的顶点来修剪G。
Lior Kogan 2014年

1
尝试调整连续最短路径算法(对于2条路径的情况也称为Surballe算法,在这里值得关注)。您想找到从到每个最短2路径(最好将其称为而不是因为对于所有边都相同)。我认为通过首先从计算最短路径树然后谨慎执行第二路径计算,可以有效地做到这一点。ÿ ÿ Ë X ë ÿyyyexey
Chandra Chekuri 2014年

1

这是一个错误的答案:它输出一些顶点,这些顶点是从到的非简单路径的一部分,而不是长度从从到的任何简单路径的一部分。答案可能仍然与询问者的应用程序有关,因此我将其留在此处。小号stst

这是一种在时间上运行的算法当小时,实际上比这快)。O(|V|+|E|)

该算法运行从BFS搜索终止于深度。此BFS给出了从可到达的所有顶点的集合,其路径的最大路径为,并且它还计算了每个的距离。然后,我从做同样,并获得一套从和距离。最后,您要查找的顶点就是。边恰好是那些边(V 小号小号d 小号小号v v V 小号V V 小号ö ü Ť ö Ñ = { v v V 小号V ð 小号小号v + ð 小号sVssdist(s,v)vVstVttVsolution={v:vVsVt,dist(s,v)+dist(t,v)}E[Vsolution]=(v,u)E:u,vVsolution)。

该算法的运行时间肯定是因为它只执行两个BFS。但是运行时间实际上是,它将比的 -radius邻域小得多和很小。O(|V|+|E|)O(|Vs|+|Vt|+|E[Vs]|+|E[Vt]|)st

编辑:实践中可能有一种更快的算法,它只能从而不是和深度进行BFS 。这将发现所有路径,然后通过进行一些簿记就可以找到所有顶点。当小时,对于大的随机图,这将通过平方根减少运行时间。st/2


3
这不会迫使路径变得简单。考虑简单路径图和。您将返回作为输出的一部分,尽管没有简单的st路径通过 ...tusvxl=4vv
RB

感谢您的修正@RB。我编辑了答案以指出这是错误的。
mobius饺子2014年

1

此内容仅供参考,但发布为时过长。

您可能还对图形扳手或仿真器感兴趣。图的扳手是子图,它的边缘很少,但是距离几乎保持不变。仿真器是图形其边缘被加权。H = V E 'H = V E 'w G=(V,E)H=(V,E)H=(V,E,w)

扳手的最佳结果是边,图中距离估计的附加误差为+6。对于仿真器而言,最好的结果是边,加法误差为+4。即使我们可以击败也不知道,即使允许误差是对数的。ø ñ 4 / 3ø ñ 4 / 3O(n4/3)O(n4/3)O(n4/3)

如果听起来有用,我可以尝试为您研究相关的结构。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.