赛马
这是我在微信公众号《奇舞周刊》上看到的一个算法题,题目是:64 匹马,8 个赛道,找出前 4 名最少比多少场?(马的速度恒定不变)
1.第一轮,64匹马分成8组,比赛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
给每组胜出的前四名编号,分别是1,2,3,4,即:
A组:A1 A2 A3 A4
B组:B1 B2 B3 B4
C组:C1 C2 C3 C4
D组:D1 D2 D3 D4
E组:E1 E2 E3 E4
F组:F1 F2 F3 F4
G组:G1 G2 G3 G4
H组:H1 H2 H3 H4
到现在为止,已经进行了8场比赛
第二轮:
把每组的第一名拉出来比赛,一共8名,进入前四名的那一组才有资格留下,给前四名的组编号分别为,他们之间的名次关系为
A组:A1 > A2 > A3 > A4
∨ ∨ ∨ ∨
B组:B1 B2 B3 B4
∨ ∨ ∨ ∨
C组:C1 C2 C3 C4
∨ ∨ ∨ ∨
D组:D1 D2 D3 D4
到目前为止一共比赛8+1=9次
根据此图分析,A1稳坐第一名,D1最高排第四名,所以D2,D3,D4根本排不上号,直接淘汰,同理,C3,C4也轮不上,淘汰,B4也没资格,淘汰
我们先把B1放在一边,让剩下的8个再比一次(现在是 8+1+1=10次),现在前四名还剩三个位置,需要把情况分为两种:
1.前三为A2 A3 A4,那么因为B1未参赛不知道B1和他们三个谁更快,所以还要再进行一次比赛确定前三,才能确定最终的前四名(8+1+1+1=11次)
2.前三不全是A2 A3 A4,也就是说前三名中有B2 B3 C1 C2 D1中的其中一个,只要有这几个中的任何一个就能确定B1在总前四,因为B1比它们都快,
那么,如果这次比赛(是 8+1+1=10次)的第三名为B2,那么比B2快的有B1,在A1A2A3中最快的又是A1,所以总前四名已经得出,即:A1 B1 A2 B2,其中B1 A2不能确定谁更快,但已经无所谓了。如果第三名为C1情况也一样(此时前四中不可能有B2,因为B1比B2快),前四为A1 B1 A2 C1。
所以最少要比赛10次才能决定前四名