算法设计与分析(Python)

王春平 & 李曲 & 程振波

Language: Chinese

Published: Feb 14, 2018

Description:

算法设计与分析是计算机专业⾮常重要的⼀门基础课程,它不仅是诸多计

算机专业课程的基础,也是许多信息科技类公司在招聘程序员时,笔试与⾯试

重点考核的内容。算法设计与分析已经有了诸多经典的著作,⽐如美国⿇省理

⼯(MIT)⼏位教授合著的《算法导论》1等。然⽽,这些经典著作当作教材使

⽤时,都会存在对内容进⾏适当裁剪,以便它更适合48 或者32 个学时教学的

问题。我们写本书的⽬的就是对初等算法内容进⾏合理的编排,让初学者能很

快地掌握解决计算问题的常⽤算法,以及分析算法效率的⽅法。

本书算法均采⽤Python 语⾔进⾏描述,Python 是⼀类解释性语⾔,其语法

简单直观,有⼀定程序设计基础的学⽣可以很快⼊门。Python 语法简单并不意

味着功能弱,它在科学计算、Web 应⽤等诸多领域都有着⼴泛的应⽤。国外知

名的⾼校,如⿇省理⼯,也在算法设计课中采⽤Python 语⾔描述。与采⽤伪代

码描述算法的书⽐较⽽⾔,采⽤Python 描述算法能有直接可运⾏的代码,从⽽

可以帮助读者更易于去揣摩算法实现的技巧。

计算机算法不仅涉及诸多理论,还有各种技术细节。⽐如介绍随机算法时,

有些执⾏时间的分析就需要较多的概率论知识;⽽算法实现技术细节则不仅关

注如何存储数据,甚⾄对执⾏算法的硬件环境也会考虑在内。本书的内容安排

则希望在算法的数学分析和实现之间取得⼀个合理的平衡。⾸先,在分析算法

效率时尽量避免过深的数学证明,但关键步骤依然会给出直观的解释。其次,在

实现算法时本书尽量利⽤Python 内已有的数据结构和库函数,从⽽简化算法实现的技术难度。

如果将要处理的数据、问题看作是⾷材,那么算法就是将⾷材“转化”成各种

令⼈垂诞美⾷的过程。中国菜肴到处都是充满想象⼒的转化,将原本普通的⾷

材(⼤⾖和糯⽶等)转化为营养和美味的⾷物(⾖腐、酒酿和酱料等等)。本书的

主线就是转化,它不仅有问题的转化,也有⽅法的转化(如图1所⽰)。通过问题

的转化将问题“化繁为简”,通过⽅法的转化以便融会贯通各种算法设计的技巧。

由于计算机已经成为现代科技、⽣活不可缺少的⼯具。因此,解决计算问

题的算法涉及的内容可以说包罗万象,从简单的排序和查找到复杂的语⾳识别、

⽂字翻译,甚⾄游戏等等都离不开算法。本书内容涵盖了⼤部分的经典算法,主

要内容包括递归算法、分治算法、排序算法、动态规划算法、图遍历算法、最⼤

流算法、随机算法和计算问题分类。