繁体   English   中英

最小化两个 Arrays 的绝对差之和

[英]Minimize Sum of Absolute Difference of Two Arrays

我有两个大小为n的整数AB的 arrays 。 一对的成本是|A(i) - B(i)| .
我想将 A 和 B 的 n 个元素配对,以使所有A(i)B(i)的所有成本的总和最小化。

我知道我可以通过排序A得到O(n log n) ,然后排序B ,然后分别从1...n将它们配对,但是在尝试了几个小时之后,我不知道如何证明它。 有人可以帮帮我吗?

我已经看到了如何实现它,我只是不知道如何证明它

假设按照当前排序的arrays,有一对|xa| , 和另一对|yb| . 假设切换元素会产生更小的总和,即更优的解决方案。
(注意:在两对左右切换时,阵列的 rest 不受影响)。

Current total sum of pairs = |x-a| + |y-b|  
Modified sum after switching pairs = |x-b| + |y-a|
Difference in sums = diff = |x-b| - |x-a| + |y-a| + |y-b|

如果diff为负数,则意味着我们找到了更好的排序。 如果不是,则意味着我们最初的解决方案更好。

现在,您可以采取案例并对此进行分析。 (由于 arrays 已排序,因此让x<y (它们来自第一个数组)和a<b (它们来自第二个数组)。

  1. 案例 1: x>by<a
    在这种情况下,两个和将相等,这可以通过扩展模数很容易看出
  2. 案例 2: a<x<b
    如果y>b ,则diff = 2*(bx) 因为我们假设b>x ,所以diff是正数。
    如果y<b ,则diff = 2*(yx) 由于y>x如前所述,diff 再次为正。

您可以继续采取类似的案例并证明diff将始终为正,这意味着我们最初的排序将是最有效的排序。

我在这里采用一种稍微不同的方法,通过使用平方而不是绝对来证明这一事实。

考虑 2 arrays, A = [a1, a2, ..., an]B = [b1, b2, ..., bn]

现在,即使我使用随机配对(使用AB中的任何索引形成一对),

假设,差的平方和 ( S ) = a1^2 + b1^2 + a2^2 + b2^2 +... + an^2 + bn^2 - 2 * (a1 * b3 + a2 * b4 +.... + an * b56 + bn * a34)。

上面的总和可以表示为S = sum(ai^2) + sum(bi^2) - 2 * sum(ai*bi) ,因为i从 1 到 n。

为了最小化这个总和,我们需要最大化部分sum(ai*bi) ,因为i从 1 变为 n。

当对 2 个 arrays 进行排序时,项sum(ai*bi)将最大。

感谢您指出@Abhinav MathurThe term sum(ai*bi) will be maximum when the 2 arrays will be sorted可以使用 重排不等式来证明。

排序和配对创建了一个我们可以称为“单调”的匹配,它确保如果 A[i] 匹配 B[x] 并且 A[j] 匹配 B[y],那么:

  • 如果 A[i] < A[j] 那么 B[x] <= B[y];
  • 如果 B[x] < B[y] 则 A[i] <= A[j]

如果您选择的匹配不是单调的,那么某些匹配对将违反这些规则之一。

如果我们从 arrays 中选择任意两个元素,使得 A[i] <= A[j] 和 B[x] <= B[y],那么我们可以评估单调配对和其他配对的成本。 请注意,如果 A[j] = A[j] 或 B[i] = B[j] 则两个配对具有相同的成本,因此我们称之为单调的并不重要。

为了比较成本,我们需要摆脱绝对值操作。 我们可以通过分别考虑 4 个值之间的所有可能排序来做到这一点:

案例:A[i] <= A[j] <= B[x] <= B[y]:

  • 单调成本:B[x]-A[i] + B[y]-A[j]
  • 交换成本:B[y]-A[i] + B[x]-A[j]
  • 差异:0
  • 成本是一样的——我们选择哪一个都没关系

案例:A[i] <= B[x] <= A[j] <= B[y]

  • 单调成本:B[x]-A[i] + B[i]-A[j]
  • 其他费用:B[y]-A[i] + A[j]-B[x]
  • 差异:2A[j] - 2B[x]
  • 由于 A[j] >= B[x],单调性同样好或更好

... ETC

如果您通过所有 6 个可能的排序 go,在每种情况下,您都会发现单调匹配同样好或更好。 给定任意匹配,可以使每一对元素匹配单调,成本只能下降go。

如果您从最佳匹配开始并使每对匹配单调,那么您最终会得到最佳单调匹配。 (事实上,如果它是最优的,你开始的那个必须是单调的,但我们不必证明这一点)由于每个单调匹配具有相同的成本,并且其中至少有一个是最优的,所以它们都必须是最优的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM