【问题标题】:Algorithm to traverse k nodes of an undirected, weighted graph (and return to the origin) at the lowest cost以最低成本遍历无向加权图的 k 个节点(并返回原​​点)的算法
【发布时间】:2019-05-22 23:22:02
【问题描述】:

我正在寻找一种算法来执行以下操作:

In an undirected, weighted graph with cycles

-find a path that visits exactly k nodes
-minimize the total cost(weight)
-each node can be visited only once
-return to the origin

edit: The start (and end) vertex is set in advance.

如果我想访问所有节点,旅行推销员算法(及其所有变体)都可以工作。但就我而言,“推销员”需要在访问 k 个节点后回家。

在这种情况下,近似算法和精确算法都可以。

【问题讨论】:

  • 那些k 节点是预定义的,还是任何k 节点都可以?
  • 任何k个节点都可以
  • 那么它就不是 TSP(尤其是因为each node can be visited only once)。一个简单的 BFS 似乎就足够了。

标签: algorithm graph-theory shortest-path


【解决方案1】:

由于您的问题包括 k=n 的 TSP 作为一种特殊情况,因此它通常是 NP 完全的。对于较小的 k,您可以采用 Bellmann (1962) 的动态规划解决方案以在 O(2^k n^3) 时间内解决它。

令 T(u,S) 是从顶点 u 开始且 S 中的顶点已经访问过的最短路径的长度。然后,您需要所有起始顶点 u0 上的最小 T(u0,{u0})。 T满足递归

T(u,S) = min { d(u,v)+T(v,S+{v}) | v in V\S }     if |S|<k
T(u,S) = d(u,u0)                                  if |S|=k

对于距离 d(u,v)。 DP 表有 2^kn 个条目,每个条目需要 O(n) 时间来计算,对于每个起始顶点,您必须计算它 n 次。

【讨论】:

    猜你喜欢
    • 2021-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-21
    • 2021-08-23
    • 1970-01-01
    • 2017-11-05
    相关资源
    最近更新 更多