BIT进行排列生成

时间:2014-12-25 15:04:02

标签: algorithm bit-manipulation

我正在学习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)

中如何使用位屏蔽

1 个答案:

答案 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))