Algorithm 求两组坐标之间长度的最小平均值
假设我有两个坐标列表(两个列表上的计数相同),我们必须将集合A中的每个坐标分配给列表B中的一个坐标。选择此组合以获得最小平均长度的最佳方法是什么。 例如,在以下情况下:Algorithm 求两组坐标之间长度的最小平均值,algorithm,optimization,Algorithm,Optimization,假设我有两个坐标列表(两个列表上的计数相同),我们必须将集合A中的每个坐标分配给列表B中的一个坐标。选择此组合以获得最小平均长度的最佳方法是什么。 例如,在以下情况下: 一个明显的解决方案是将红色(1)指定给黑色(2),将红色(2)指定给黑色(3),将红色(3)指定给黑色(4),将红色(4)指定给黑色(1)。但这不是答案,因为这4种组合的平均长度高于将红色(1)分配给黑色(1),红色(2)分配给黑色(2),红色(3)分配给黑色(3),红色(4)分配给黑色(4)的解决方案 我的想法是循环通过两个
一个明显的解决方案是将红色(1)指定给黑色(2),将红色(2)指定给黑色(3),将红色(3)指定给黑色(4),将红色(4)指定给黑色(1)。但这不是答案,因为这4种组合的平均长度高于将红色(1)分配给黑色(1),红色(2)分配给黑色(2),红色(3)分配给黑色(3),红色(4)分配给黑色(4)的解决方案 我的想法是循环通过两个集合的每个组合,测量每个组合的平均距离,最后选择最小平均值,但这并不一定是最佳的解决方案。 有没有更好的方法来实现这一点
编辑:两组点可以完全随机分配,但有一点是点可以一个接一个地生成,例如,首先我们有一个黑色点和一个红色点,然后添加一个黑色点和一个红色点,依此类推该算法类似于Gale-Shapley算法。当然,这个问题假设对于每个坐标,我们知道从该坐标到其他坐标的距离。假设提供了一个列表,并按照与相关坐标最接近的坐标排序 那么算法如下 当有一个坐标c未分配给任何其他坐标时:
Choose that coordinate **c**
Let **a** be the closest coordinate to **c** that has not been assigned
If **a** has not been assigned then **a** and **c** are assigned to each other
Else **a** is already assigned **c'**
if **a** is closer to **c'** than **c**, then **c** remains unassigned
else if **a** is closer to c than c', then a and **c** are assigned to each other and **c'** becomes unassigned
endif
endif
返回指定对的集合
矛盾证明:始终匹配
- 我想不是。假设c是自由的,但已尝试分配给每个a
- 然后,必须已经分配了每个a(bc算法要求,一旦分配了a,它必须在算法的其余部分保留在某些分配中)
- 如果所有n a都在赋值对中,那么赋值对中必须有n c
- 两个列表的计数相同
- 矛盾,c不可能是自由的
- 我想不是。假设平均值没有它可能的那么小
- (a1,c1)(a2,c2)a1和c2比它们当前的匹配项更接近
- 算法声明这些对可能是a1,必须尝试分配c1
- a1是否曾尝试分配给c2?
- 如果不是,则c1比c2更接近a1
- 如果是这样,则c2必须拒绝a1的分配,因为c2已分配给更接近的坐标
- 相反,坐标将始终与可用的最近坐标匹配
时间复杂度:O(n^2)因为存在n x n个可能的对,在最坏的情况下,while循环将在n^2次迭代后终止我必须坐下来,在明天醒来时思考这个问题,但正如第一个想法一样,我想到了一个稳定的婚姻解决方案。您首先分配1->1,并在出现“更好”的情况时更新配对。然而,我不能不经过几个例子就说,如果这在所有情况下都能给出最优的解决方案。另一个想法是,如果您可以修改好的旧最近对问题,同时保留O(nlgn^2)->一定量的记忆以使其适用于所有对。您的点是像示例中那样对齐的,还是在平面中随机分配的?一个想法(以避免笛卡尔积)可能是考虑平面图(其中边不是交叉的,因为我们可以“去”它们以获得较小的和)这两组点可以随机地被完全调度。但是有一点是,一个点可以一个接一个地产生,例如,首先我们有一个黑色和一个红色点,然后加上一个黑点和一个红点,依此类推。IDK如果我真的明白我的意思。看起来像是一个“稳定的婚姻”问题。(或相关:“稳定的室友”)