【发布时间】:2019-01-02 03:51:48
【问题描述】:
假设平面上有 N 个起点和 N 个有向线段(有起点和终点)。 N 条路线是通过从某个起点到某个段的开头,然后到该段的结尾来构建的。路线的长度是从起点到路段起点的距离加上路段的长度。问题是在起点和线段之间找到一个(可能是多个)一对一的匹配,以最小化匹配中路线的最大长度。
示例:
X 点:(100 100)
Y 点:(200 200)
Z点:(300 300)
段 S1:开始 (200 230) 结束 (180 220)
段 S2:开始 (190 190) 结束 (400 400)
段 S3:开始 (250 250) 结束 (700 700)
可能的答案之一:
X - S2
Y - S3
Z - S1
我最好的尝试是构建一个从点 i 到段 j 的路线长度的 NxN 矩阵,迭代地过滤掉该矩阵中的最大元素并应用 Hopcroft–Karp 算法来检查 N 对匹配生成的图形过滤矩阵存在。这种方法的最坏情况性能是 O(N2.5)*O(N2)=O(N4.5)。有没有更快的算法来解决这个问题?
如果所有点的坐标都是整数并且长度由Manhattan distance定义(即所有长度也是整数),算法是否也可以改进?
【问题讨论】:
-
举个例子会让你的问题更容易理解。
-
用曼哈顿距离替换欧几里得肯定会起作用,只要度量的唯一用途是比较距离。不过,对坐标为整数的约束不是必需的。虽然这是一个小的优化