最小化两段路线的最大长度

时间:2018-07-25 10:45:30

标签: algorithm optimization

假设平面上有N个起点和N个有向线段(具有起点和终点)。通过从某个起点到某个路段的起点,再到该路段的终点来构造N条路线。路线的长度是从起点到路段起点的距离加上该路段的长度。问题是要在起点和路段之间找到一对一的匹配(可能是多个),以最大程度地减少匹配中路线的最大长度。

示例:
点X:(100100)
Y点:(200 200)
点Z:(300300)
段S1:开始(200 230)结束(180 220)
段S2:开始(190190)结束(400400)
S3段:开始(250 250)结束(700 700)
可能的答案之一:
X-S2
Y-S3
Z-S1

我的最佳尝试是构造一个从点i到段j的路由长度的NxN矩阵,迭代滤除该矩阵中的最大元素,然后应用Hopcroft–Karp算法检查该图的N对匹配由过滤后的矩阵生成的结果存在。这种方法的最坏情况是O(N 2.5 )* O(N 2 )= O(N 4.5 )。有没有更快的算法可以解决这个问题?

如果所有点的坐标都是整数并且长度由Manhattan distance定义(即,所有长度也是整数),也可以改进算法吗?

1 个答案:

答案 0 :(得分:1)

之后

  

构造从点i到路段j的路线长度的NxN矩阵

您遇到的优化问题称为Bottleneck Assignment Problem

This stack exchange post讨论了一种以O(N ^ 2.5 * log N)运行的“简单”算法。

基本思想是对参数t进行二进制搜索。在每次迭代中,您将丢弃成本> t的所有配对(矩阵项)。然后,您执行双向匹配算法(例如Hopcroft–Karp)。如果找到完全匹配,则减小t的值(将其减半),否则增大t的值(将其加倍)。当可能的t值不再更改输入时,您可以停止。