【问题标题】:Finding the path with the minimum weight given a function在给定函数的情况下找到具有最小权重的路径
【发布时间】:2017-04-22 18:15:42
【问题描述】:

我得到了一个无向图 G = (V, E)、一个顶点 sV 和一个函数 w:E->{0,1}。给定V 中的任何v,我需要返回路径的权重(路径的权重= 路径边缘的权重之和),最小权重从sv in @ 987654329@时间。

这听起来像是一个我懒得解决的家庭作业问题(我不时收到这些回复),但我一直在努力解决这个问题,我非常感谢任何帮助或指导你可能有我。

【问题讨论】:

  • M. Thorup 有一个线性算法,但我找不到它的(非付费)描述......

标签: algorithm


【解决方案1】:

这个问题可以通过 BFS 算法的类比来解决,但是使用双端队列 (D) 而不是队列。算法对每个顶点使用“已标记”的标志列表,初始化为 false。将显示到 s 的距离,因此您可以存储它们或“即时”使用。

D 将存储对(顶点、距离标签)。

算法开始:

D 由 (s, 0) 初始化。

在每次迭代中,从距离标签 d 的 D(顶点 v)中提取前(头)顶点。

如果 v 已经标记为达到,则跳到下一次迭代。

否则,将 v 标记为已到达。现在 d 是 s 和 v 之间的正确距离。对于每个未到达的邻居(顶点 w),更新它的距离标签(d_w=d+dist(v,w))并将 pair(w,d_w) 放在 D 的头部,如果 dist (v,w)=0 或者放到尾部,否则。

算法结束。

当您将所有顶点标记为已到达时,您可以存储它们的距离。可能所有未到达的顶点都有无穷远的距离。

工作时间为 O(|V|+|E|),因为您只处理每个顶点和每条边(在 s 的连通分量中)一次。

算法的正确性可以通过到s的距离归纳来证明。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-14
    • 2015-05-17
    • 2013-05-27
    • 1970-01-01
    • 2020-03-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多