以最低成本遍历无向加权图的k个节点(并返回原​​点)的算法

时间:2019-05-22 23:22:02

标签: 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.

如果我想访问所有节点,则Traveling Salesman算法(及其所有变体)将起作用。但以我为例,“推销员”需要在访问 k 节点后返回家。

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

1 个答案:

答案 0 :(得分:2)

由于您的问题包括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次计算。