非常类似于我先前发布的问题。但是这一次,该图是无向的。
给定
- 的无向图没有多边缘或环,
- 源顶点,
- 目标顶点,
- 最大路径长度,
我寻找- 的子图包含任何顶点和在任何边缘(只有那些和),即是由至少一个简单的路径的一部分到与长度。
笔记:
- 我不需要列举路径。
- 我正在寻找一种高效的算法(时间和内存),因为我需要在非常大的图形(10 ^ 8个顶点,10 ^ 9个边)上执行该算法。
非常类似于我先前发布的问题。但是这一次,该图是无向的。
给定
我寻找- 的子图包含任何顶点和在任何边缘(只有那些和),即是由至少一个简单的路径的一部分到与长度。
笔记:
Answers:
好吧,问题毕竟出在。我会保持以前的答案,因为它也适用于定向的情况下(这是全国人民代表大会,对其他问题的回答为),并表明它是˚F P 牛逼相对于升。
在无方向情况下,它可以通过最小的成本流确定性地解决(这可能无法在问题中所指的范围内起作用,但它比指数算法好。
下面的过程将决定是否一些边缘应输出图形的一部分。为了回答原始问题,只需遍历所有边缘即可。
为了创建流网络,请执行以下操作:
步骤1:展开以拥有一个顶点x e,并将e替换为边(u ,x e),(x e,u ),(v ,x e),(x e,v ) (它们的方向为a流量网络的一部分),将其费用设置为0。
步骤2:替换每个顶点,除了X ë由两个顶点吨-和吨+,并添加一个边缘(吨- ,吨+)。将这些边的成本设置为1。
步骤3:每边的替换与边缘(一个+,b - ),( b +,一- )。 将这些边的成本设置为0。
步骤4:添加新的顶点并添加成本为0 的边(s ,y e),(t ,y e)。
步骤5:将所有容量设置为1。
现在运行最小成本流算法,搜索从到y e的值2的流。
分析:
这是一个错误的答案:它输出一些顶点,这些顶点是从到的非简单路径的一部分,而不是长度从从到的任何简单路径的一部分。答案可能仍然与询问者的应用程序有关,因此我将其留在此处。吨小号吨≤ ℓ
这是一种在时间上运行的算法当小时,实际上比这快)。ℓ
该算法运行从BFS搜索终止于深度。此BFS给出了从可到达的所有顶点的集合,其路径的最大路径为,并且它还计算了每个的距离。然后,我从做同样,并获得一套从和距离。最后,您要查找的顶点就是。边恰好是那些边(ℓ V 小号小号ℓ d 我小号吨(小号,v )v ∈ V 小号吨V 吨吨V 小号ö 升ü Ť 我ö Ñ = { v :v ∈ V 小号 ∩ V 吨,ð 我小号吨(小号,v )+ ð 我小号吨(吨,)。
该算法的运行时间肯定是因为它只执行两个BFS。但是运行时间实际上是,它将比的 -radius邻域小得多和很小。
编辑:实践中可能有一种更快的算法,它只能从而不是和深度进行BFS 。这将发现所有路径,然后通过进行一些簿记就可以找到所有顶点。当小时,对于大的随机图,这将通过平方根减少运行时间。