赛马问题

问题:

一共有 25 匹马,有一个赛场,赛场有 5 个赛道,就是说最多同时可以有 5 匹马一起比赛。

假设每匹马都跑的很稳定,不用任何其他工具,只通过马与马之间的比赛,试问最少得比多少场才能知道跑得最快的 5 匹马。


分析:

先来看下一般情况,每次用没有比过赛的 5 匹马比赛,比了 5 次,结果如下:

a1 a2 a3 a4 a5

b1 b2 b3 b4 b5

c1 c2 c3 c4 c5

d1 d2 d3 d4 d5

e1 e2 e3 e4 e5

其中每次为比赛的 5 匹马,左边的速度大于右边,如:a1 > a2 > a3 > a4 > a5,下面的 4 行同样。


再比第 6 场,比赛的为每行最快的,也就是行首的:a1, b1, c1, d1, e1,假设结果为 a1 > b1 > c1 > d1 > e1,a1 为跑得最快的第 1 名。

这个假设结果具有一般意义,因为,这会儿先哪个行首的当第 1 对结果分析是没有影响的,这里的符号可是任选的。


到了这里,就可以淘汰倒一小半的马,由于只取前 5 名,e2 肯定是进不了前 5 的,因为它前面至少有 5 匹马 e1, d1, c1, b1, a1。

e2 进不了前 5 的话,e2 右边的同样进不了,因为它们的速度还不如 e2。同理 d3 及 d3 右边的,c4 及 c4 右边的, b5 都进不了前 5。

所以,第 6 场之后,剩下的马为:

a1 a2 a3 a4 a5

b1 b2 b3 b4

c1 c2 c3

d1 d2

e1


到这里之后,我们可以拿 a2 和 b1, c1, d1, e1 比选出第 2 名,再从剩下的拿出可能最快的和除第 2 名之外比选出第 3 名。

这样每场比赛选出 1 个名次,也就是第 6 场之后,再比 4 场,选出剩下的 4 个名次,这钟方法一定可行。但却不是我们想要的。

因为场次太多了,题目要求用最少的场次选出结果。


让我们考虑一样,第 6 场比完之后,第 1 列和每一次都是有序的。我们没有用到这样的局部有序性,是否可以一场比赛决定出多于一个的名次呢?


是可以的。

看下上面的第 6 场的结果,我们知道,第 1 名 a1 已经决出,不用考虑。看下第 2 名,第 2 名只可能从 a2 和 b1 中产生,为什么?

因为 b1 > b2, b1 > c1, a2 > a3。每一行越向右速度越小,第一列越向下速度越小。所以第 2 名只能从 a2 和 b1 中产生。

那么第 3 名呢。同样,第 3 名会从 a2 a3 b1 b2 c1 中产生(第 2 句产生之后剩下的),原因和上面第 2 名一样。


所以第 7 场我们可以让 a2 a3 b1 b2 c1 比,以决出第 2 3 名。

由上在的分析,我们知道第 7 场比赛结果出现的头两名一定是最终结果的 2 3 名。


这里我们先总结几个小规则,第 7 场比赛的最后一名一定不是前 5 名,为什么?

因为它前面至少有 5 个名次了。举个例子,假设 c1 是最后一名,那么它前面至少有参加第 7 声比赛的另外 4 名和第 1 名。

所以,第 7 场最后一名被排除出总的前 5 名。

c1 如果是最后一名的话,c1 右边和 c1 行下面的也都被排除了。因为 c1 是后三行中最快的。

第 7 场最后一名只可能从 c1 b2 a3 中产生。原因如同上面分析第 2 3 名只能从 a2 b1 中产生一样。


看第 7 场比赛的可能结果:

a2 a3 b1 b2 c1 :

4 5 名可能从 a4 a5 b1 b2 中产生,只需要第 8 场比赛就可决出结果。


b1 b2 a2 a3 c1 :

4 5 名可能从 b3 b4 a2 a3 中产生,只需要第 8 场比赛就可决出结果。


通过上面的结果,我们可以进一步看出来,a2 a3 和 b1 b2 在某种程序上有对称关系,也就是它们在结果中总是都会出现,比如:

a2 b1 a3 b2 和 a2 b1 b2 a3

a2 b1 a3 b2 和 b1 a2 a3 b2

就是凡是 a2 出现的地方 b1 都可以出现,a3 出现的地方 b2 都可以出现。

这样我们对问题的求解分枝就进行了归并。

既然这样,我们进一步知道,a3 或者 b2 出现的地方,c1 也同样可以出现。


现在先考查下 c1 是总第 6 名的情况(总第:表示加上第 6 场的第 1 名的排名),这时候 a3 可以为总第 3 4 5 名。

当 a3 为总第 3 名,需要 a4 a5 与 b1 b2 组成第 8 场比赛即可决出总第 4 5 名。这里参赛的马并不一定要是 5 匹,因为这种情况下显示从 4 匹马中就可得出结果。

当 a3 为总第 4 名,需要 a4 与 b2 b3 的第 8 场比赛即可决出总第 4 5 名。

由于 b2 和 a3 对称,所以,上面的情况对 b2 同样适用。(a3 为总第 3 名的话,b2 就是总第 5 名。上面没有 a3 为总第 5 名的原因就是在此。)


