假设我们有一个无向图G =(V,E),并且我们有两个节点S和X。
答案 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的算法中,您总是首先选择权重最小的边缘。