`

【Google】25匹马的角逐

阅读更多

问题是这样的:一共有25匹马,有一个赛场,赛场有5个赛道,就是说最多同时可以有5匹马一起比赛。假设每匹马都跑的很稳定,不用任何其他工具,只通过马与马之间的比赛,试问最少 得比多少场才能知道跑得最快的5匹马。

 

注意: "假设每匹马都跑的很稳定" 的意思是在上一场比赛中A马比B马快,则下一场比赛中A马依然比B马快。

 

稍微想一下,可以采用一种 竞标赛排序(Tournament Sort)的思路。 见《选择排序

 

(1) 首先将25匹马分成5组,并分别进行5场比赛之后得到的名次排列如下:

              A组:  [A1  A2  A3   A4  A5]

              B组:  [B1  B2  B3   B4  B5]

              C组:  [C1  C2  C3  C4  C5]

              D组:  [D1  D2  D3  D4  D5]

              E组:  [E1  E2  E3   E4  E5]

      其中,每个小组最快的马为[A1、B1、C1、D1、E1]。

(2) 将[A1、B1、C1、D1、E1]进行第6场,选出第1名的马,不妨设 A1>B1>C1>D1>E1. 此时第1名的马为A1。

(3) 将[A2、B1、C1、D1、E1]进行第7场,此时选择出来的必定是第2名的马,不妨假设为B1。因为这5匹马是除去A1之外每个小组当前最快的马。

(3) 进行第8场,选择[A2、B2、C1、D1、E1]角逐出第3名的马。

(4) 依次类推,第9,10场可以分别决出第4,5名的吗。

 

因此,依照这种竞标赛排序思想,需要10场比赛是一定可以取出前5名的。

 

 

仔细想一下,如果需要减少比赛场次,就一定需要在某一次比赛中同时决出2个名次,而且每一场比赛之后,有一些不可能进入前5名的马可以提前出局。 当然要做到这一点,就必须小心选择每一场比赛的马匹。我们在上面的方法基础上进一步思考这个问题,希望能够得到解决。

 

(1) 首先利用5场比赛角逐出每个小组的排名次序是绝对必要的。

(2) 第6场比赛选出第1名的马也是必不可少的。假如仍然是A1马(A1>B1>C1>D1>E1)。那么此时我们可以得到一个重要的结论:有一些马在前6场比赛之后就决定出局的命运了(下面绿色字体标志出局)。

       A组:  [A1  A2  A3   A4  A5]

       B组:  [B1  B2  B3   B4  B5 ]

       C组:  [C1  C2  C3  C4  C5 ]

       D组:  [D1  D2  D3  D4  D5 ]

       E组:  [E1  E2  E3   E4  E5 ]

(3) 第7场比赛是关键,能否同时决出第2,3名的马呢?我们首先做下分析:

     在上面的方法中,第7场比赛[A2、B1、C1、D1、E1]是为了决定第2名的马。但是在第6场比赛中我们已经得到(B1>C1>D1>E1),试问?有B1在的比赛,C1、D1、E1还有可能争夺第2名吗? 当然不可能,也就是说第2名只能在A2、B1中出现。实际上只需要2条跑道就可以决出第2名,剩下C1、D1、E1的3条跑道都只能用来凑热闹的吗?

     能够优化的关键出来了,我们是否能够通过剩下的3个跑道来决出第3名呢?当然可以,我们来进一步分析第3名的情况?

     ● 如果A2>B1(即第2名为A2),那么根据第6场比赛中的(B1>C1>D1>E1)。 可以断定第3名只能在A3和B1中产生。

     ● 如果B1>A2(即第2名为B1),那么可以断定的第3名只能在A2, B2,C1 中产生。

     好了,结论也出来了,只要我们把[A2、B1、A3、B2、C1]作为第7场比赛的马,那么这场比赛的第2,3名一定是整个25匹马中的第2,3名。

     我们在这里列举出第7场的2,3名次的所有可能情况:

     ①  第2名=A2,第3名=A3

     ②  第2名=A2,第3名=B1

     ③  第2名=B1,第3名=A2

     ④  第2名=B1,第3名=B2

     ⑤  第2名=B1,第3名=C1

 

(4)  第8场比赛很复杂,我们要根据第7场的所有可能的比赛情况进行分析。

      ①  第2名=A2,第3名=A3。那么此种情况下第4名只能在A4和B1中产生。

           ● 如果第4名=A4,那么第5名只能在A5、B1中产生。

           ● 如果第4名=B1,那么第5名只能在A4、B2、C1中产生。

           不管结果如何,此种情况下,第4、5名都可以在第8场比赛中决出。其中比赛马匹为[A4、A5、B1、B2、C1]

      ②  第2名=A2,第3名=B1。那么此种情况下第4名只能在A3、B2、C1中产生。

           ● 如果第4名=A3,那么第5名只能在A4、B2、C1中产生。

           ● 如果第4名=B2,那么第5名只能在A3、B3、C1中产生。

           ● 如果第4名=C1,那么第5名只能在A3、B2、C2、D1中产生。

           那么,第4、5名需要在马匹[A3、B2、B3、C1、A4、C2、D1]七匹马中产生,则必须比赛两场才行,也就是到第9场角逐出全部的前5名。

      ③  第2名=B1,第3名=A2。那么此种情况下第4名只能在A3、B2、C1中产生。

           情况和②一样,必须角逐第9场

      ④  第2名=B1,第3名=B2。 那么此种情况下第4名只能在A2、B3、C1中产生。

           ● 如果第4名=A2,那么第5名只能在A3、B3、C1中产生。

           ● 如果第4名=B3,那么第5名只能在A2、B4、C1中产生。

           ● 如果第4名=C1,那么第5名只能在A2、B3、C2、D1中产生。

            那么,第4、5名需要在马匹[A2、B3、B4、C1、A3、C2、D1]七匹马中产 生,则必须比赛两场才行,也就是到第9场角逐出全部的前5名。

        ⑤  第2名=B1,第3名=C1。那么此种情况下第4名只能在A2、B2、C2、D1中产生。

            ● 如果第4名=A2,那么第5名只能在A3、B2、C2、D1中产生。

            ● 如果第4名=B2,那么第5名只能在A2、B3、C2、D1中产生。

            ● 如果第4名=C2,那么第5名只能在A2、B2、C3、D1中产生。

            ● 如果第4名=D1,那么第5名只能在A2、B2、C2、D2、E2中产生。

             那么,第4、5名需要在马匹[A2、B2、C2、D1、A3、B3、C3、D2、E1]九匹马中 产 生,因此也必须比赛两场,也就是到第9长决出胜负。

 

 

总结:最好情况可以在第8场角逐出前5名,最差也可以在第9场搞定。

分享到:
评论
3 楼 renyuan_1991 2014-10-15  
大牛就是大牛!必须顶!
2 楼 夏广元 2014-03-11  
楼主的帖子很好,我面试就是栽到这道题上了。看了楼主的分析,看来当时面试我的人他的思路也是错误的
1 楼 flyfy1 2011-02-08  
这么全面的讨论居然没有人评论……

我很欣赏这个帖子包含的思维方式:

1. 从一个基本的解决方案入手——起码我们来先把这个问题解决了
2. 在解决了问题的基础上,进行优化:
a) 找出哪些部分是不可避免的(前1~5次)
b) 从包含信息较少的步骤中,提取较多的信息
3. 为了分析的准确,对选出前三的情况(divide and conquer)进行枚举(这是我最欣赏的地方了),一下子把整个问题清晰化了~方便了后面的进一步讨论

总体来看,这是个非常好の帖子:)

相关推荐

    最快的排序算法 算法:从25匹马中选出最快的三匹马,排序算法数据结构

    本文将讲解如何使用快速排序算法从25匹马中选出最快的三匹马,并对相关的数据结构和算法进行详细的解释。 快速排序算法概述 快速排序算法是一种基于比较的排序算法,它的时间复杂度为O(n log n),是目前已知的最快...

    100匹马驼100担货,大马一匹驼3担,中马一匹驼2担,小马两匹驼1担。试编写程序计算大、中、小马的数目。

    100匹马驼100担货,大马一匹驼3担,中马一匹驼2担,小马两匹驼1担。试编写程序计算大、中、小马的数目。

    最快的排序算法 腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹(详解)?,排序算法数据结构

    腾讯算法面试题:64匹马8个跑道需要多少轮才能选出最快的四匹(详解),排序算法数据结构 知识点1:排序算法的应用场景 在腾讯算法面试题中,要求选出64匹马中最快的四匹,需要使用排序算法来解决这个问题。排序...

    小学数学数学故事17匹马的故事

    《17匹马的故事》是一则流传甚广的数学趣题,它巧妙地结合了分数的概念,展示了如何通过数学方法解决实际问题。这个故事源于小学数学教育,旨在帮助孩子们理解和运用分数进行运算,同时激发他们对数学的兴趣。下面...

    田忌赛马问题 C语言

    田忌与齐王赛马,双方各有n匹马参赛(n),每场比赛赌注为1两黄金,现已知齐王与田忌的每匹马的速度,并且齐王肯定是按马的速度从快到慢出场,现要你写一个程序帮助田忌计算他最好的结果是赢多少两黄金(输用负数...

    Java多线程赛马游戏

    在赛马游戏中,每匹马可以看作是一个独立的线程,它们各自运行在不同的线程上,从而模拟真实的赛马比赛,马匹并行前进。Java提供了多种方式来创建和管理线程,如继承Thread类或者实现Runnable接口。在这个游戏中,...

    习作假如我有一匹马.ppt

    【习作《假如我有一匹马》教学解析】 在国韵作文试听课堂中,何晓华老师强调了作文在不同学习阶段的重要性和分数占比。从小学低年级的20分到高中阶段的60分,甚至在某些地区高达80分,作文几乎占据了语文考试的一半...

    初中语文文摘情感两匹马

    标题“初中语文文摘情感两匹马”所反映的,并非特定的IT知识点,而是一个寓言故事,讲述了两匹马之间的情感联系和互助精神。这个故事虽然与信息技术不直接相关,但它蕴含的道理和人生哲理可以应用于各种情境,包括...

    10别饿坏了那匹马.ppt

    《别饿坏了那匹马》这篇课文主要讲述了一个关于善良与理解的故事。在这个故事中,主人公是一个热爱阅读的小男孩,他常常因为没有钱而无法购买书籍,只能在书摊偷偷翻阅。书摊主人是一位残疾青年,他深知小男孩对知识...

    别饿坏了那匹马.pptx

    《别饿坏了那匹马》是一篇充满温情的课文,主要讲述了作者小时候酷爱读书,但由于家境贫困,无法支付看书的费用。书摊的残疾青年为了让他能够继续看书,编织了一个善意的谎言,声称家中有马需要马草,从而购买了作者...

    不要追一匹马材料作文.docx

    不要追一匹马材料作文.docx

    《别饿坏了那匹马》.pptx

    《别饿坏了那匹马》这篇课文主要讲述了一个关于善良与理解的故事。故事的核心人物是一位残疾的青年,他为了让一位贫困的小男孩能够继续免费阅读书籍,巧妙地编织了一个善意的谎言,声称自己有一匹马需要马草。实际上...

    初中语文文摘人生你汽车里有100匹马

    标题中的“初中语文文摘人生你汽车里有100匹马”似乎是对一个故事的概括,这个故事可能被用于教育或启发初中生关于生活智慧和自我认知的重要性。描述部分并未提供具体信息,但标签“资料”暗示这可能是一篇包含教育...

    10别饿坏了那匹马.pptx

    10别饿坏了那匹马.pptx

    行业教育软件-学习软件-别饿坏了那匹马PPT课件 免费版.zip

    《别饿坏了那匹马》是一款专为教育行业设计的学习软件,主要以PPT课件的形式提供教学资源,旨在帮助教师和学生更有效地进行教学活动。免费版的发布,使得更多的用户可以无成本地获取和使用这些教育资源,体现了教育...

    《别饿坏了那匹马》课件.ppt

    《别饿坏了那匹马》这篇课文主要讲述了一个关于善良与理解的故事。故事中的主人公是一位酷爱读书的小学生,他在书摊前流连忘返,却身无分文,只能偶尔偷偷阅读。书摊主人是一位残疾青年,他看穿了男孩的困境,为了让...

    北师大五年级语文上册作文假如我有一匹马PPT教案学习.pptx

    - 提供的提纲示例是关于一匹枣红色的马,包括马的颜色、名字、日常职责以及一个周末放羊的故事,最后以梦境结束,表达了对拥有一匹马的渴望。 2. **作文内容**: - 学生应该描述马的外貌特征,如颜色、体型、眼睛...

    《别饿坏了那匹马》课件音乐.ppt

    《别饿坏了那匹马》课件音乐.ppt

    《别饿坏了那匹马》PPT课件.pptx

    《别饿坏了那匹马》PPT课件.pptx

    10《别饿坏了那匹马》课件.ppt

    《别饿坏了那匹马》这篇课文主要讲述了一个关于善良与理解的故事。故事的核心人物是一位摆书摊的残疾青年,他为了让酷爱读书的小主人公“我”能够继续免费看书,巧妙地编织了一个善意的谎言——家中有一匹马,需要...

Global site tag (gtag.js) - Google Analytics