首先,什么是TSP问题?直接摘百度——
旅行商问题,即TSP问题(Traveling Salesman Problem)又译为旅行推销员问题、货郎担问题,是数学领域中著名问题之一。假设有一个旅行商人要拜访n个城市,他必须选择所要走的路径,路径的限制是每个城市只能拜访一次,而且最后要回到原来出发的城市。路径的选择目标是要求得的路径路程为所有路径之中的最小值。
显然这是一个寻求最短路径的问题,对于这类问题解法很多。如果没有了解过动态规划的思想,先来考虑一下一种很常见的生活场景。比如,某市长需要评选最佳学生,那么市长需要怎么做呢?理所当然地,要知道最佳学生是谁,该学生必然是某学校的最佳学生,也必然是某年级、某班的最佳学生。
也就是说想要解决一个复杂的问题,可以把它分解成较小的子问题,在子问题中选择最优解。上述例子就是这样的,市长选一个最佳学生不需要了解全市所有的同学,会累死的!他只要在各学校选出来的学生之中选一个就行。校长也不需要了解全校学生,他同样是在各年级最佳学生中选一位就行;到了级长,也是同样的操作;最后到班级,老师直接选一位最好的就行。这样,在解决问题的每一个阶段,工作量都是很小的,谁都不会累死,那么问题到最后都是可解决的。
解决这个问题的步骤总结为:
寻找市最佳->寻找校最佳->寻找年级最佳->寻找班级最佳
其实这个就是动态规划的核心思想,一看专业名词好像很高深,但生活中是个正常人都会这么思考。
动态规划,(dynamic programming,代码中一般都用dp简称)——将一个问题拆成几个子问题,分别求解这些子问题,最后求出大问题的解。
那么问题来