Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 旅行商模型中的贪婪方法与动态规划_Algorithm_Dynamic_Greedy_Traveling Salesman - Fatal编程技术网

Algorithm 旅行商模型中的贪婪方法与动态规划

Algorithm 旅行商模型中的贪婪方法与动态规划,algorithm,dynamic,greedy,traveling-salesman,Algorithm,Dynamic,Greedy,Traveling Salesman,如果用动态规划方法解决旅行商问题,它会提供比贪婪方法更好的可行解吗 我知道在最优解方面,贪婪算法用于求解TSP,但当顶点数量(即城市)非常大时,它会变得更加复杂,并且需要指数时间 那么,到底哪种方法更好呢?贪婪方法并不总是给出旅行商问题的最优解 示例:A(0,0),B(0,1),C(2,0),D(3,1) 销售员从A开始,B距离1,C距离2,D距离3.16。 推销员走到最接近的B,然后C是2.24,D是3。 销售员先到最近的C,然后到最后一个没去过的城市D,然后再回到A。 总行程A-B-C-D-

如果用动态规划方法解决旅行商问题,它会提供比贪婪方法更好的可行解吗

我知道在最优解方面,贪婪算法用于求解TSP,但当顶点数量(即城市)非常大时,它会变得更加复杂,并且需要指数时间


那么,到底哪种方法更好呢?

贪婪方法并不总是给出旅行商问题的最优解

示例:A(0,0),B(0,1),C(2,0),D(3,1)
销售员从A开始,B距离1,C距离2,D距离3.16。
推销员走到最接近的B,然后C是2.24,D是3。
销售员先到最近的C,然后到最后一个没去过的城市D,然后再回到A。
总行程A-B-C-D-A为7.81长。 行程A-B-D-C-A的长度为7.41,较短


动态解要慢得多,但总是给出最优解。

精确算法和启发式算法之间有重要区别。一个精确的算法可以保证找到精确的最优解。启发式不是,但它被设计为快速运行

DP是一种精确的算法,至少在通常情况下是如此。TSP有DP算法。因此,这些算法将准确地解决这个问题

TSP不能使用贪婪方法精确求解,因此任何贪婪方法都是一种启发式方法。因此,根据定义,对于TSP的任何实例,DP总能找到比贪婪启发式更好(或更差)的可行解

然而,请注意,DP不是解决TSP的主要方法。还有许多其他算法效率更高。关于TSP的一些原始文件使用DP,并且它经常作为一个说明性的例子来表述,但这不是通常在实践中解决TSP的方式

要更正OP中的某些内容,请执行以下操作:

我知道在最优解方面,贪婪算法用于求解TSP,但当顶点数量(即城市)非常大时,它会变得更加复杂,并且需要指数时间

贪婪启发式有时用于求解TSP。(它们的名称有“最近邻”、“最便宜插入”等)随着顶点数量的增加,这些启发式算法的运行时间也会增加,但不会呈指数增长。大多数启发式算法都具有低阶多项式复杂度的运行时,如O(n^2)


另一方面,由于TSP是NP难的,所有已知的精确算法在最坏情况下的复杂度都是指数级的。(请注意,我说的是最坏情况下的复杂性——对于许多情况,实际运行时间可能相当合理,但在最坏情况下只有指数级的。)

但您不认为只有当您有一个由多次重新评估的多个较小解决方案组成的解决方案时,动态规划才有效吗?