繁体   English   中英

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

[英]Greedy approach VS Dynamic programming In travelling 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。
ABCDA的总行程为7.81长。 行程ABDCA长7.41,较短。

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

精确算法启发式 算法之间存在重要区别。 可以使用精确算法来找到精确的最佳解。 试探法不是,但是它旨在快速运行。

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM