Optimization 旅行推销员-为什么贪婪的算法不能保证提供最佳解决方案?

Optimization 旅行推销员-为什么贪婪的算法不能保证提供最佳解决方案?,optimization,greedy,Optimization,Greedy,为什么没有贪婪算法可以保证为旅行推销员问题提供最优解?有这样一个例子吗?简单的回答是,旅行商问题不满足证明贪婪算法正确性所需的性质。为了使贪婪算法正确,它必须同时满足贪婪选择属性(算法中的第一个选择总是在最优解中)和最优子结构属性(问题的最优解包含每个子问题的最优解) 虽然旅行商确实满足最优子结构性质,但该问题的任何算法都不能满足贪婪选择性质。贪婪算法要求丢弃每个子问题的其他潜在解决方案,而旅行商太复杂了,无法做到这一点 旅行商的一个通用算法是选择一个起点,生成所有(n-1)!参观城市的排列,计

为什么没有贪婪算法可以保证为旅行推销员问题提供最优解?有这样一个例子吗?

简单的回答是,旅行商问题不满足证明贪婪算法正确性所需的性质。为了使贪婪算法正确,它必须同时满足贪婪选择属性(算法中的第一个选择总是在最优解中)和最优子结构属性(问题的最优解包含每个子问题的最优解)

虽然旅行商确实满足最优子结构性质,但该问题的任何算法都不能满足贪婪选择性质。贪婪算法要求丢弃每个子问题的其他潜在解决方案,而旅行商太复杂了,无法做到这一点

旅行商的一个通用算法是选择一个起点,生成所有(n-1)!参观城市的排列,计算每个城市的费用,然后返回最便宜的排列。此算法的运行时间为Θ(n!)


旅行推销员问题的决策版本是一个NP完全问题(在这个版本中,给定长度X,给定的城市列表的距离是否小于或等于X)。NP是“非确定性多项式”的缩写,NP中的问题意味着,给定问题的答案,您可以在多项式时间内验证证书是否正确。NP完全问题是NP中最难的一类问题,任何NP完全问题都不能在多项式时间内求解。

哪个TSP(一般、度量、欧氏等)和哪个贪婪算法(NN,添加不会破坏巡演的最小边,根据线性松弛方面看起来最不糟糕的部分决定是否使用边,等等)?贪婪算法既不完整也不是最优的,因为它们会选择局部最优的选项,而放弃每个节点的其他选项。如果要获得最优解决方案,必须添加回溯。这样,您可以获得所有解决方案,并选择最优解。