以最低代价遍历无向带权图的k个节点(并返回原​​点)的算法

标签 algorithm graph-theory shortest-path

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

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.

如果我想访问所有 节点,Travelling Salesman 算法(及其所有变体)将起作用。但就我而言,“推销员”需要在访问 k 个节点后回家。

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

最佳答案

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

令 T(u,S) 为从顶点 u 开始且已访问 S 中的顶点的最短路线的长度。然后你想要最小的 T(u0,{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 次。

关于以最低代价遍历无向带权图的k个节点(并返回原​​点)的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56266196/

相关文章:

algorithm - 给定一个排序数组,找到重复值的最大子数组

algorithm - 质因数分解

algorithm - 遍历所需边列表的最短路径

algorithm - 查找具有两个负边的图中从给定节点 s 到 V 中所有节点的最短路径距离

c++ - 当我想根据两个键排序时如何获得 O(log n)?

algorithm - 错误恢复算法?

python - 使用 networkx 在图中查找基数为 k 的所有 node_cut

algorithm - 这个二分图优化任务是 NP 完全的吗?

python - 使用 networkx 寻找弱关系

algorithm - 证明 Dijkstra 算法的修改