【问题标题】:Finding lowest average grade difference找到最低的平均成绩差异
【发布时间】:2013-12-13 20:29:19
【问题描述】:

给定一个有 n 个男孩和 n 个女孩的班级,其中女孩的成绩是 p1,...,pn,而男孩的成绩是 s1,...,sn,请找到一对女孩- 男孩以最小化夫妻成绩之间的平均差异的方式。 例如,如果 p1=30, p2=60, s1=50, s2=90,我们应该将女孩 #1 与男孩 #1(相差 20 分)配对,将女孩 #2 与男孩 #2 配对(相差 30 分),并且我们将得到 (30+20)/2 = 25 的最小平均差。

证明以下算法是最优的: 将成绩最低的女孩与成绩最低的男孩配对。然后将成绩第二低的女孩与成绩第二低的男孩配对,以此类推。


在我的解决方案中,我尝试使用贪心选择属性(表明存在一个最优解,其中某个元素在解中,然后使用归纳法证明所有元素都在最优解中):

令 A1

声明 - 存在一个最优解,其中包括 A1-B1 对(成绩最低的男孩与成绩最低的女孩配对)。

证明 - 通过矛盾假设该陈述是错误的。因此,没有最优解包含 A1-B1 作为一对。假设 A1-Bi (i>1) 和 B1-Aj (j>1) 是解中的对。我们知道 A1

提前致谢。

【问题讨论】:

  • "因此 S1 和 P1 之间的差异小于 Sj 和 P1 之间的差异..."。这是有缺陷的。如果S=[1,10], P=[10,20],那么|S2-P1| < |S1-P1|
  • 如果这有帮助,您将在 L1 范数下最小化两个向量的差异:en.wikipedia.org/wiki/… 如果您在 math.stackexchange.com 上提出这个问题,您一定会得到一个快速的答案。跨度>
  • 我同意马特的建议。我认为你会在 math.stackexchange 上得到更快的答案,而且这类问题的质量可能会更高。

标签: algorithm greedy


【解决方案1】:

好的,我根据一些几何观察发现了一些东西。
假设您现在只有 4 个数字:a1
|a1-b1| + |a2-b2|

在这种情况下,我们要检查 (1) 是否为真。

我根据明显的等价关系重写(1):

( |a1-b1| + |a2-b2| ) ^ 2

-2 * a1 * b1 -2 * a2 * b2

我应该解释一下我是如何从 (2) 到 (3) 的吗?我猜不是。

然后我们得到:

a1*b1 + a2*b2 >= a1*b2 + a2*b1 (4)

a1(b1-b2) >= a2*(b1-b2) (5)

a1(b1-b2) - a2*(b1-b2) >=0 (6)

a1(b1-b2) + a2*(b2-b1) >=0 (7)

但是 (5) 显然是正确的,因为 b1-b2

这是 N=2 的严格证明。

我的直觉告诉我这应该以某种方式概括
对于 N 的情况很容易。也许我们可以尝试一个
从这里归纳(看过这些(1)、(2)、(3)等)。


在几何上,您可以将 Ai 和 Bj 想象为点
在两个平行的数字 linex(轴 A,轴 B)上。一个
配对配置是通过连接配对定义的
来自 A 和 B 的点与段。你的陈述基本上是
说最佳配对是没有两个
段 (Ai,Bj) 相互交叉(它们可能与
彼此/在最佳解决方案中/但可能不会相互交叉)。
对吧?

