`

难解决的算法题集

阅读更多

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场搞定。

 

 

 

 

 

-------------------------------------------------------------------------------------------

1. 请设计一个字典。以字符串为索引,存储用户定义的定长结构。要求有增、删、查、改的功能。已经给定一个函数,可以由字符串映射到一个签名,每个签名由两个unsigned int类型组成。假设每一个字符串能够对应唯一的一个签名,完全没有重复(或者重复的概率可以忽略),并且签名分布足够均匀。


请描述你的数据结构?内存如何申请?增、删、查、改的功能如何实现?如果操作很频繁,该如何优化?
需要把整个数组都进行排序的。

 

-------------------------------------------------------------------------------------------

2. 一个单词字典库,单词个数约为10万,每个单词长度不超过16,单词都是由小写字母组成,同时给出16个小写字母,
请设计一种高效算法来找到用这些给出字母拼出一个字典中最大长度的单词。给出的16个字母每个字母最多使用一次,也可以不使用。
存在多解的时候给出任意一个最优答案就行。

例如:给出adeenrstuvxyzuki可以拼出adventures
请详细描述你的算法思路(如需要,可给出代码\伪代码来辅助描述),并分析其时间复杂度。最后请分析下你的算法以及数据结构的优缺点,存在哪些可改进的地方。

 

分享到:
评论

相关推荐

    经典算法题集

    《经典算法题集》是一个汇集了众多算法问题的资源包,包括了贪心算法、分治策略和动态规划等核心算法领域。这个题集对于学习和提升编程技能,特别是准备ACM竞赛或进行个人技术积累的程序员来说,是极其宝贵的资料。 ...

    ACM算法题集 基础算法教案

    这份"ACM算法题集 基础算法教案"涵盖了算法设计与实现的基础知识,旨在帮助学习者深入理解并熟练运用各类算法。下面将详细阐述其中可能包含的重要知识点。 一、排序算法 排序是计算机科学中最基础且重要的问题之一...

    ACM的各类算法题集

    通过深入研究和实践这个ACM算法题集,不仅可以提高编程技巧,还能培养出解决问题的系统思维和逻辑推理能力。对于准备参加ACM竞赛的学生或者希望提升自己算法能力的程序员来说,这是一份宝贵的资料。无论是为了竞赛,...

    211高校考研复试算法题集.zip

    "211高校考研复试算法题集.zip" 这个标题表明了这是一个针对211工程大学研究生复试阶段的算法题目集合,它以压缩文件(.zip格式)的形式存在,可能包含了多道算法题目以及相关的解答或解析。 【描述解析】 描述与...

    算法设计题集,算法是解决问题方法的精确描述

    最后,解决《算法设计题集》中的题目不仅仅是理论上的练习,它还可以提升你的编程技能,使你能够更熟练地在实际项目中应用算法。通过不断解决这些题目,你可以锻炼自己的逻辑思维、抽象能力和问题分解能力,这些都是...

    数据结构算法设计题集

    在"数据结构算法设计题集"中,读者将有机会通过实例深入理解这些概念,并通过练习题提高解决问题的能力。这份资料不仅适合初学者入门,也对有一定基础的学习者巩固和提升算法设计能力大有裨益。通过不断实践和思考,...

    acm初学者算法题集

    在计算机科学中,算法是解决问题的关键,它是解决问题步骤的精确描述,旨在高效、有效地达成目标。对于ACM(国际大学生程序设计竞赛)初学者来说,熟悉并掌握基本的算法至关重要。首先,我们需要理解算法的概念,它...

    前端面试题之算法题集.zip

    这“前端面试题之算法题集.zip”文件显然包含了一系列与前端面试相关的算法题目,旨在帮助求职者准备面试,同时也为开发者提升自己的算法能力提供了宝贵的资源。以下是根据标题、描述和标签提炼出的一些关键知识点:...

    腾讯笔试算法题集.zip

    【腾讯笔试算法题集.zip】是一个包含腾讯面试和笔试阶段可能会遇到的算法题目及解答的压缩文件。这个资源对于准备腾讯求职的应聘者来说是非常有价值的,因为它提供了实战演练的机会,帮助提升解决实际问题的能力。...

    算法题集 回溯 递归 分治

    回溯法是一种通过尝试解决某个问题的方法,并在遇到无法解决问题的解时退回之前的步骤重新选择的算法策略。它广泛应用于解决约束满足问题(如图着色问题)、组合优化问题(如旅行商问题)等。 ##### 1.1 马拦过河卒...

    练习用的算法题集,包含JavaScript语言和手写习题

    总之,这个“练习用的算法题集,包含JavaScript语言和手写习题”的资源是学习和提升算法技能的宝贵资料。无论你是初学者还是经验丰富的开发者,都可以从中受益,不断提升自己的编程能力和问题解决能力。

    C++数据结构算法题集

    内容概要:本文档提供了一系列经典的C++算法习题,覆盖范围包括但不限于最短路(Dijkstra算法)、动态...其他说明:由于每道题目都涉及具体的算法思想和技术细节,建议使用者先尝试独立完成后再参考提供的解决方案。

    算法设计题集 经典的算法设计书籍

    算法作为计算机科学的灵魂,不仅是编程的基础,更是提升程序效率和解决问题能力的关键。在众多计算机类教材中,《算法设计题集》以其对算法和数据结构的深入解析,成为了ACMer和编程爱好者的宝贵学习资源。本书将...

    算法设计题集_算法题目_

    《算法设计题集》是一本面向初学者至高级程序员的资源,旨在帮助读者全面掌握算法设计与分析。这本书包含了各种难度级别的算法题目,涵盖了从基础的排序和搜索问题到复杂的数据结构和图论算法。通过这些题目,读者...

    LINUX算法设计题集

    "LINUX算法设计题集"正是一本专为Linux环境下的算法学习者量身打造的资源,它提供了丰富的练习和解释,帮助初学者逐步提升算法设计能力。 首先,我们来谈谈算法的重要性。在计算机科学中,算法是解决问题的步骤或一...

    算法设计题集.zip

    在解决算法设计题时,不要忘记实践是检验真理的唯一标准。通过编写代码并进行调试,可以加深对算法的理解,也可以发现潜在的问题和优化点。同时,不断学习和借鉴他人的优秀算法,可以帮助你开阔视野,提高解决问题的...

    算法设计题集.RAR

    本题集旨在帮助初学者掌握基础算法,并通过实践提升问题解决能力。 1. **排序算法**:题集中可能会包括常见的排序算法,如冒泡排序、插入排序、选择排序、快速排序、归并排序、堆排序等。每种算法都有其适用场景和...

    严题集算法设计答案汇总

    《严题集算法设计答案汇总》是一份涵盖了经典算法设计问题及其...通过深入研究《严题集算法设计答案汇总》,学习者不仅能提升编程技能,还能培养解决问题的逻辑思维和创新能力,为未来在IT领域的职业生涯打下坚实基础。

    算法设计题集(大连理工大学)

    《算法设计题集》是大连理工大学推出的一本旨在帮助学习者深入理解算法设计与分析的珍贵资料。这本书包含了丰富的算法题目,每个题目都配有详尽的解题思路,旨在提升读者在实际问题中设计和应用算法的能力。 算法是...

Global site tag (gtag.js) - Google Analytics