【问题标题】:Lightest paths tree最轻的路径树
【发布时间】:2012-05-13 18:26:34
【问题描述】:

我需要编写算法,在有向加权图中找到最轻的路径树。 (应该尽可能高效) 我得到一个顶点 S,需要构建一个从 S 到所有可以从 S 接近的顶点的路径树,因此树中的路径是最轻的(路径权重是没有末端的路径)

我考虑过首先计算到 S 的所有距离然后对于每条路径都会有一个新的权重: 重量减去两端 然后在带有新权重的图表上运行 dijkstra...

它会起作用吗?是否足够高效?如何计算距离?

【问题讨论】:

  • 您是否正在寻找来自单一来源的Minimum Spanning Treeshortest path?这些是不同的问题。确定解决方案 A 优于解决方案 B 的标准是什么?
  • @amit 基本上我的问题中的每个顶点都有一个值(非负)。然后我有 S 源顶点,我需要构建路径树到所有顶点可以从 S 接近
  • 对于 2 棵给定的树 - 你如何评估树 T1 是否比树 T2 更好?标准是什么?
  • 我不明白.. 从 S 到顶点的路径应该是最便宜的

标签: algorithm


【解决方案1】:

您的 cmets 建议您实际上是在寻找从单一来源到所有顶点的最短路径。

看看Dijkstra's algorithm 是如何工作的。该算法从大小为 1 的树(仅源)开始,并迭代地将顶点添加到树中。最后,由dijkstra算法创建的树,代表了从源到图中每个节点的最短路径。

请注意,dijkstra 的算法需要边上的权重函数,而您的权重函数在顶点上。可以通过定义一个新的权重函数w':E->R: w'(u,v) = w(u) 轻松解决(它可以工作,因为你不想计算结束)。

【讨论】:

  • 复杂度和dijktra的算法一样吗?
  • 是的。它可以在 dijkstra 的算法运行时创建,只要算法找到通向它的最短路径,就向树中添加一个顶点。
【解决方案2】:

听起来您要的是minimum spanning tree。*页面讨论了算法。

【讨论】:

  • 实际上,他的问题,尤其是他的 cmets 表明他正在寻找到每个顶点的最短路径,而标题只是误导。 (特别是评论:The paths from S to the vertices should be the cheapest