具体描述
了解数据结构与算法是透彻理解计算机科学的前提。随着Python日益广泛的应用,Python程序员需要实现与传统的面向对象编程语言相似的数据结构与算法。本书是用Python描述数据结构与算法的开山之作,汇聚了作者多年的实战经验,向读者透彻讲解在Python环境下,如何通过一系列存储机制高效地实现各类算法。通过本书,读者将深刻理解Python数据结构、递归、搜索、排序、树与图的应用,等等。
作者简介
【作者介绍】
布拉德利·米勒(Bradley N. Miller)
美国路德学院计算机科学名誉教授,曾获美国计算机协会软件系统奖,对Python课程开发有深入研究,由他创立的互动式教科书平台Runestone Interactive与全球600多家教育机构有合作。
戴维·拉努姆(David L. Ranum)
IBM Watson认知软件工程师,医学信息学博士,致力于利用自然语言处理等人工智能技术解决医疗问题,曾在美国路德学院讲授计算机科学课程近三十载。
【译者介绍】
吕能
Twitter软件工程师,开源项目Apache Heron的核心贡献者。先后在浙江大学和美国加州大学洛杉矶分校取得计算机科学学士学位和硕士学位,关注分布式实时数据引擎系统的研发,热衷于普及计算机技术知识。
刁寿钧
腾讯优图实验室后台开发工程师,毕业于复旦大学。先后从事过广告业务与智慧零售、智慧社区业务的开发工作。热爱算法与数据库技术,曾协助组织IMG社区的技术沙龙活动。另译有《数据分析实战》。
目录信息
1.1 本章目标 1
1.2 入门 1
1.3 何谓计算机科学 1
1.3.1 何谓编程 3
1.3.2 为何学习数据结构及抽象数据类型 4
1.3.3 为何学习算法 4
1.4 Python基础 5
1.4.1 数据 5
1.4.2 输入与输出 16
1.4.3 控制结构 18
1.4.4 异常处理 21
1.4.5 定义函数 23
1.4.6 Python面向对象编程:定义类 24
1.5 小结 37
1.6 关键术语 38
1.7 讨论题 38
1.8 编程练习 38
第2章 算法分析 40
2.1 本章目标 0
2.2 何谓算法分析 40
2.2.1 大O记法 43
2.2.2 异序词检测示例 46
2.3 Python数据结构的性能 49
2.3.1 列表 49
2.3.2 字典 53
2.4 小结 55
2.5 关键术语 55
2.6 讨论题 56
2.7 编程练习 56
第3章 基本数据结构 57
3.1 本章目标 57
3.2 何谓线性数据结构 57
3.3 栈 58
3.3.1 何谓栈 58
3.3.2 栈抽象数据类型 59
3.3.3 用Python实现栈 60
3.3.4 匹配括号 62
3.3.5 普通情况:匹配符号 64
3.3.6 将十进制数转换成二进制数 65
3.3.7 前序、中序和后序表达式 67
3.4 队列 75
3.4.1 何谓队列 75
3.4.2 队列抽象数据类型 75
3.4.3 用Python实现队列 76
3.4.4 模拟:传土豆 77
3.4.5 模拟:打印任务 79
3.5 双端队列 84
3.5.1 何谓双端队列 84
3.5.2 双端队列抽象数据类型 84
3.5.3 用Python实现双端队列 85
3.5.4 回文检测器 86
3.6 列表 88
3.6.1 无序列表抽象数据类型 88
3.6.2 实现无序列表:链表 89
3.6.3 有序列表抽象数据类型 97
3.6.4 实现有序列表 97
3.7 小结 100
3.8 关键术语 101
3.9 讨论题 101
3.10 编程练习 102
第4章 递归 105
4.1 本章目标 105
4.2 何谓递归 105
4.2.1 计算一列数之和 105
4.2.2 递归三原则 107
4.2.3 将整数转换成任意进制的字符串 108
4.3 栈帧:实现递归 110
4.4 递归可视化 111
4.5 复杂的递归问题 116
4.6 探索迷宫 118
4.7 动态规划 123
4.8 小结 128
4.9 关键术语 129
4.10 讨论题 129
4.11 编程练习 129
第5章 搜索和排序 131
5.1 本章目标 131
5.2 搜索 131
5.2.1 顺序搜索 131
5.2.2 二分搜索 134
5.2.3 散列 136
5.3 排序 145
5.3.1 冒泡排序 145
5.3.2 选择排序 147
5.3.3 插入排序 149
5.3.4 希尔排序 151
5.3.5 归并排序 153
5.3.6 快速排序 156
5.4 小结 159
5.5 关键术语 160
5.6 讨论题 160
5.7 编程练习 161
第6章 树 163
6.1 本章目标 163
6.2 示例 163
6.3 术语及定义 166
6.4 实现 168
6.4.1 列表之列表 168
6.4.2 节点与引用 171
6.5 二叉树的应用 173
6.5.1 解析树 173
6.5.2 树的遍历 179
6.6 利用二叉堆实现优先级队列 182
6.6.1 二叉堆的操作 182
6.6.2 二叉堆的实现 183
6.7 二叉搜索树 189
6.7.1 搜索树的操作 190
6.7.2 搜索树的实现 190
6.7.3 搜索树的分析 201
6.8 平衡二叉搜索树 202
6.8.1 AVL树的性能 203
6.8.2 AVL树的实现 204
6.8.3 映射实现总结 210
6.9 小结 211
6.10 关键术语 211
6.11 讨论题 211
6.12 编程练习 213
第7章 图及其算法 214
7.1 本章目标 214
7.2 术语及定义 215
7.3 图的抽象数据类型 216
7.3.1 邻接矩阵 216
7.3.2 邻接表 217
7.3.3 实现 218
7.4 宽度优先搜索 220
7.4.1 词梯问题 220
7.4.2 构建词梯图 221
7.4.3 实现宽度优先搜索 223
7.4.4 分析宽度优先搜索 226
7.5 深度优先搜索 226
7.5.1 骑士周游问题 226
7.5.2 构建骑士周游图 227
7.5.3 实现骑士周游 229
7.5.4 分析骑士周游 231
7.5.5 通用深度优先搜索 233
7.5.6 分析深度优先搜索 236
7.6 拓扑排序 236
7.7 强连通单元 238
7.8 最短路径问题 241
7.8.1 Dijkstra算法 243
7.8.2 分析Dijkstra算法 245
7.8.3 Prim算法 245
7.9 小结 248
7.10 关键术语 249
7.11 讨论题 249
7.12 编程练习 250
第8章 附加内容 251
8.1 本章目标 251
8.2 复习Python列表 251
8.3 复习递归 256
8.3.1 同余定理 257
8.3.2 幂剩余 257
8.3.3 最大公因数与逆元 258
8.3.4 RSA算法 261
8.4 复习字典:跳表 264
8.4.1 映射抽象数据类型 265
8.4.2 用Python实现字典 265
8.5 复习树:量化图片 274
8.5.1 数字图像概述 274
8.5.2 量化图片 275
8.5.3 使用八叉树改进量化算法 277
8.6 复习图:模式匹配 284
8.6.1 生物学字符串 285
8.6.2 简单比较 285
8.6.3 使用图:DFA 287
8.6.4 使用图:KMP 288
8.7 小结 291
8.8 关键术语 291
8.9 讨论题 291
8.10 编程练习 292
附录A Python图形包 293
附录B Python资源 294
参考资料295
· · · · · · (收起)
读后感
Python学习数据机构比C语言要简单,这本书的网站(http://interactivepython.org/courselib/static/pythonds/index.html)不仅有动态的演示,还有习题视频讲解,作者真的很用心,很棒。
Python学习数据机构比C语言要简单,这本书的网站(http://interactivepython.org/courselib/static/pythonds/index.html)不仅有动态的演示,还有习题视频讲解,作者真的很用心,很棒。
Python学习数据机构比C语言要简单,这本书的网站(http://interactivepython.org/courselib/static/pythonds/index.html)不仅有动态的演示,还有习题视频讲解,作者真的很用心,很棒。
Python学习数据机构比C语言要简单,这本书的网站(http://interactivepython.org/courselib/static/pythonds/index.html)不仅有动态的演示,还有习题视频讲解,作者真的很用心,很棒。
Python学习数据机构比C语言要简单,这本书的网站(http://interactivepython.org/courselib/static/pythonds/index.html)不仅有动态的演示,还有习题视频讲解,作者真的很用心,很棒。
用户评价
作为一名已经工作多年的资深开发者,我一直在寻找一本能够帮助我系统性梳理Python中数据结构与算法知识体系的书籍。在接触了市面上形形色色的技术书籍后,我发现很多书要么过于理论化,脱离实际应用;要么过于碎片化,难以形成完整的知识链条。而这本书,则以一种难得的平衡,将理论与实践有机地结合起来。它并没有为了追求“高大上”而堆砌晦涩的术语,而是用一种非常接地气的方式,将每一个概念都阐释得淋漓尽致。我印象深刻的是,书中对递归的讲解,它不仅仅给出了递归的定义和代码,更是通过一个又一个生动的例子,让我理解了递归的强大之处以及如何避免常见的错误,比如栈溢出。对于图论部分,书中也进行了非常细致的介绍,从图的表示方法到各种经典的图算法,比如深度优先搜索和广度优先搜索,都给出了清晰的图示和详细的伪代码,这对于我理解这些复杂的算法非常有帮助。这本书的阅读体验非常流畅,让我能够在一个相对轻松的状态下,不断地构建起我对数据结构与算法的认知框架。
随着我对Python编程的深入,我越来越意识到扎实的数据结构和算法基础对于提升代码效率和解决复杂问题的重要性。市面上充斥着大量教你如何“用”Python的书,但真正能让你“理解”Python背后运行机制的书却为数不多。这本书恰恰弥补了我的这一需求。它以一种非常系统化的方式,层层递进地阐述了Python中各种核心数据结构的设计理念、实现方式以及性能特点。我尤其欣赏书中对不同数据结构之间权衡的讨论,比如列表和元组的差异,集合和字典的内部机制等等,这些细节的处理,让我在实际编码时能够做出更优化的选择。书中关于算法的部分,同样详尽而深刻。它并没有止步于介绍算法的表面,而是深入到算法的原理和复杂度分析,比如各种查找算法的效率对比,以及递归和迭代在解决问题时的不同侧重点。这本书就像是一本“内功心法”,它教会我如何从更深层次去理解和运用Python,如何写出更高效、更健壮的代码,让我在面对实际开发中的挑战时,能够更加自信从容。
我是一个刚入行的Python开发者,之前也接触过一些算法相关的书籍,但总觉得理解起来云里雾里,很多概念都停留在“知道有这么回事”的层面。直到我开始阅读这本书,我才真正体会到什么是“拨开迷雾见月明”。作者的讲解风格非常适合初学者,他会从最基础的概念讲起,循序渐进,用非常清晰易懂的语言来阐述复杂的原理。我尤其喜欢书中对每一个数据结构和算法的图示化讲解,比如链表的节点连接、树的层级关系、图的遍历路径等等,这些直观的图解极大地帮助我理解了抽象的概念。而且,书中提供的Python代码示例非常精炼且具有代表性,可以直接运行并观察结果,这让我能够边学边练,加深印象。书中对于各种数据结构的性能分析也做得非常到位,通过大量的例子展示了不同操作在不同数据结构上的效率差异,让我明白了在实际开发中选择合适的数据结构是多么重要。这本书不仅仅是知识的堆砌,更是一种思维方式的培养,它教会了我如何去分析问题、如何去设计解决方案,让我不再害怕面对复杂的算法问题。
我一直对计算机科学的核心概念非常感兴趣,尤其是数据结构和算法,因为我知道它们是构建高效软件的基石。这本书给了我一个全新的视角来审视这些问题。它的讲解方式非常独特,不是简单地罗列概念,而是通过一种“故事化”的方式,将抽象的概念变得生动有趣。例如,在讲解堆栈的实现时,作者会用一个生动的场景来比喻,让你瞬间就能明白它的工作原理。对于各种排序算法,书中更是进行了深入的分析,不仅给出了不同算法的实现,还对它们的性能进行了详细的评估,并且特别强调了在实际应用中如何根据具体情况选择最合适的算法。我特别喜欢书中对于动态规划的介绍,它并没有直接给出复杂的公式,而是通过几个经典的例子,一步步引导读者去理解动态规划的思考方式,让我不再觉得动态规划是一个遥不可及的难题。这本书最大的价值在于,它不仅仅是传授知识,更是在培养一种解决问题的能力,一种用算法思维去思考世界的习惯。
作为一名在编程领域摸爬滚打多年的老兵,一直以来,我都在寻找能够真正沉淀技术、夯实基础的经典书籍。市面上充斥着大量关于“快速上手”、“精通XX”的教程,但往往流于表面,让人感觉像是建造空中楼阁,一旦遇到复杂问题就无从下手。直到我翻开这本书,才有一种醍醐灌顶的感觉。它没有那些花里胡哨的包装,而是用一种极其朴实、严谨的方式,将数据结构和算法的精髓娓娓道来。我特别欣赏它在讲解过程中,并没有一味地追求技术的前沿性,而是将那些历经时间考验、基础却又极其重要的概念,进行深入的剖析。比如说,书中对于各种排序算法的详细解释,不仅仅是代码的展示,更重要的是对它们的时间复杂度和空间复杂度的深入分析,以及在不同应用场景下的优劣势对比。这种“知其然,更知其所以然”的讲解方式,让我能够真正理解每种算法的设计思想,从而在实际开发中做出更明智的选择。即使是看似简单的线性表,书中也对其在内存管理、操作效率等方面进行了细致的讨论,这对于理解计算机底层运作原理至关重要。这本书更像是一位循循善诱的良师益友,带领我一步步走入数据结构与算法的殿堂,让我对其有了更深层次的理解和认识。
讲得挺清楚的,就是书中代码错误比较多。。。
讲得挺清楚的,就是书中代码错误比较多。。。
讲得挺清楚的,就是书中代码错误比较多。。。
讲得挺清楚的,就是书中代码错误比较多。。。
讲得挺清楚的,就是书中代码错误比较多。。。