算法是计算机科学的核心,对于信息时代的发展是至关重要的。它们驱动着搜索引擎,对每天数以十亿计的互联网搜索请求做出响应,并在人们通过互联网进行通信时提供隐私保护。从定制广告到在线价格查询的许多领域中,算法在消费者面前不断展现它们的身影。新媒体中涌现了许多对什么是算法以及算法可以做什么的讨论。

STEM(科学、技术、工程、数学)的快速发展推动了全球经济的可持续增长和革新的新浪潮。但是,还没有足够多的计算机科学家去发现医学、工程学甚至政府部门所需要的算法并对它们进行应用。我们需要让更多的人知道如何把算法应用于自己的领域和解决学科内的各种问题。

读者并不需要完成计算机科学专业4年的学习才能开始学习算法。遗憾的是,关于算法的大多数在线材料和教科书都是为大学毕业生而设计的,重点介绍数学证明和计算机科学的概念。算法教科书很容易让人心怀畏惧,因为它们讨论了众多不同的算法,其中包含无数的变型和高度特定的案例。读者往往还没有读完这类教科书的第1章就打起了退堂鼓。

使用这类教科书类似于通过阅读一本完整的字典来提高英语拼写能力。如果有一本专门的参考书,总结了最容易拼错的100个英语单词,并解释了这些单词的组成规则(或特例),显然能够带来更大的帮助。类似地,要在自己的工作中使用算法的不同背景和经验的人们需要这样一本更重视他们需求的参考书。

本书对一些算法进行了通俗易懂的介绍,使读者可以迅速提高自己的代码运行效率。本书所有的算法都是用Python描述的,它是特别流行的也是对用户特别友好的编程语言之一,其运用的范围涵盖了数据科学、生物信息和工程学等。本书对每个算法进行了详细的解释,并用大量的插图帮助读者理解算法本质。本书的代码是开源的,可以免费从所提供的代码库中获取。

本书将会讲述计算机科学中的基本算法和数据结构,帮助读者编写更加高效的代码。如果读者正在寻找一份需要编程技巧的技术型工作,本书有可能帮助其在面试中表现优异。我希望本书能够激发读者进一步学习算法的兴趣。

Zvi Galil

佐治亚理工学院计算机系荣誉主任

Frederick G. Storey计算项目负责人

亚特兰大,2021年5月