前言
本书假定学生已经学过计算机科学的入门课程,但入门课程不一定是用 Python 讲解的。他们理解基本的结构体,比如分支、迭代以及函数定义,也接触过面向对象编程,并且能够创建和使用简单的类。同时,学生也能够理解 Python 的基础数据结构,比如序列(列表和字符串)以及字典。
本书有三大特点:
-
通过简单易读的文字而不引入太多编程语法,重点关注如何解决问题,从而向学生介绍基本的数据结构与算法;
-
较早介绍基于大O记法的算法分析,并且通篇运用;
-
使用 Python 讲解,以促使初学者能够使用和掌握数据结构与算法。
学生将首先学习线性数据结构,包括栈、队列、双端队列以及列表。我们用 Python 列表以及链表实现这些数据结构。然后学习与树有关的非线性数据结构,了解连接节点和引用结构(链表)等一系列技术。最后,学生将通过运用链式结构、链表以及 Python 字典的实现,学习图的相关知识。对于每一种结构,本书都尽力在使用 Python 提供的內建数据类型的同时展现众多的实现技巧。这种讲法在向学生揭示各种主要实现方法的同时,也强调 Python 的易用性。
Python 是一门非常适合于讲解算法的语言,语法干净简洁,用户环境直观,基本的数据类型十分强大和易用。其交互性在不需要额外编写驱动函数的情况下为测试数据结构单元提供了直观环境。而且,Python 为算法提供了教科书式的表示法,基本上不需要再用伪代码。这一特性有助于通过数据结构与算法来描述众多与之有关、相当有趣的现代问题。
章节简介
第 1 章 做一些背景知识的准备,我们来复习一下计算机科学、问题解决、面向对象编程以及 Python。基础扎实的学生可以跳过第 1 章,直接学习第 2 章。不过,正所谓温故而知新,适当的复习和回顾必然是值得的。
第 2 章介绍算法分析的内在思想,重点讲解大O记法,还将分析本书一直使用的重要 Python 数据结构。这可以帮助学生理解如何权衡各种抽象数据类型的不同实现。第 2 章也包含了在运行时使用的 Python 原生类型的实验测量例子。
第 3~7 章全面介绍在经典计算机科学问题中出现的数据结构与算法。尽管在阅读顺序上并无严格要求,但是许多话题之间都存在一定的依赖关系,所以应该按照本书的顺序学习。比如,第 3 章介绍栈,第 4 章利用栈解释递归,第 5 章利用递归实现二分搜索。
第 8 章是选学内容,包含彼此独立的几节。每一节都与之前的某一章有关。正如前面的组织结构图所示,你既可以在学习完第 7 章以后再一起学习第 8 章中的各节内容,也可以把它们与对应的那一章放在一起学习。例如,希望更早介绍数组的教师,可以在讲完第 3 章以后直接跳到 8.2 节。