Algorithm 置换生成中的位生成
我正在学习TSP并非常了解它,但我不明白如何使用位掩蔽来生成所有置换。 如果我是3名公民,我会发现成本如下: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
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))