64匹马8赛道问题
(2010-10-08 00:11:16)
标签:
杂谈 |
|
2009清华大学自主招生试题:64匹马赛跑,假设马发挥稳定且没有体力问题,如果一场比赛可以让8匹马同时赛跑,那么能否在50场比赛内排出所有名次。 1.把64匹马分成8组,先把每组排个序,共8场比赛。 2.把这8组8匹马两两合并为4组16匹马的有序组,每次合并需要3场比赛。 这里就是本题的关键所在:从其中任意选出两组,合并后的前4名肯定在两组的前4名这8匹马里,这8匹比一场就把两组的前4比出来了;对剩下的12马采取同样的策略,各取前4名,然后通过一场比赛决出整合后序列的5-8名,最后还剩8匹马,再为这8匹赛一次,这就是最后8名了。 3.把4组16匹马再两两合并为2组32匹马,每次合并需要7场比赛。 方法同上,实际上可以证明,两组有序的8k匹马合并成一组16k匹马,需要16k/4-1=4k-1场比赛。(之前每场比赛决出靠前的4名,最后一场比赛一次决出最后的8名) 4.把2组合并成1组,需要15场比赛。 这样的话,一共就是 8+4*3+2*7+1*15=49场比赛。 这就体现了信息学中“归并排序”的思想。归并排序具体工作原理如下(假设序列共有n个元素): 将序列每相邻两个数字进行归并操作(merge),形成floor(n / 2)个序列,排序后每个序列包含两个元素; 将上述序列再次归并,形成floor(n / 4)个序列,每个序列包含四个元素; 重复步骤2,直到所有元素排序完毕。 |
|
另一牛逼解答:
|