【问题标题】:Finding shortest sequence of vertices in directed weighted graph在有向加权图中找到最短的顶点序列
【发布时间】:2015-04-11 11:36:52
【问题描述】:

假设我有顶点uv 以及一些数字n

如何计算每两个顶点之间有一条边的最短顶点序列的长度(边权重之和)?

例如:

(u, e_1, u_2, e_2, ..., e_n, v)

序列以顶点u 开始,以顶点v 结束,并且具有n 边。

【问题讨论】:

  • 是否允许重复?
  • @krjampani 是的,他们是

标签: algorithm graph graph-theory


【解决方案1】:

由于允许重复,这可以通过稍微改变 Bellman-Ford 算法在多项式时间内解决。令 OPT(v,i) 表示使用 i 条边到达 v 的最优成本,令 w(x,y) 表示顶点 x 和 y 之间的权重。那么我们就有如下的递归:

OPT(v, i+1) = min { OPT(u, i) + w(u,v) },在所有边 (u,v) 上。

这可以在 O(nm) 中以自下而上的方式解决,其中 m 是边数。这是伪代码。

function computeShortestPath (u, v, n):
    foreach q in vertices:
        OPT[q][0] = inf;
    OPT[u][0] = 0;
    for (i = 1; i <= n; i++):
        foreach q in vertices:
            OPT[q][i] = inf;
        foreach (p,q) in edges:
            OPT[q][i] = min(OPT[q][i], OPT[p][i-1] + w[p][q]);
    return OPT[v][n];

请注意,如果不允许重复,则问题是哈密顿路径问题的推广,即 NP-Hard。

【讨论】:

  • w(u, v) 是什么意思? uv 之间的边的权重?
  • 是的,它代表重量。
  • 我怎么知道我使用的正是 n 边(n 是给我的数字)?
  • 根据定义,OPT(v, k) 表示使用恰好 k 个边从 u 到 v 的路径的最优成本。所以 OPT(v, n) 给你解决方案。
  • 你必须计算所有顶点 q 和所有数字 i 直到 n 的 OPT(q, i)。为澄清添加伪代码。
【解决方案2】:

这可以通过动态规划来完成。我们首先用“n-1”解决每个节点的问题,从节点“u”开始,出边到“v”,然后解决方案是min(sum(sol(u,r),weight(r,v))) 这个算法是 O(n|vertices|)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-05
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 2012-05-14
    • 2019-09-23
    相关资源
    最近更新 更多