日报标题:怎么把一群人分成实力相当的两组?我掏出了计算器
在生活中,我们经常会遇到这样的场景:把一群人分成两组,使得两组人的实力尽可能相近。这个问题看起来简单,但实际操作的时候,却常常令人头疼。
举个例子:一共有 16 个人,并且已知他们的实力排序(分别为第 1、2……16 名),把这 16 个人分成两组,每组 8 人,如何分组使得这两个小组的实力尽可能接近呢?
一个最简单的思路是,要把最强的两个人分开(第 1 名在 A 组,第 2 名在 B 组),剩下的人随机分组(我们打篮球时就经常这么干)。
但这么分组偶然性太大了,如果第 3 名、第 4 名分在了同一组,那么这组的实力就太强了。
于是我们细化分组方案:把第 3 名和第 4 名也分开,考虑到当前第 1 名所在的 A 组实力比较强,所以就把较弱第 4 名分在 A 组,较强的第 3 名分在 B 组。
分好前 4 名的小组后,我们再来分第 5~8 名。第 8 名最弱,所以把他和第 1 名所在的 A 组分在一起,然后把第 7 名分在 B 组,而这个时候 A 组好像又比 B 组弱一点了,于是把第 5 名分到 A 组,第 6 名分到 B 组……
……
细心的你大概会发现,这样的分组方式和「单败淘汰赛」的分组方式有点接近:
简单地说,「单败淘汰赛」的分组效果是:如果每一轮都是名次高的人胜出,那么每一轮的对阵的人的名次总和都是相等的。
这种分组方式被用在了很多场景中,比如网球公开赛、NBA 季后赛等等。
通过这种分组方式,我们将所有人按照实力分成两组:
- A 组:1、4、5、8、9、12、13、16;
- B 组:2、3、6、7、10、11、14、15。
这种分组方式很合理吧?
未必。
上面的分组方式,的确很适合淘汰赛,但是如果是分组对抗的话,还是有点问题的。
我们得知道这样一个事实:不同名次之间的实力差距,往往并不正比于他们的名次差。在大多数情况下,名次越高,名次之间的实力差距就越大。
比如说,对于前 8 名选手,我们觉得他们的实力和名次之间是线性关系,他们的实力可以量化为 8 分、7 分、6 分…… 2 分、1 分。但实际上,他们的实力和名次之间更接近于二次函数的关系,第 1 名到第 8 名的实力评分可能分别为:64 分、49 分、36 分…… 4 分、1 分。
如果这种关系成立,那么对于前 8 名来说,两个组的评分分别为:
- A 组:
- B 组:
这么看,似乎是 A 组更强一些了。
怎么消除这个差距呢?
我灵机一动:对于第 5 ~ 8 名这四个人,两组的人交换一下(「交叉分组」)试试?这样,A 组有第 1、4、6、7 名,B 组有第 2、3、5、8 名,他们的名次和依然相同,而他们评分的平方和:
- A 组:
- B 组:
也恰好相等!(P.S. 他们名次的平方和也同样相等)
似乎我们有了一些方向。对于第 9 ~ 16 名,我们可以进行类似的「交叉分组」:
- 把前 8 名在 A 组的 4 个人名次 +8 后,把对应的 4 个名次的人放到 B 组去;把前 8 名在 B 组的 4 个人名次 +8 后,把对应的 4 个名次放到 A 组去;
(如:因为 第 1 名在 A 组,所以 第 9 名就分到 B 组)
于是我们得到了最终的分组情况:
- A 组:1、4、6、7、10、11、13、16;
- B 组:2、3、5、8、9、12、14、15。
于是我们得到:
与此同时,我们还意外地发现:
连立方和都相等!
这是一个巧合吗?并不是!
实际上,我们有更强的结论。用数学的语言说:
对于数字 1 到 (),如果我们按照以下方式分组:
- 1 在 A 组,2 在 B 组;
- 假设 1 到 ()已经分组完毕,其中 A 组从小到大依次是 ,B 组从小到大依次是 ,那么,将 到 按照如下方式分组:, ()。
那么,对于最终的分组:,,它们的 p 次幂和()都相等。
证明:
用归纳法。当 n=2 时,1 + 4 = 2 + 3,结论成立,
假设 n = k 时,
,
,两组数的 1,2,...k-1 次幂和都相等。
那么当 n = k + 1 时,
计算他们各自的 1,2,...k 次幂和,定义
(i=1,2,...k-1)
容易验证,对于 1,2,...k-1 次幂和,两组数展开后都是关于
的多项式,且系数相等,所以总和相等,而对于 k 次幂和,两组数展开后关于 k 次幂的项完全相同,而不大于 k-1 次幂的项也可以表示成关于
的系数相等的多项式,所以总和也相等。所以 n= k+1 时,两组数的 1,2,...k-1 次幂和都相等。
证毕。
【注 1】上面的结论有一个简单的推论:
- 如果对于任意一个数 t ,对应函数 f(t) 只要是不高于 n-1 阶的多项式,那么 A 组和 B 组各自的 f(t) 的和也是相等的,这意味着 A 组 和 B 组的数的 1,2,...,n-1 阶矩 (平均值、方差、偏度、峰度……)也是相等的。
这说明,如果我们按照这种方式分组,两组的性质真的非常非常接近。我们终于找了了一种方法,将一群人分成两组,使他们各自的总体实力「旗鼓相当」。
【注 2】如何迅速判断一个数 t 应该在 A 组 还是 B 组呢?
一个有趣的判断方式: 观察 t-1 的二进制表示中 1 的个数,如为偶数个,则在 A 组,如为奇数个,则在 B 组。如:要判断 12 在哪个组,判断
,有奇数个 1,所以 12 在 B 组中。
证明从略。
【注 3】以上种种,其实也是「等幂和问题」的一个应用场景。
可以参见回答:非常神奇的数学结论有哪些? - 曾加的回答
【注 4】以上所提供的,是只知道排名,不知道各个名次对应权重时的一种选取方法,如果你知道更多的信息,如:每个人的确切权重,那本问题就转化为「背包问题」了,并不在本问题的讨论内,可移步:求一个算法,把一组数据切成两组数据,使两组数据和之差的绝对值最小? - 数据结构
(本文可以转发,如需转载,请私信作者。)