关于赛马的问题,25匹赛出前3名或者前5名

时间:2021-04-20 21:41:47

一共有25匹马,有一个赛场,赛场有5个赛道,就是说最多同时可以有5匹马一起比赛。假设每匹马都跑的很稳定,不用任何其他工具,只通过马与马之间的比赛,试问最少得比多少场才能知道跑得最快的5匹马?

分组一:


1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20
25


分组二:

1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24
25
我们考虑这两种极端的分组,因为所有的排序问题最怕的就是原先就是有序的,那么就会多花很多白费的功夫,刚好这道题需要我们找有序的,而且是最少的次数,那无疑就是本身是有序的最好找。

第一步:找出NO.1

1.首先,让每个分组的马跑一次,找出每个组最快的;

2.然后将每个组最快的一起跑一次,决胜出NO.1;

在这里我们必须承认,6次决胜出NO.1是唯一解法,所有的8*8匹马8跑道或者是6*6匹马6跑道,都是N+1次决胜出NO.1。


最少解法的情况:

误区:

1.我们本来会认为第二种会是最优,因为刚好第六次赛跑的5匹马就是前五名;

2.但是,我们怎样才能知道这5匹就是前五名呢,毫无疑问我们先要排除出现分组一的情况:就是每个组的第二名有可能比其他组的第一名还要快。

3.那么我们就要让所有组的第二名跑一次,决胜出最快的,然后再拿最快的跟第六次赛跑中的最后一名比,如果刚好最后一名比最快的还快,那么第六次的五匹马就是前5名。

这样的次数是7次

其实这种做法是最保险的,每次都要考虑每个组其他名次中最快的一名,正统的解法也是需要每次去这样解,每次都要去考虑剩余其他名次中最快的一名。


最快解:

1.其实这种东西就像是二维数组,行就是列。

2.我们可以考虑第六次的是前5名,为什么不考虑像分组一的情况,NO.1那一名的分组刚好是前5名?

3.由于我们之前的5次已经知道NO.1那一组的排名,那么我们只要把那一组最后一名用来跟第六次的第二名进行对比,发现它比第二名还快,那就是NO.1那个组都是前5名。

这样的次数是6次


1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25