算法导论15 |
您所在的位置:网站首页 › audeze欧几里得 › 算法导论15 |
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点的距离之后,这里指的是最短距离之和,两条线路无相同点(除去起点和终点)。在这里,由于两条线在意义上是等价的,因而我们规定i0 当j == n,且remain[i, j] >= 0 (其实这里表示的就是最后一行) |------>(remain[i, j])3 非上述两种情况时 定义所有立方之和sum[i],假设sum[j]表示的是1,...,j这j个单词的最优排列(即所求立方和最小),那么在最后一行,假设是i,...,j这些单词,那么sum[j] = sum[i-1] + cube[i, j]。 |------>0 if j == 0 sum[j] = | |------>min(sum[i - 1] + cube[i - 1, j] if j > 0,其中1 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |