[英]Minimum Weighted Path Tree of an Undirected Graph
假设我们有一个无向图G =(V,E)并且我们有两个节点S和X.
我不知道最小生成树是否可以解决它,但是通过对Dijkstra算法进行一些修改,它肯定可以解决。
将路径的“长度”定义为该路径的最大边缘。 现在,使用Dijkstra算法找到从S到X的最短路径。 这是您要寻找的路径。 如果使用二进制堆,则复杂度为O((N+M)log N)
O(N * log N + M)
,而对于Fibonacci堆,复杂度为O((N+M)log N)
O(N * log N + M)
。
请注意,对于路径长度的这个新定义,如果路径的长度为l
,则在路径的末尾添加边缘不会减小其长度,因为该路径中的最大边缘只能增加。 该属性对于Dijkstra的算法正常工作是必需的。
例如,如果您正在寻找边缘最短的路径,则Dijkstra的算法将失败,就像图形中存在负边缘时失败一样。
您可以使用最小生成树(Prim算法)来解决此问题。 您将从顶点S
开始,然后继续使用Prim的算法构建树,直到找到X
为止。 复杂度将为O((V + E)* logV)。
之所以会起作用,是因为在prim的算法中,您总是首先选择权重最小的边缘。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.