在给定函数的情况下找到具有最小权重的路径
Posted
技术标签:
【中文标题】在给定函数的情况下找到具有最小权重的路径【英文标题】:Finding the path with the minimum weight given a function 【发布时间】:2017-04-22 18:15:42 【问题描述】:我得到了一个无向图 G = (V, E)
、一个顶点 s
在 V
和一个函数 w:E->0,1
。给定V
中的任何v
,我需要返回路径的权重(路径的权重= 路径边缘的权重之和),最小权重从s
到v
in @ 987654329@时间。。
这听起来像是一个我懒得解决的家庭作业问题(我不时收到这些回复),但我一直在努力解决这个问题,我非常感谢任何帮助或指导你可能有我。
【问题讨论】:
M. Thorup 有一个线性算法,但我找不到它的(非付费)描述...... 【参考方案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的距离归纳来证明。
【讨论】:
以上是关于在给定函数的情况下找到具有最小权重的路径的主要内容,如果未能解决你的问题,请参考以下文章