面试题目:
有81个选手,9个赛道,要求选出前4名。需要多少场?
不考虑计算具体成绩,不然9场就够了。
分析:
最直观的解题步骤是:
1. 先将81个选手,分成9组进行比赛,每组都有9名选手。由于只需要选出前4名,则可从每组挑出前4名继续比较,需要比赛人数为36个
2. 将36个选手,分成4组进行比赛,每组仍旧是9名选手。继续从每组挑出前4名,则需要比赛人数为16个。
3. 将16个选手,分成2组进行比赛,每组是8名选手。继续从每组挑出前4名,则需要比赛人数为8个。
4. 将8个选手分成1组进行比赛,比完则决策出了最终的前4名。
>>>>>需要16场。但,这不是最优解。
回过头来,仔细分析上面的步骤,看看是否有优化的空间。
上述解法的步骤1-4,都是基于每组最新比赛结果取前四名后继续进行决策。
但,直接取每组前4名的做法是否能够再细化呢,能否排除掉一些必然不是在81中前4的选手。
再进一步分析,针对第一步比完后的9组选手,如果我能知道哪些组偏强,则前4名必然在偏强的前四组里面,这样理论上能够再过滤掉一些选手。
具体方法如下:
1. 先将81个选手,分成9组进行比赛,每组都有9名选手。比完后,每组中取第一名再比1场,此时9组中的第一名的排名也出来了,81个选手中排名前四的选手,必然在排名前四的组。
分析可发现:
最终的前1名,必然是排名第1组中的第1名。
最终的前4名可能是排名第1组中的前4名;
最终的2,3,4名,可能是排名第2组中的前3名;
最终的3,4名,可能是排名第3组中的前2名;
最终的第4名,可能是排名第4组中的前1名。
所以,此时取"排名第1中的第2,3,4名选手;排名第2中的第1,2,3名选手;排名第3中的第1,2名选手;排名第4中的第1名选手“再进行比赛,共9名选手,比1场后的前3名选手,则是前81名中排名在2,3,4的选手。
>>>>>只需要11场。