CLRS 15-1 双调欧几里得旅行商问题
欧几里得旅行商问题是对平面上给定的n个点确定一条连接各点的最短闭合旅程的问题。如图(a)给出了一个7个点问题的解。这个问题的一般形式是NP完全的,故其解需要多于多项式的时间。
J. L. Bentley建议通过只考虑双调旅程来简化问题,这种旅程即为从最左点开始,严格地从左到右直至最右点,然后严格地从右到左直至出发点。下图(b)显示了同样的7个点的最短双调路线。在这种情况下,多项式的算法是可能的。事实上,存在确定的最优双调路线的O(n2)时间的算法。
描述一个确定最优双调路线的O(n2)时间的算法。可以假设任何两点的x坐标都不相同。(提示:从左到右扫描,保持路线两部分的最优概率)。
a)最短闭合路线,长度大约是24.89。这个路线不是双调的。 b)相同点的集合上的最短双调闭合路线。长度大约是25.58
解题思路:
1.题目所求的结果就是最左端点到最右端点的两条线路,对于这两条线路,线路上的点的x坐标是递增的(第i个点一定比i-1个点的x坐标大)
2.从左端点开始,有两条线路出发,用d(i, k)表示两条线路分别到达i点和k点的距离之后,这里指的是最短距离之和,两条线路无相同点(除去起点和终点)。在这里,由于两条线在意义上是等价的,因而我们规定i<=k,即一条线路总是领先着。
3.从2可以看出,d(n, n)即为所求。
对于d(i, k),我们可以如下分析:
1)当k < i-1时,有
d(i, k) = d(i-1, k) + |Pi-1Pi|,这里表示d(i, k)必然包含线段|Pi-1Pi| (点Pi-1和点Pi之间的距离)
2)当k = i-1时,有
d(i, k) = d(i-1, u) + |PuPi|,其中1 <= u < i-1,这里遍历u的值,寻找最短距离
3)当k = i时,有
d(i, k) = d(i-1, u) + |Pi-1Pi| + |PuPi|,其中1 <= u < i-1
转自 http://www.cnblogs.com/shuaiwhu/archive/2012/05/13/2497355.html