减少平均差异

时间:2014-08-24 16:23:10

标签: arrays algorithm performance sorting

两个数组A,B的长度相同(未分类)。 制作成对的条目(一个来自A,一个来自B),这样条目中的平均差异(| a1-b1 |,| a2-b2 |,....)是最小的。

我想过对它们进行排序然后制作成对的索引条目。 这会有用吗? 如果有,怎么样?还有其他一些有证据的解决方案。

2 个答案:

答案 0 :(得分:4)

我假设这个问题可以正式陈述如下:给定两个n元向量A和B,找到排列A' A和B'为了使A'的L1范数最小化, - B'。

如果是这样,那么您提出的算法是正确的。假设我们有一个带有反转的解,即a1与b2匹配,a2与b1匹配,使得a1 <1。 a2和b1&lt; B2。这些对对L1范数的贡献是

|a1 - b2| + |a2 - b1| >= |a1 - b1| + |a2 - b2|,

其中不平等来自我们推迟的一个不雅的案例论证。因此,通过将a1与b1和a2与b2重新匹配,我们减少了反转次数而不增加成本。通过归纳得出,没有反演的匹配是最优的。

案例论证:对称(通过交换A和B),有三种可能的交错。

(1) a1 <= a2 <= b1 <= b2
(2) a1 <= b1 <= a2 <= b2
(3) a1 <= b1 <= b2 <= a2

如果是(1),

|a1 - b2| + |a2 - b1|  = b2 - a1 + b1 - a2
                       = b1 - a1 + b2 - a2
                       = |a1 - b1| + |a2 - b2|.

在案例(2)中,

|a1 - b2| + |a2 - b1|  = b2 - a1 + a2 - b1
                      >= b2 - a1 + a2 - b1 - 2 (a2 - b1)
                       = b1 - a1 + b2 - a2
                       = |a1 - b1| + |a2 - b2|.

在案例(3)中,

|a1 - b2| + |a2 - b1|  = b2 - a1 + a2 - b1
                      >= b2 - a1 + a2 - b1 - 2 (b2 - b1)
                       = b1 - a1 + a2 - b2
                       = |a1 - b1| + |a2 - b2|.

答案 1 :(得分:0)

编辑:误读了这个问题,下面描述了当您按相反顺序对两个列表进行排序时差异总和为最大化的原因

这是另一种方法,可以看到您描述的算法为您提供了最佳解决方案。请注意,当您写出|x - y|时,它等于x - yy - x。因此,

|a_1 - b_1| + |a_2 - b_2| + ... + |a_n - b_n|

可以被认为是对数字a_1, ..., a_n, b_1, ... , b_n求和,除了它们的n符号被翻转。显然,当您选择否定n中的a_1, ..., a_n, b_1, ..., b_n最小数字时,这会最大化。事实上,这正是你的算法所做的。