Dijkstra的单源Shourtest路径,额外的边缘,重量为' w'

时间:2016-10-17 15:10:48

标签: algorithm data-structures graph

在最近的一次采访中,我被要求实施单源最短路径算法(对于无向和正加权图),略微修改,即我们给予额外的权重' w。'。我们必须找到一个比SSSP算法计算的路径更短的路径,通过在两个尚未连接的节点之间连接额外的边缘,重量为“w”。 Here's an image. As according to SSSP the shortest path between A(source) & D(destination)is A-B-C-D i.e. total of 8.

但考虑到额外的优势。它可以连接在尚未连接的A和D之间,以最小化通过SSSP算法产生的最短路径。 Image of graph with extra edge contributing the shortest path

我试着考虑解决方案。但到目前为止没有任何进展。我已经实现了Dijkstra算法来找到最短路径。但这个小修改让我感到困惑。那么你可以帮一下吗?

2 个答案:

答案 0 :(得分:3)

有两种选择:

  1. 我们不需要额外的优势。这种情况由标准的Dijkstra算法处理。

  2. 带有额外边缘的最短路径如下所示:shortest_path(start, V) + (V, U) + shortest_path(U, target)。也就是说,我们从原始图中的最短路径开始到某个顶点V,然后我们通过添加这个额外边({{1}来转到U(再次,一个任意顶点) }}和V不能连接),而不是我们通过原始图表中的最短路径从U转到目标节点。

  3. 我们可以使用路径的结构来获得U解决方案:我们可以计算从起始节点到所有其他路径的最短路径(Dijkstra算法的一次运行)和从目标节点到所有其他节点的所有最短路径(再运行一次)。现在我们可以迭代所有可能的对O(n ^ 2)并选择最好的对。

  4. 奖励:我们可以在(V, U)中为稀疏图解决它。这个想法如下:我们可以找到O(m log n),而不是检查所有(U, V)对,它在U中未与V连接的所有顶点中与目标的距离最小{1}}(或甚至线性)时间(此问题称为查找不在集合中的最小元素)。

答案 1 :(得分:0)

我不确定我是否理解你的问题。你有一个加权图,可以用w添加边,添加到最短路径的位置。 我想我们可以使用spfa + dp来解决这个问题。将所有其他边设置为w并创建布尔矩阵m,m [i,j] = 1意味着当我们到达u而不使用额外边缘时,i,j,dp [u,0]之间没有边缘意味着最短距离,dp [u ,1]意味着使用额外的边缘。我不写dp传递方程。所以我们可以在spfa中迭代,我们也可以回溯dp的最佳方式并获得设置额外优势的位置。

我们不在上述解决方案中使用Dijkstra算法。

spfa也是单源Shourtest路径算法,它可以处理负加权边缘,但不是负循环。

这只是我的想法,我没有尝试过。但我认为这是一个解决它的想法。 如果有任何错误,请告诉我。