TSP(Traveling Salesman Problem)-----浅谈旅行商问题(动态规划,回溯实现)
1.什么是TSP问题 一个售货员必须访问n个城市,这n个城市是一个完全图,售货员需要恰好访问所有城市的一次,并且回到最终的城市。 城市于城市之间有一个旅行费用,售货员希望旅行费用之和最少。 完全图:完全图是一个简单的无向图,其中每对不同的顶点之间都恰连有一条边相连。 2.TSP问题前提 回朔法:把所有的解列出来,形成一棵树,利用剪枝深度优先进行遍历,遍历的过程记录和寻找最优解。(剪枝就是把一条再深搜下去也不是最优解的分支剪去)。 动态规划:把一个大问题拆分成小问题,把小问题的最优结果通过表保留,在新问题需要用到的时候可以直接获取。 PS:下面的图,文字中出现1,2,3,4分别表示城市1,城市2,城市3,城市4 3.回朔法实现TSP问题 上面提到回朔法就是把所有的解列出来,形成一棵树,上面的例子形成的树如下:我们假设城市1为起点 上面介绍回溯法就是把所有解列出来,然后剪枝深搜。那么我们需要解决的就是剪枝深搜了。剪枝深搜中最麻烦的就是找到何时剪枝的条件了。 首先我们假设不知道剪枝条件,先模拟深搜跑一遍。 从1深搜到4回到1,花费11,记录这个数值。接下来回溯,继续深搜。一步一步深搜的时候,遇到了一个特殊的时候: 还记得我们之前记录的最短花费为11吗,1->2-