我正在寻找一种算法来执行以下操作:
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 节点后返回家。
在这种情况下,近似算法和精确算法都可以。
答案 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次计算。