algorithm - 自行车与人的最佳配对——求算法证明

标签 algorithm sorting proof

所以这是一道算法题。问题陈述如下: 给定二维网格(或显示每辆自行车和人的位置的二维网格)上自行车和人的两个坐标列表(或每个坐标的长度 n),计算自行车和人的最佳配对,以便曼哈顿总距离所有对的最小化。保证每个人到所有自行车的距离不会相同,并且对每辆自行车适用相同的距离。

this question中有解决方案,它指出我们可以对所有距离从低到高进行排序,如果他们都未配对,则将自行车与人配对。复杂度显然是 O(n^2 logn) 时间和 O(n^2) 空间。

所以我的问题是

  1. 这是最佳方式吗?为什么?有人可以证明它的最优性吗?如果不是最优的,那么最小化总距离的最优算法是什么?
  2. 它与 stable marriage problem 有什么关系? ?

更新:

链接的问题使用不同的优先级标准。那么,如果标准是最小化曼哈顿总距离(复杂度呈指数级的蛮力 DFS 算法除外),计算最佳配对的算法是什么?

更新 2:

如果标准是没有一对比他们现在的伴侣更喜欢对方,那么这是一个稳定的婚姻问题。如果标准是距离总和,则应使用匈牙利算法。

最佳答案

排序算法计算出稳定的婚姻,因为无论何时形成一对,每个邻居要么可用,要么在一对不低于期望值的配对中。

稳定的婚姻并不是最优的。自行车和距离 2 的人宁愿在一起,这迫使自行车和距离 9 的人配对。总成本为 11,比 3 + 4 = 7 差。

    B
  2 |3
B---P
|4
P

最佳算法是计算成对距离并运行匈牙利算法来计算最小成本完美匹配。

关于algorithm - 自行车与人的最佳配对——求算法证明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54451846/

相关文章:

java - 为什么较低的 delta 会导致我的 PID Controller 调整精度较低?

arrays - 在给定数组中查找 2 个重复元素

haskell - 泛化 fold 使其变得足以定义任何有限递归?

algorithm - 证明一台共享机器和一台具有无限并行容量的调度算法

binary - 解释为什么 x == ~(~x + 1) + 1 (二进制补码和返回!)

c# - 找到搜索数据结构字符串比较的最佳方法

java - 如何计算一组字符串的最短唯一前缀?

javascript - 反转数组的最短代码

java - 根据字段对 ArrayList 进行排序?

python - 多个 CSV Python 排序