前言
PREFACE
随着大数据处理、人工智能等领域的飞速发展和计算机性能的飞跃性提升,无论在学术界还是产业界,计算机领域的前沿概念与技术都逐步深入到思维层面,数学在这其中发挥的作用越来越重要,越来越多的高深数学理论被运用到实际中来,有效地解决了许多实际问题,例如分析几何、小波分析、数值计算等。这一切让人们逐步意识到计算机程序设计依赖的就是数学知识和算法思想。在软件工程师动手编程完成某一任务之前,先要通过一系列的分析过程来确定解决该任务的方法。首先,分析待求解任务/问题,将其抽象为某种数学模型;然后确定求解该问题时的资源限制(包括时间资源、电力资源、存储资源、计算资源、容错成本等);最后在已知信息的基础上,选择已有的算法或提出新的算法,在满足资源限制的情况下解决问题。因此,可以说一个不懂算法的“菜鸟”程序员是无法独立、自主地解决具体工程问题的,也很难写出逻辑严密、简化的高质量代码。
一名优秀的计算机科学领域的工程师或科学家一定对经典算法思想有深入的理解并能够将这些算法灵活应用于解决实际问题的过程中。目前,很多顶尖IT公司都会考查应聘者的算法功底和逻辑思维能力,因为算法功底深厚的应聘者,往往可以使项目的设计模式格外优化,程序逻辑也更为严密清晰。IT公司的顶尖专家和“达人”都对算法有很深的造诣,同时,项目经理也必须具备超强的逻辑思维能力。
对于所有即将迈入职场的计算机科学相关领域的学生而言,应该都希望自己以后能够在职场中逐渐成长为所在细分领域的优秀人才,具备出色完成各类任务、解决各类问题的能力,算法可以说是解决这些问题的关键,而程序语言只是一个外壳。算法的功底与一个计算机科学工程师的水平上限关系密切。所以,如果你想从事计算机科学相关工作,那么就应当认真地培养自己的逻辑思维,从而提高算法功底!
本书的所有作者以及团队均在计算机科学领域有着多年的算法学习经历和IT领域工作经验,对算法有着较为深入的开发与实践。本书是在所有作者(包括未出现在作者名单中的幕后奉献者)钻研算法的基础上,经过长期的应用总结而完成的,并用言简意赅的语言将这些算法问题的答案展现出来。
本书特色
当前,已出版的算法书籍不计其数,从经典的《算法导论》到针对具体的细分领域(例如文本处理、神经网络等)相关算法的书籍,每一本都有自己的侧重点与特色。本书的特色主要体现在以下几方面:
1)强调算法基础,理论与应用并重。
2)包含大量实际应用中的算法真题。
3)本书以Python语言实现。虽然Python中没有指针的概念(只有引用),为了便于理解,书中很多地方还是使用了指针,可以认为其等价于引用。
4)本书配有核心知识点讲解视频(视频制作由刘玖樽和田思怡完成),讲解内容和程序代码经多次校审和验证(由李海洋、刘玖樽、熊良成和田思怡完成)。
读者对象
1)计算机领域程序员及工程师。
2)计算机科学相关领域本科生及研究生。
3)其他算法爱好者(对算法感兴趣的高中生、IT领域产品经理等)。
我们的目标是将本书打造成广大IT从业者和程序开发人员学习和提升算法能力的高效学习材料,同时也可以作为科研院所及企业的工程师参考的一本技术性书籍,不论你是“菜鸟”还是“达人”,阅读本书都将受益匪浅,可以有效提升解决实际编程问题的能力。
本书内容
本书共16章,分为以下四大部分。
第一部分(算法基础,第1、2章)
这一部分将引导读者理清算法在计算机系统中的作用以及伪代码写法的约定等,不仅给出了算法的定义,简单地介绍了算法的表达方式,同时引导读者思考算法的设计和分析问题,本书后面的内容都是建立在这些基础之上的。
第二部分(经典算法思想,第3~7章)
算法设计有很多思想,但是归纳起来,算法设计中有五种思想使用最为广泛,它们分别是递归与分治法、动态规划算法、贪心算法、回溯法与分支界限法。这一部分逐一介绍了这些经典算法思想的具体思路以及利用这些算法思想可以解决的具体问题。
第三部分(重要数据结构,第8~13章)
谈到算法的时候,数据结构这个词大概率也不会缺席。数据结构也是所有计算机专业学生必修的一门课程。这一部分主要讲解了一些重要数据结构的相关知识以及应用范围。对于数据结构基础较好的读者,可以跳过本部分,并不会影响阅读本书其余章节。
第四部分(常用算法,第14~16章)
这一部分重点介绍了日常学习或工作中最常用的一些算法,包括常用的排序算法、查找算法以及字符串匹配算法。这些算法并不复杂,但是都有着非常高的使用频率,掌握它们将快速提升读者对算法的应用和实践能力。
反馈沟通
欢迎读者朋友在阅读本书过程中给予反馈意见,以利于本书的进一步完善与提升。反馈意见请发送至yuancoder@foxmail.com,我们将尽力解决问题。
本书全体作者