如果 c1 不是总第 6 名呢?


若 c1 是总第 5 名

当 a3 是总第 3 名,则需要 a4 a5 b1 c1 的第 8 场即可决出总第 4 5 名

当 a3 是总第 4 名,则需要 a4 c1 的第 8 场即可决出总第 5 名

由于 b2 和 a3 对称,所以,上面的情况对 b2 同样适用。


若 c1 是总第 4 名

当 a3 是总第 5 名,需要 a3 c2 d1 的第 8 场即可决出总第 5 名

由于 b2 和 a3 对称,所以,上面的情况对 b2 同样适用。


若 c1 是总第 3 名

当 a3 是总第 5 名,需要 a2 a3 c2 c3 d1 d2 e1 的第 8 场即可决出总第 4 5 名。由于这里参赛的马数大于 5 匹,所以需要第 9 场。

由于 b2 和 a3 对称,所以,上面的情况对 b2 同样适用。


(符号比较多,虽仔细但不敢保证没有任何问题,了解推导过程后可自行推导。)

综上,最少 9 场可决出前 5 名,情况好时在第 8 场即可。

------------------------------------------------------------

那么有没有可能减少场次呢?

在思考这个问题一段时间之后,我对着 Excel 表格画了一个 5 * 5 表格,填充表格颜色,对着推理了一段时间,觉得应该有更好的情况。


因为是要取前 5,上面的那个解决方案其实是对结果精确求解了,也就是最终的结果很明确的知道前 5 名的具体名次。

通过对着那个表格思考发现,这个表格里其实在一定程序上存在着类似于拓扑的距离无关性。也就是说,只要你是在前 5 名中,不管你是第 3 名还是 4 5 名,

只要在前 5 名里就可以。


我们从第 6 场之后开始分析。

这是第 6 场的结果:

a1 a2 a3 a4 a5

b1 b2 b3 b4

c1 c2 c3

d1 d2

e1

对比分割线以上的那个求解结果,我们发现,a3 b2 c1 的第一名必然在总前 4 名中。为什么?

因为 a2 a3 b1 b2 c1 一共 5 个位置,分别可为总第 2 3 4 5 6 名,三个中的第一名最差也能是个第 4 名。

它们中的最后一名也是无缘总前 5 名了,原因上分割线之上的解决方案中已经说了。


试着分析一下:

a3 b2 c1 的可能排名如下:


a3 b2 c1

此时总前 5 名中可以确定出 a1 a2 a3

而剩下的 2 个可以从 b1 b2 a4 a5 中选出,为什么?

假设 a3 为总第 3 名,则 a4 a5 再加上后面的 b1 b2 中必然有总第 4 5 名在其中,这也是分割线上的某种情况。

假设 a3 为总第 4 名,那 a4 再加上 b2 即可决出 第 5 名。

所以,总前 5 剩下的 2 个可以从 b1 b2 a4 a5 中选出。


a3 c1 b2

此时总前 5 名中可以确定出 a1 a2 a3

而剩下的 2 个可以从 b1 c1 a4 a5 中选出


b2 a3 c1

此时总前 5 名中可以确定出 a1 b1 b2

而剩下的 2 个可以从 b3 b4 a2 a3 中选出


b2 c1 a3

此时总前 5 名中可以确定出 a1 b1 b2

而剩下的 2 个可以从 b3 b4 c1 c2 d1 a2 中选出


c1 a3 b2

此时总前 5 名中可以确定出 a1 b1 c1

而剩下的 2 个可以从 c2 c3 d1 d2 e1 a2 a3 中选出


c1 b2 a3

此时总前 5 名中可以确定出 a1 b1 c1

而剩下的 2 个可以从 c2 c3 d1 d2 e1 b2 b3 中选出


后面的三种情况参赛马匹过多,我们看到 c2 c3 顺序是确定的,d1 d2 顺序是确定的。如果能知道 c2 d2 的速度大小顺序就可以减少参赛马匹数。

刚好我们第 7 场参赛才选出了 3 匹,再加上这 2 匹,刚好不浪费。

如果 c2 > d1, 那么上面的 c2 c3 d1 d2 e1 就可以减化为 c2 c3 d1

如果 d1 > c2, 那么上面的 c2 c3 d1 d2 e1 就可以减化为 d1 d2 e1 c2

而上面的倒数一二种中,a3, b2 都是可以在第 7 场中和 d2 d1 确定大小关系的,所以第 8 场参赛的马数必然可保证在 5 匹之内。

上面的倒数第 3 种情况中,d2 d1 同时出现,确定它们的大小关系后取大的那就就可以了。


所以,最少 8 场可决出前 5 名。

------------------------------------------------------------

到此结束,小结一下。

对于这样的“分布式”推理计算,人脑确实有很大的局限性。不用纸和笔或计算机记录中间过程,推导一会儿很容易就迷失在细节里了。

拿个笔在纸上写写划划一会儿就有结果了。大脑还是对线性推理比较适合。果然,自我验证了之前看过的一本书里的说法。

转载于:https://my.oschina.net/xhan/blog/318959

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值