无向图的最小加权路径树

时间:2018-11-14 16:00:43

标签: algorithm tree graph-theory

假设我们有一个无向图G =(V,E),并且我们有两个节点S和X。

  1. 我们能否提出一种算法,以使从S到X的路径上边缘的最大权重最小化?请注意,这不是最短路径算法,因为我们不希望最小化它们的总和。
  2. 此算法的复杂性是什么?
  3. 最小生成树算法(例如Prim)是否可以解决此问题?

2 个答案:

答案 0 :(得分:1)

我不知道最小生成树是否可以解决它,但是通过对Dijkstra算法进行一些修改,它肯定可以解决。

将路径的“长度”定义为该路径的最大边缘。现在,使用Dijkstra算法找到从S到X的最短路径。这是您要寻找的路径。 如果您使用二进制堆,则复杂度为O((N+M)log N),而对于Fibonacci堆,则复杂度为O(N * log N + M)

请注意,对于路径长度的这个新定义,如果路径的长度为l,则在路径的末尾添加边缘不会减小其长度,因为该路径中的最大边缘可以仅增加。该属性对于Dijkstra的算法正常工作是必需的。

例如,如果您正在寻找边缘最短的路径,则Dijkstra的算法将失败,就像图形中存在负边缘时失败一样。

答案 1 :(得分:0)

您可以使用最小生成树(Prim算法)来解决此问题。您将从顶点X开始,然后继续使用Prim的算法构建树,直到找到df.date.diff().abs().dt.days<=90 。复杂度将为O((V + E)* logV)。
之所以会起作用,是因为在prim的算法中,您总是首先选择权重最小的边缘。