旅行商问题 |第 2 组(使用 MST 近似)
我们在上一篇文章中介绍了旅行商问题并讨论了该问题的朴素和动态规划解决方案。这两种解决方案都是不可行的。事实上,这个问题没有可用的多项式时间解,因为这个问题是一个已知的 NP-Hard 问题。不过,有一些近似算法可以解决这个问题。仅当问题实例满足三角不等式时,近似算法才有效。
三角不等式:从 i 到达顶点 j 的最短路径总是从 i 直接到达 j,而不是通过某个其他顶点 k(或顶点),即 dis(i, j) 总是小于或等于为 dis(i, k) + dist(k, j)。三角不等式适用于许多实际情况。
当成本函数满足三角不等式时,我们可以为 TSP 设计一个近似算法,该算法返回一个成本永远不会超过最优旅游成本两倍的旅游。这个想法是使用最小S平移树 (MST)。以下是基于 MST 的算法。
算法:
1)设 1 为 salesman 的起点和终点。
2)使用 Prim 算法以 1 为根构造 MST。
3)列出在构造的 MST 的前序游走中访问过的顶点,并在末尾加 1。
让我们考虑下面的例子。第一个图表是给定的图表。第二个图显示了以 1 为根构造的 MST。 MST的前序遍历是1-2-4-3。最后加 1 得到 1-2-4-3-1,这是该算法的输出。
在这种情况下,近似算法会产生最优路径,但它可能不会在所有情况下都产生最优路径。
这个算法是如何 2 近似的?上述算法产生的输出成本永远不会超过最佳输出成本的两倍。让我们看看上述算法如何保证这一点。
让我们定义一个术语完全步行来理解这一点。一个完整的遍历是列出所有顶点在前序中第一次被访问时,它还列出在子树被前序访问后返回时的顶点。上述树的完整步行将是 1-2-1-4-1-3-1。
以下是证明 2 近似性的一些重要事实。
1)最好的旅行推销员之旅的成本永远不会低于 MST 的成本。 (MST 的定义说,它是连接所有顶点的最小成本树)。
2) full walk的总成本最多是MST成本的两倍(MST的每条边最多被访问两次)
3)上述算法的输出小于full walk的代价。在上面的算法中,我们打印 preorder walk 作为输出。在前序游走中,两条或更多条完整游走的边被一条边替换。例如,将 2-1 和 1-4 替换为 1 边 2-4。因此,如果图形遵循三角形不等式,那么这总是正确的。
从以上三个陈述,我们可以得出结论,近似算法产生的输出成本永远不会超过最佳可能解决方案成本的两倍。
我们已经讨论了一个非常简单的 2 近似算法来解决旅行商问题。对于这个问题还有其他更好的近似算法。例如 Christofides 算法是 1.5 近似算法。我们将很快将这些算法作为单独的帖子进行讨论。
参考:
Clifford Stein、Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest 的算法介绍第 3 版
http://www.personal.kent.edu/~rmuhamma/Algorithms/MyAlgorithms/AproxAlgor/TSP/tsp.htm