Play Open
Loading Please wait Loading Please wait Loading Please wait Loading Please wait Loading Please wait Loading Please wait

有趣的算法-赛马问题

问题描述

64匹马,8个跑道,问最少比赛多少场,可以选出跑得最快的4匹马。每场比赛每个跑道只允许一匹马,且不存在并列情形

问题分析

第一步:先让马儿跑起来,首先将马儿分批次赛跑,一共需要进行8次赛跑。假设结果如下:

分组

第一名

第二名

第三名

第四名

第五名

第六名

第七名

第八名

A

A1

A2

A3

A4

A5

A6

A7

A8

B

B1

B2

B3

B4

B5

B6

B7

B8

C

C1

C2

C3

C4

C5

C6

C7

C8

D

D1

D2

D3

D4

D5

D6

D7

D8

E

E1

E2

E3

E4

E5

E6

E7

E8

F

F1

F2

F3

F4

F5

F6

F7

F8

G

G1

G2

G3

G4

G5

G6

G7

G8

H

H1

H2

H3

H4

H5

H6

H7

H8

可直接排除各组最后四名赛马,剩余64-4*8=32匹赛马待定

第二步:将每一组中的第一名进行赛跑(如果每一组选多个参加赛马,那样就存在重复比赛),需要进行1次赛跑。假设结果如下:

分组

第一名

第二名

第三名

第四名

第五名

第六名

第七名

第八名

1

A1

B1

C1

D1

E1

F1

G1

H2

可直接排除各组最后四名赛马,也就是后四组全部淘汰,剩余 32 - 4 * 4 = 16,其中第一名已经知道就是A1

需要注意的是:这里还可以继续排除

因为在头名争夺中 D1只能排第四,所以D1最快也是第四,D组剩余被淘汰

同理C组最多只有2名在前4

同理B组最多只有1名在前4

分组

第一名

第二名

第三名

第四名

A

A1

A2

A3

A4

B

B1

B2

B3

B4

C

C1

C2

C3

C4

D

D1

D2

D3

D4

所以剩余需要确认的数量为 16 - 1 - 3 - 2 - 1 = 9。

第三步:剩余的9匹赛马中需要选出8匹马再次进行一次赛马

这里是否有一匹特殊的马,不需要参与赛跑进行这一次赛马就能得出结果?

排除A组中的3匹马中的一匹,那么除非B1都输或者都赢,否则B1以及后面的排名不确定。也就是排除前面的对后面影响较大

排除D1/C2,那么可能无法确认D1与C2谁是第四

排除C1与排除其他一样,可能无法确认自己和它身后的排名

所以,这里最好从D1与C2中排除一个进行赛跑,如果这一轮得出结果,那么就不用跑。如果没有得出结论就再跑一次

因为所有赛马的第一名已经确认是第一,所以剩下的比赛就是确认 2 - 4 名次,C1要是所有赛马的前四名,这次必须跑入前三。

第一种可能:C1第三名或者第三名之后,那么比赛结束,一共经过了 8 + 1 + 1 = 10 赛出前四名

第二种可能:C1排在第二名,也就是说 C2 和 D1 无法确认谁是第四个,那么就需要加赛一场。排除前三,剩余的马再比一场。一共经过了 8 + 1 + 1 + 1 = 11

参考文档

https://zhuanlan.zhihu.com/p/103572219

Posted in 支付优惠活动
Previous
All posts
Next