在此之前,先给大家讲讲最重要的一个点,搜索树的节点定义,节点定义了原问题的solution和子问题的solution。Node节点定义如下:
public class Node {private ArrayList path;private double bound;private int level;public double computeLength(double[][] distanceMatrix) {// TODO Auto-generated method stubdouble distance = 0;for(int i=0;i
其余不重要的接口略过。如下:
- path:保存该节点目前已经走过的城市序列。
- bound:记录该节点目前所能达到的最低distance。
- level:记录节点处于搜索树的第几层。
- computeLength:记录当前城市序列的distance。
可能大家还没理解节点是如何分支的,看一张图大家就懂了。我们知道TSP问题的一个solution是能用一个序列表示城市的先后访问顺序,比如现在有4座城市(1,2,3,4):
图中每个节点的数字序列就是path保存的。大家都看到了吧,其实分支就是一个穷枚举的过程。
相对于穷举,分支定界算法的优越之处就在于其加入了定界过程,在分支的过程中就砍掉了某些不可能的支,减