【详解腾讯面试题】64匹马8个跑道最少需要多少轮才能选出最快的4匹马?

题目:64匹马8个跑道最少需要多少轮才能选出最快的4匹马?

题目分析题目本身是含义不清楚的,但是既然是程序员面试题,隐含条件是:

1、不能计时;

2、在最坏的情况下至少多少轮比赛,必然能选择出最快的4批马?

该题目的分析如下:(直接上图,号码是序号)

要点:

1、不能进入每组前4的,必然可以淘汰。-32匹(8轮)

2、每组第1名比赛后,不在前4的组必然可以淘汰。-16匹(1轮)(该种方法很高效排除无效参赛马匹)

3、伪TOP16后情况开始麻烦:由于此时无法必然选出真top8的马匹,因此+1轮比赛无法必然搞定。

4、伪TOP8比赛后(+1轮),结果分为3类(不是3种,每类可能有多种排列):伪top4分布在4、2、3组之中。

5、第1类,可以直接确定伪top4就是真top4;第2-3类,由于均存在未参赛马匹进入真TOP4的可能性(此处需要仔细思考),因此还需要(+1)轮比赛。

由于第1类仅仅是可能性之一,属于幸运情况(需10轮),不属于最坏的情况,因此最坏的情况下,至少经过11(=8+1+1+1)比赛。

为何该方法是效率最高的答案?

  • 如果答案是15(=8+4+2+1,有至少2种比赛方法得到15),该种方法是一种途径,但是效率略差。64匹马,由于前面必然需要全部跑完,因此8×8的比赛,是最快过一遍的方法,也是必然(存疑)。
  • 要点2是很key的一步,其效率很高,充分利用了前8轮比赛的结果上一步留给我的信息而答案是15的,则完全抛弃之前的比赛结果信息,因而效率差一些。
  • 从第10步开始,还剩伪top16的情况下,一般最多需要3步来获得答案。但是我们需要尝试压缩。争取1步,保底2步。但是由于信息不足,我们不论如何都无法确定真TOP8,因此就无法1步。
  • 我们能获取伪top8(这是上一步留给我们的信息),所以后面的问题变成了:分类讨论,选出真top8(甚至更小top集合)。
  • 获得了真TOP8(甚至top6、4)之后,仅需要1步/0步,即可获得最快top4,获得答案。

伪top16后的第二种解法?(已9轮)

除了上面的分类讨论外,还有第2种解法:

假如1号就是一直到第1名,即第1名已确定。那么问题立刻可以变为:如何寻找top2-4?

未直接比试过的2-4、10-11、18(6匹)是潜在的2-4名。已经比赛过的9、17、25(3匹)也是潜在的2-4名。

这就尴尬了,9匹,没法一条赛道定胜负。

排除最不可能进top2-4的25号:剩余8匹马比赛,若能确定top2-4(17不是3rd),则加上top1,结束(9+1)。如果不能确定top2-4,则还需加入25号再比一次(9+1+1)。

此题给我们的启示是什么?

  • top类问题,本质就是寻找最快排除效率的方法。
  • 充分利用上一次排除遗留的信息,给下一步的启示。
发布了42 篇原创文章 · 获赞 23 · 访问量 8277

猜你喜欢

转载自blog.csdn.net/Andrew_Zeng/article/details/104187464
今日推荐