Algorithm 置换生成中的位生成

Algorithm 置换生成中的位生成,algorithm,bit-manipulation,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 或: 位屏蔽是如何在这个中使用的这是一个动态规划解决方案,它具有O(2^n*n^2)时间和O(2^n*n)空间复杂度,使用位屏蔽 我们假设f(mask,last)是mask中所有城市的最短路径,它从0城市开始,到last城市结束(last必须在mask中) 基本情况很简单:f(1,0)=0

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


位屏蔽是如何在这个

中使用的这是一个动态规划解决方案,它具有
O(2^n*n^2)
时间和
O(2^n*n)
空间复杂度,使用位屏蔽

我们假设
f(mask,last)
mask
中所有城市的最短路径,它从
0
城市开始,到
last
城市结束(
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))

答案是
min(f(2^n-1,last)+dist(last,0)表示last=1…n-1)

什么是“位屏蔽”确切的意思是?意味着我们使用了n个城市1您是指带有位掩码的动态规划解决方案吗?@user2040251是的,先生,请解释一下这对我很有帮助我不明白在
计算中making是如何工作的function@user4392540这个代码很难读,但一般来说,它做的事情和我在回答中描述的一样,它只是使用递归explain@user4392540我们必须回到起点城市,我们可以在任何一个1。。。n-1城市。因此,我们尝试了所有选项并选择了最好的一个。还解释了cur not in mask的第一个循环

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