我正在学习TSP并且理解它很好,但我无法理解如何使用位屏蔽来生成所有排列。 如果我是3个城市,那么我会发现费用为:
0 1 2 3
0 1 3 2
0 2 1 3
0 2 3 1
0 3 1 2
0 3 2 1
或:
g(0,{1,2,3})
/ | \
g(1,{2,3}) g(2,{1,3}) g(3,{1,2})
/ \ / \ | \
g(2,{3}) g(3,{2}) g(1,{3}) g(3,{1}) g(1,{2}) g(2,{1})
/ | | | | |
0 0 0 0 0 0
g(3,null) g(2,null) g(3,null) g(1,null) g{2,null) g(1,null)
本
中如何使用位屏蔽答案 0 :(得分:0)
这是一个动态编程解决方案,其O(2^n * n^2)
时间和O(2^n * n)
空间复杂度使用位掩码。
我们假设f(mask, last)
是mask
中所有城市的最短路径,这些城市从0
城市开始,到last
城市结束({{1}必须在last
)。
基本情况很简单:mask
(它对应于我们到目前为止唯一访问的城市是起始城市的情况。)
过渡:
f(1, 0) = 0
答案是 for cur not in mask
for last = 0 ... n - 1
f(mask or 2^cur, cur) = min(f(mask or 2^cur, cur), f(mask, last) + dist(last, cur))