• 动动脑筋:64匹马最少跑几次可以找出前四名?


    前言

    前段时间字节面试的时候,被问到的说
    想到会问算法
    真是万万没想到遇到一个智力题~

    问题&分析

    64匹马,8个跑道,问最少比赛多少场,可以选出跑得最快的4匹马
    前提:每场比赛每个跑道只允许一匹马,且不存在并列情形
    前提:不借助其他工具

    • 不借助其他工具,也就说不能记录每匹马跑的时间。
    • 每场比赛每个跑道只允许一匹马,是为了限定条件
    • 不存在并列情形,减少问题分析情况

    常规但非最优的解法

    首先因为是比赛,很容易联想到一些计时类赛事,例如短跑,短道速滑这类速度性比赛。

    他们的共同点,就是分小组赛,1/4决赛,然后半决赛,决赛这种,每次晋级一半的人。
    按照这种常规赛制,比出前四名,就是一个等比数列的问题。

    64匹马选出最快的4匹马需要4轮。
    每个赛道只能跑8匹马,8+4+2+1 = 15场比赛

    在这里插入图片描述

    能有结果,但是不是最佳算法,无法满足最少比赛场次的条件。

    最少比赛次数解法

    第一轮:64进32,共1场( 小组赛)
    和常规组一样,每轮8个,进4个。
    在这里插入图片描述

    第二轮:32进10,共1场( 头名排序赛)
    这一轮是精妙之处。
    仅需一轮比赛,其他的都是推断会淘汰掉的。
    仅有的一轮比赛:上一轮8组,每组的第一名进行比赛

    排序后可以推断

    1. 头名排序赛后四名的小组,第一名都在确认不在前四名之中,所以全组淘汰。(入围0匹)
    2. 头名排序第4的小组,也之后头名有机会入围了,其他淘汰。(入围1匹)
    3. 头名排序第3的小组,头名+第二名入围,其他淘汰。(入围2匹)
    4. 头名排序第2的小组,头名+第二名+第三名入围,其他淘汰。(入围3匹)
    5. 头名排序第1的小组,全组入围。(入围4匹)

    截止到现在,目前入围 10 匹马。
    但是排序赛可以确认的是,排序第一的小组头名,必定是闪电中的闪电,马中的冠军。所以接下来不用比了。
    所以,冠军锁定后,还剩余 9 匹马。

    在这里插入图片描述

    第三轮:9进3,1场或者2场( 决赛 )

    这一轮的目的:决定前三名。
    但是还剩9匹马,只能先把其中一匹马放下,然后再进行比赛。这里关键是:应该选择哪匹马留下。

    目前最危险的排名是排序第4的小组头名(简称四马),因为它的名次上次比赛最靠后,已经知道有两匹马比它快。现在只要有一匹未出现在头名排赛中的马(简称黑马)比他快,他就会失败。
    所以就可以先把他留下,让其他的先比,看下把它淘汰的情况会不会出现。

    • 淘汰场景
      黑马出现在前两名。
      说明干掉了比四马快的三马,三马不知道是否被淘汰,但是四马肯定没戏了,此时取前三名就可
      在这里插入图片描述

    • 加赛场景
      黑马出现在第三名
      此时无法判断黑马和四马哪个最快,还需要再赛一场 黑马 VS 四马。
      在这里插入图片描述

    综上,这个赛制下,最少比10场,最多比11场,就能选出跑得最快的4匹马~

    最后

    实际的赛事中,情况更复杂一点,例如短道速滑。

    • 预赛
      4人一组,每组前两名晋级(标记为Q),时间最快的四名小组第三名选手晋级(标记为q),唯如果有选手因比赛期间遭干扰而被裁判判进下一轮(标记为ADV),分配给时间最快小组第三名选手的晋级名额会相应减少。
    • 半准决赛
      和预赛规则一致。
    • 半决赛
      每组前两名及时间最快的小组第三名选手晋级A组决赛(标记为QA),唯如果有选手因比赛期间遭干扰而被裁判判进A组决赛(ADVA),则不会依据总时间分配A组决赛名额。剩馀五位成绩最好的选手晋级B组决赛(QB)。准决赛中犯规的选手无法晋级决赛。
    • 决赛:
      A组按速度,比出金银铜,B组排出名次。只有A组出现判罚导致奖牌不足时,才会轮到B组。

    增加判罚,是因为实际赛制有更多规则,但是有人的地方就有江湖,例如韩国队选手啧啧啧。
    增加时间最快的第三名选手,就是说最大概率确保死亡小组场景下公平性。

    冬奥会的时候,看比赛倒是没咋注意规则,现在不由感慨数学真的无处不在啊。

    另外,我在思考,面试官出这个题是为了考察啥呢?

    拓展阅读

    双败淘汰赛,瑞士制比赛,三败与多败淘汰赛的设计。

  • 相关阅读:
    MybatisX插件 逆向工程
    给程序员准备的“蜜糍”--SOD框架简介
    深度学习标注工具(包括自动标注)总结——持续更新
    设计模式——(装饰者模式)(组合模式)
    Windows-docker集成SRS服务器的部署和使用
    【附源码】计算机毕业设计JAVA学校食堂订餐管理
    题目0113-选座位
    GFS分布式文件系统
    华为云云耀云服务器L实例评测|2核2G跑mysql性能测试
    谁说Python只能用来敲代码,用Python来制作游戏你了解吗?
  • 原文地址:https://blog.csdn.net/qq_32452623/article/details/126238521