我想解决类似于TSP(旅行商问题)的问题。 我有N(N> 0,N< 20)个节点,我必须访问所有节点。 节点之间的成本是相等的。 我可以无限次访问一个节点。 我想找到不止一条路径而且费用没有限制。 告诉我一些关于这个问题的有效算法?
答案 0 :(得分:0)
这是一个使用加权图表的解决方案。
首先,天真的解决方案,枚举。
它适用于O(n!)
,因为有(n-1)!
哈密顿路径,你需要O(n)来检查每个路径。
有更好的算法,O(n*2^n)
将状态定义如下:对于x
一个节点,S
一组包含x
的节点:
w[S][x]
=从节点x
开始的最短路径的权重,并通过集S
中的所有节点,然后在0
结束。
请注意,0
不一定属于S
。
S = {x}
是基本案例:w[S][x] = weight(w,0)
然后是递归公式:
如果S
大于{x}
,则会对可能的下一步y
进行迭代
w[S][x] = min(weight(x,y) + w[S\x][y] for all y in S\x)
该算法只输出一条最佳路径。