【问题标题】:Reduce the Average difference减少平均差
【发布时间】:2014-10-17 21:15:28
【问题描述】:

两个数组 A,B 的长度相同(未排序)。 将它们的条目配对(一个来自 A,一个来自 B),使得条目(|a1-b1|,|a2-b2|,....)的平均差异最小。

我曾想过对它们进行排序,然后制作成对的相同索引条目。 这行得通吗? 如果是,如何?其他一些有证据的解决方案。

【问题讨论】:

  • A 的每个元素是否都必须与 B 的唯一元素配对,以便使用所有 B?
  • 是的,应该使用每个元素。

标签: arrays algorithm performance sorting


【解决方案1】:

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

这是查看您描述的算法为您提供最佳解决方案的另一种方法。请注意,当您写出|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 的符号被翻转了。显然,当您选择否定 a_1, ..., a_n, b_1, ..., b_n 中的最小数字 n 时,这将最大化。事实上,这正是您的算法所做的。

【讨论】:

  • 哇!这是一个很好的和不同的方式来研究这个问题。谢谢!
  • @user3739969 这是一个简洁的证明,但它似乎在描述最大化差异总和而不是最小化的问题。
  • 哎呀,你是绝对正确的。我误读了这个问题。我现在应该删除答案吗?
  • 但我猜该方法也可以扩展至最低限度。
【解决方案2】:

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

如果是这样,那么您提出的算法是正确的。假设我们有一个反转的解,即 a1 与 b2 匹配,a2 与 b1 匹配,使得 a1

|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|.

【讨论】:

    猜你喜欢
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    相关资源
    最近更新 更多