Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 求两组坐标之间长度的最小平均值_Algorithm_Optimization - Fatal编程技术网

Algorithm 求两组坐标之间长度的最小平均值

Algorithm 求两组坐标之间长度的最小平均值,algorithm,optimization,Algorithm,Optimization,假设我有两个坐标列表(两个列表上的计数相同),我们必须将集合A中的每个坐标分配给列表B中的一个坐标。选择此组合以获得最小平均长度的最佳方法是什么。 例如,在以下情况下: 一个明显的解决方案是将红色(1)指定给黑色(2),将红色(2)指定给黑色(3),将红色(3)指定给黑色(4),将红色(4)指定给黑色(1)。但这不是答案,因为这4种组合的平均长度高于将红色(1)分配给黑色(1),红色(2)分配给黑色(2),红色(3)分配给黑色(3),红色(4)分配给黑色(4)的解决方案 我的想法是循环通过两个

假设我有两个坐标列表(两个列表上的计数相同),我们必须将集合A中的每个坐标分配给列表B中的一个坐标。选择此组合以获得最小平均长度的最佳方法是什么。 例如,在以下情况下:


一个明显的解决方案是将红色(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如果我真的明白我的意思。看起来像是一个“稳定的婚姻”问题。(或相关:“稳定的室友”)