很资深:凝聚4位作者10年编程经验,带你领悟算法的精髓
很有趣:全书采用生动风趣的语言,让算法不再难学
很实战:全书包括36个实例,9大类算法,很有实战价值
很图解:对每种算法,都给出了图解说明,保证一学就会
王硕,资深软件工程师、北京理工大学客座讲师,从事计算机教育多年,擅长Python、Java、C语言、数据结构和算法等,接触数千学生,对算法有独到见解。平行致力于企业级软件开发和计算机教育工作,具有索尼中国研究院、四大国有银行软件开发中心工作经历。
董文馨,已获得美国斯坦福大学计算机专业Offer的IB高中生,学校编程俱乐部创办人。从10岁开始在国外上学,精通英语,西班牙语,对数学,物理,和电脑科学有天赋。曾创办个人文化交流网站,未来打算从事人工智能领域的工作。
张舒行,五年多机器人比赛经验,长时间负责队内编程, 曾参加FLL, VEX, 现为FRC队伍5823队员。擅长数学,曾在各大竞赛中获奖。
张洁,中科院软件所博士,计算机科班出身,多年国有大型银行信息系统开发及管理经验。发表SCI、EI检索论文十余篇,在计算机图形学、信息系统架构方面有较深造诣。
言
为什么要写这本书
算法是编程的核心,就像一台计算机的CPU,算法的好坏决定了一个系统的效率高低。
许多人认为学习编程就是学习*的编程语言、技术和框架,其实计算机算法更重要。计算机语言和技术日新月异,但万变不离其宗的是算法。修炼好算法这门“内功”,再辅以新技术这些“招式”,才能独霸“武林”。这也是为什么像Google和Facebook这类大公司在面试中主要会考查算法问题的原因。
目前图书市场上关于算法的图书不少,经典的如《算法导论》。但是大多数算法图书太学术、太复杂,对于初学者来说门槛太高。学习算法本身就不是一件容易的事情,再加上复杂的场景和数学理论,会让算法的学习曲线更陡。因此本书的作者们就萌生了写一本让大家都能看懂的算法书的想法,以生动的语言把算法的思想过程写出来,让学习算法不再那么枯燥。
在本书的创作过程中,王硕老师迎来了人生的*个宝宝小朗朗。于是几位作者就有了一个心愿,希望青少年朋友也学会算法,因此,在描述算法问题时,尽量用简单、通俗的形式表述,使青少年朋友也能看懂,也希望如此这般能够增加读者的学习兴趣。既然是学习算法,免不了要写代码,对于编程语言的选择,我们选择了Python这门简单易懂的语言作为本书的编程语言。对于初学编程的人来说,Python可以缩短学习编程语言的时间和降低学习编程的难度。
学习算法不易,且行且珍惜。
本书有何特色
1. 以孩子的口吻,生动形象地讲解算法,提高趣味性
为了便于读者理解本书内容,提高学习效率,大部分问题都以孩子的口吻来讲解,以解决小朗朗的实际问题作为出发点引出问题,增加了趣味性和可读性。
2. 涵盖核心算法知识点
本书涵盖双指针问题、哈希、深度优先遍历、广度优先遍历、回溯、贪心、动态规划、*短路径问题、分治等9大算法,帮助读者全面掌握核心算法的知识点。
3. 以Python语言作为载体,降低学习难度
抛弃其他复杂的编程语言,本书采用简单的编程语言Python作为算法的载体,并在第1章介绍了Python语言的语法。
4. 选择经典算法的经典问题,有较高的通用性
本书在简单介绍Python编程语言以后,选择了9大经典算法,重点讲解算法原理,并选择经典问题进行有针对性的练习。
5. 提供完善的技术支持和售后服务
本书提供了专门的邮箱供读者咨询:317977682@qq.com。读者在阅读本书的过程中有任何疑问都可以通过该邮箱获得帮助。
本书内容及知识体系
第1章 编程基础
掌握一门编程语言是学习算法的基础。学习编程语言是为了与计算机“交流”,只有正确的格式才能被计算机成功识别。学习编程语言的起点就是了解这门语言的语法。本书使用Python语言进行算法讲解,本章主要讲解Python 3的编程语法。
第2章 双指针问题
“指针”是编程语言中的一个对象,它存储着一个内存空间的地址,计算机可以通过这个地址找到变量的值。也就是说,这个特定的地址指向这个特定的值。指针*的优点在于它可以有效利用零碎的内存空间。
第3章 哈希算法
哈希算法又称散列函数算法,是一种查找算法,简单来说,就是把一些复杂的数据,通过某种函数映射关系,映射成更加易于查找的方式。但是这种映射关系有可能会发生多个关键字映射到同一地址的现象,我们称之为冲突。在这种特殊情况下,需要对关键字进行第二次或更多次的处理,在其他的大多数情况下,哈希算法可以实现在常数时间内存储和查找这些关键字。
第4章 深度优先遍历算法
深度优先遍历算法是经典的图论算法,它的搜索逻辑就和它的名字一样,只要有可能,就尽量深入搜索,直到找到答案,或者尝试了所有可能后确定没有解。
第5章 广度优先遍历算法
广度优先遍历算法与深度优先遍历算法类似,也是查询的方法之一,它从某个状态出发查询可以到达的所有状态。但不同于深度优先遍历,广度优先遍历算法总是先去查询距离初始状态*近的状态。
第6章 回溯算法
回溯算法可以被看作走迷宫,因为我们不知道出口在哪里,所以只能不断地深入,尝试不同的路线。一旦找到了出口便可以回溯到起点,辨清路线。
第7章 贪心算法
贪心算法就是遵循某种既定原则,不断地选取当前条件下*的选择来构造每个子步骤的解决方案,直到获得问题*终的解。即在对问题求解时,总是做出在当前看来是*好的选择。也就是说,不从整体*上加以考虑,它所做的仅是在某种意义上的局部*解。
第8章 动态规划算法
动态规划算法将待求解问题拆分成一系列相互交叠的子问题,通过递推关系定义各子问题的求解策略,并随时记录子问题的解,*终获得原始问题的解,避免了对交叠子问题的重复求解。
第9章 *短路径问题
把地点看成节点,把道路看成边,整个地图就可看成一个加权图。计算加权图中两点间的*短路径是编程的一个重要问题,这一章我们会用以下几个算法解决这个问题:迪可斯特朗算法、Floyd算法、A*算法。
第10章 分治算法
分治算法的核心思想是把一个规模很大的问题化简为多个规模较小的问题,这些子问题虽然独立而不同,但是问题的本质是一致的,从而达到分而治之的目的。
适合阅读本书的读者
• 需要全面学习算法的人员
• 需要学习Python的程序员
• 对编程算法感兴趣的人员
• 希望提高算法水平的程序员
• 专业培训机构的学员
阅读本书的建议
• 没有Python基础的读者,建议从第1章开始顺次阅读并演练每个实例。
• 有一定Python基础的读者,可以根据实际情况有重点地选择阅读各个模块和项目案例。
• 对于每个模块和案例,先自己思考一下实现的思路,然后再阅读,学习效果会更好。这样理解起来也会更加容易、更加深刻。