现在,如果我们做同样的事情(我对 N=2 做了同样的事情),
对于任何 N,你都会得到这个问题:“是
a1(b1-bi1) + a2(b2-bi2) + a3(b3-bi3) + ... + aN*(bN-biN) >= 0 (4')
true",其中 i1,i2,...,iN 是 (1,2,...,N) 的任意排列,
并假设每个 i 的 a[i]

现在,我们在这里对 N 进行归纳以证明 (4')。
假设 (4') 对于 N 和所有 K 都为真,使得 K 再向 A 和 B 添加两个数字。比如说 aN+1 和 bN+1。
假设它们被插入位置 s1(在 A 中)和 s2(在 B 中)
在它们各自的排序序列(A,B)中。假设 s1 (相反的情况是类比的)。所以现在 as1 = aN+1 和 bs2 = bN+1,
但 s1 和 s2 是它们在新排序序列中的实际索引。

但是现在证明 N+1 的 (4') 变成了
证明 N=2 因为只有这些项(来自 (4'))
当我们执行从 N 到 N+1 的步骤时很重要。

as1 * (bs1 - bs2) + as2 * (bs2 - bs1) >= 0 (7')
正如我们所看到的,这对于 N=2 是正确的(参见上面的(7))。

对于其他 N-1 项(从 (4') 中保留),我们得到
不等式 (4') 是正确的,因为归纳的假设(它是
N-1 为真)。因此,从 2 和 N-1 的真值中,我们得到了 N+1 的真值。
希望你明白我是怎么做到的。在纸上它更容易
想写,这里很难写。

所以这应该是你对 N 情况的严格证明。

【讨论】:

    【解决方案2】:

    好的。假设我们有:

    P1

    让我们假设这个陈述是不正确的, 还有另一个最佳解决方案。 这意味着我们假设 P1 与 Sk 配对,其中 k>1 在该解决方案中。

    现在让我们看看与S1配对的那个Pj(如果你画了
    它作为一个图形,这两条线 P1-Sk 和 Pj-S1 将相互交叉)。

    所以我对前两条相互交叉的线感兴趣。

    现在想想如果我们采用相同的配置但我们改变了会发生什么 通过将 P1 与 S1 和 Pj 与 Sk 配对。总和会减少 (或者如果 P1 = Pj 或 S1 = Sk,它可以保持不变。

    示例:
    1 3 5 7 100 150
    2 4 6 8 120 120

    但如果它保持不变,我们可以在两个序列中继续前进。

    结果证明我们的最优解并不是最优的。 这是矛盾的,所以我们的假设是不正确的。

    注 1:实际上在我的证明中我应该说不是 P1, 但是 Pm 具有最小的 m,使得 Pm 不与 Sm 配对 但是有一些sk,k>m。 为了简单起见,我在这里说 P1。

    注 2:为了证明这部分:
    “现在想想如果采用相同的配置但会发生什么 相反,我们将 P1 与 S1 配对,将 Pj 与 Sk 配对。总和会减少。” 想想如果你只有 4 个数字会发生什么
    P1 S1
    那么你应该将它们配对:P1-S1 和 P2-S2 或交叉像
    P1-S2 和 S1-P2。这里需要解决几个不同的情况。

    1 1(一对 1 - 相等的数字)
    2 2(对 2 - 也相等)

    1 3(不同的数字)
    2 2(相等的数字)

    1 5(不同的数字)
    2 10(不同的数字)

    注3:好的,我认为一些边界情况和细节应该
    可以解决 :) 但基本上这个想法应该可行。

    【讨论】:

    • 谢谢彼得。你的回答是一个很好的解释,但它不是一个证据。我在证明的开头编辑了我的帖子。也许你知道如何从那里继续?
    • 我也想过使用数学归纳法,但没有找到从 N 到 N+1 的方法。你会怎么做?那么,假设 N 为真,你如何一步一步证明它对 N+1 为真?我今天会想更多,我喜欢这个问题:)
    • @amitooshacham 我以不同的方式证明了这一点。请参阅我的第二个答案。
    【解决方案3】:
    Observe that: 
    - no matter how you arrange the pairs, the sums of each set will be constant, and so will be the difference between the two sums. 
    - the 'sum of differences' can only be equal or greater than the 'difference of sums'
    

    那么是什么使“差之和”大于“和之差”?

    This is how I would structure the proof:
    1) what you want to prove is that sorting minimizes the cases that make the 'sum of differences' greater.
    2) what can make the 'sum of differences' greater than the 'difference of sums' are the pairs where the size relation is opposite to the size relation of the sums. For example, if in your sample the sum of all the P grades is greater than the sum of all the S grades (sumP > sumS), any pair where p < s.
    3) Now, all you have to prove is that any non-sorted arrangement can only make things worse.
    
    (Forgive the absence of proper math language and depth, I have an excuse for the first though, I'm new to SO and still trying to master the editor)
    

    【讨论】:

      【解决方案4】:

      您正在尝试找到最小的平均差异。那么平均差异是多少: 1/n * ((p1-s1)+(p2-s2)+...+(pn-sn)) 它是 1/n * ((p1+p2+..+pn) - (s1+s2+..+sn)) 这似乎不依赖于排序。好吧,您可以对其进行排序和配对,它将具有最小的平均距离以及任何其他排序。

      【讨论】:

      • 不,他试图最小化配对距离绝对值的总和 |Ai-Bj|而不是配对距离值 Ai-Bj 的总和。这就是我得到它的方式。
      • @peter.petrov:你能指出有问题的地方吗?
      • 你是对的。它没有明确提及。我相信你已经注意到了一些事情。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-06
      • 2019-08-25
      • 1970-01-01
      相关资源
      最近更新 更多