贪婪的方法VS动态编程在旅行推销员中

时间:2019-02-05 12:06:25

标签: algorithm dynamic greedy traveling-salesman

如果使用动态规划方法解决了旅行商的问题,是否会比贪婪的方法提供更好的解决方案?

我知道,就最优解而言,贪婪算法用于求解TSP,但是当顶点(即城市)的数量很大时,贪婪算法会变得更加复杂并花费指数时间。

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

2 个答案:

答案 0 :(得分:0)

贪婪的方法并不总能为旅行商问题提供最佳解决方案。

示例: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,短。

动态解决方案要慢得多,但始终会提供最佳解决方案。

答案 1 :(得分:0)

精确算法启发式之间有重要区别。可以使用精确算法来找到精确的最佳解。启发式不是,但是它设计为可以快速运行。

DP是一种精确的算法,至少与通常使用的算法一样。有用于TSP的DP算法。因此,这些算法将精确地解决问题。

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

但是,请注意,DP不是解决TSP的主要方法。存在许多其他效率更高的算法。有关TSP的原始论文中有一些使用DP,通常将其作为一个说明性的例子,但这并不是通常在实践中解决TSP的方法。

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

  

我知道,就最优解而言,贪婪算法用于求解TSP,但是当顶点(即城市)的数量很大时,贪婪算法会变得更加复杂并花费指数时间。

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

另一方面,由于TSP是NP难解的,所以所有已知的精确算法都将具有最坏情况的复杂度,其顶点数呈指数级增长。 (请注意,我说的是最坏情况的复杂性-实际运行时间在许多情况下可能是相当合理的,但在最坏的情况下只能是指数形式。)