新書推薦:
《
“御容”与真相:近代中国视觉文化转型(1840-1920)
》
售價:NT$
505.0
《
鸣沙丛书·大风起兮:地方视野和政治变迁中的“五四”(1911~1927)
》
售價:NT$
454.0
《
海洋、岛屿和革命:当南方遭遇帝国(文明的另一种声音)
》
售價:NT$
485.0
《
铝合金先进成型技术
》
售價:NT$
1214.0
《
英雄之旅:把人生活成一个好故事
》
售價:NT$
398.0
《
分析性一体的涌现:进入精神分析的核心
》
售價:NT$
556.0
《
火枪与账簿:早期经济全球化时代的中国与东亚世界
》
售價:NT$
352.0
《
《全面与进步跨太平洋伙伴关系协定》国有企业条款研究
》
售價:NT$
449.0
|
內容簡介: |
本书采用Python语言介绍数据结构和算法,包括其设计、分析和实施。本书源代码简洁、明确,面向对象的观点贯穿始终,通过继承*限度地提高代码重用,同时彰显不同抽象数据类型和算法之间的异同。
|
關於作者: |
迈克尔·T. 古德里奇(Michael T. Goodrich) 加州大学欧文分校计算机科学系教授,之前是约翰·霍普金斯大学教授。他是AAAS、ACM和IEEE会士,曾荣获IEEE计算机协会技术成就奖和ACM卓越服务奖等。
罗伯托·塔马西亚(Roberto Tamassia) 布朗大学计算机科学系教授及系主任,兼任几何计算中心主任。他是AAAS、ACM和IEEE会士,曾荣获IEEE计算机协会技术成就奖。
迈克尔·H.戈德瓦瑟Michael H. Goldwasser圣路易斯大学数学系和计算机科学系教授,兼任计算机科学项目主任,之前曾在芝加哥罗耀拉大学任教。
|
目錄:
|
出版者的话
译者序
前言
致谢
作者简介
第1章 Python入门1
1.1 Python概述1
1.1.1 Python解释器1
1.1.2 Python程序预览1
1.2 Python对象2
1.2.1 标识符、对象和赋值语句2
1.2.2 创建和使用对象4
1.2.3 Python的内置类4
1.3 表达式、运算符和优先级8
1.4 控制流程12
1.4.1 条件语句12
1.4.2 循环语句14
1.5 函数16
1.5.1 信息传递17
1.5.2 Python的内置函数19
1.6 简单的输入和输出20
1.6.1 控制台输入和输出21
1.6.2 文件21
1.7 异常处理22
1.7.1 抛出异常23
1.7.2 捕捉异常24
1.8 迭代器和生成器26
1.9 Python的其他便利特点28
1.9.1 条件表达式29
1.9.2 解析语法29
1.9.3 序列类型的打包和解包30
1.10 作用域和命名空间31
1.11 模块和import语句32
1.12 练习34
扩展阅读36
第2章 面向对象编程37
2.1 目标、原则和模式37
2.1.1 面向对象的设计目标37
2.1.2 面向对象的设计原则38
2.1.3 设计模式39
2.2 软件开发40
2.2.1 设计40
2.2.2 伪代码41
2.2.3 编码风格和文档42
2.2.4 测试和调试43
2.3 类定义44
2.3.1 例子:CreditCard类45
2.3.2运算符重载和Python的特殊方法48
2.3.3 例子:多维向量类50
2.3.4 迭代器51
2.3.5 例子:Range类52
2.4 继承53
2.4.1 扩展CreditCard类54
2.4.2 数列的层次图57
2.4.3 抽象基类60
2.5 命名空间和面向对象62
2.5.1 实例和类命名空间62
2.5.2 名称解析和动态调度65
2.6 深拷贝和浅拷贝65
2.7 练习67
扩展阅读70
第3章 算法分析71
3.1 实验研究71
3.2 本书使用的7种函数74
3.2.1 常数函数74
3.2.2 对数函数74
3.2.3 线性函数75
3.2.4 n-log-n函数75
3.2.5 二次函数76
3.2.6 三次函数和其他多项式77
3.2.7 指数函数77
3.2.8 比较增长率79
3.3 渐近分析79
3.3.1 大O符号80
3.3.2 比较分析82
3.3.3 算法分析示例84
3.4 简单的证明技术89
3.4.1 示例89
3.4.2 反证法89
3.4.3 归纳和循环不变量90
3.5 练习91
扩展阅读95
第4章 递归96
4.1 说明性的例子96
4.1.1 阶乘函数96
4.1.2 绘制英式标尺97
4.1.3 二分查找99
4.1.4 文件系统101
4.2 分析递归算法104
4.3 递归算法的不足106
4.4 递归的其他例子109
4.4.1 线性递归109
4.4.2 二路递归112
4.4.3 多重递归113
4.5 设计递归算法114
4.6 消除尾递归115
4.7 练习116
扩展阅读118
第5章 基于数组的序列119
5.1 Python序列类型119
5.2 低层次数组119
5.2.1 引用数组121
5.2.2 Python中的紧凑数组122
5.3 动态数组和摊销124
5.3.1 实现动态数组126
5.3.2 动态数组的摊销分析127
5.3.3 Python列表类130
5.4 Python序列类型的效率130
5.4.1 Python的列表和元组类130
5.4.2 Python的字符串类134
5.5 使用基于数组的序列136
5.5.1 为游戏存储高分136
5.5.2 为序列排序138
5.5.3 简单密码技术140
5.6 多维数据集142
5.7 练习145
扩展阅读147
第6章 栈、队列和双端队列148
6.1 栈148
6.1.1 栈的抽象数据类型148
6.1.2简单的基于数组的栈实现149
6.1.3 使用栈实现数据的逆置152
6.1.4 括号和HTML标记匹配152
6.2 队列155
6.2.1 队列的抽象数据类型155
6.2.2 基于数组的队列实现156
6.3 双端队列160
6.3.1双端队列的抽象数据类型160
6.3.2使用环形数组实现双端队列161
6.3.3Python collections模块中的双端队列162
6.4 练习163
扩展阅读165
第7章 链表166
7.1 单向链表166
7.1.1 用单向链表实现栈169
7.1.2 用单向链表实现队列171
7.2 循环链表173
7.2.1 轮转调度173
7.2.2 用循环链表实现队列174
7.3 双向链表175
7.3.1 双向链表的基本实现177
7.3.2 用双向链表实现双端队列179
7.4 位置列表的抽象数据类型180
7.4.1含位置信息的列表抽象数据类型182
7.4.2 双向链表实现183
7.5 位置列表的排序186
7.6 案例研究:维护访问频率186
7.6.1 使用有序表187
7.6.2 启发式动态调整列表188
7.7基于链接的序列与基于数组的序列190
7.8 练习192
扩展阅读195
第8章 树196
8.1 树的基本概念196
8.1.1 树的定义和属性196
8.1.2 树的抽象数据类型199
8.1.3 计算深度和高度201
8.2 二叉树203
8.2.1 二叉树的抽象数据类型204
8.2.2 二叉树的属性206
8.3 树的实现207
8.3.1 二叉树的链式存储结构207
8.3.2 基于数组表示的二叉树212
8.3.3 一般树的链式存储结构214
8.4 树的遍历算法214
8.4.1 树的先序和后序遍历214
8.4.2 树的广度优先遍历216
8.4.3 二叉树的中
|
內容試閱:
|
高效数据结构的设计与分析,长期以来一直被认为是计算领域的一个重要主题,同时也是计算机科学与计算机工程本科教学中的核心课程。本书介绍数据结构和算法,包括其设计、分析和实现,可在初级数据结构或中级算法导论课程中使用。我们随后会更详细地讨论如何在这些课程中使用本书。
为了提高软件开发的健壮性和可重用性,我们在本书中采取一致的面向对象的视角。面向对象方法的一个主要思想是数据应该被封装,然后提供访问和修改它们的方法。我们不能简单地将数据看作字节和地址的集合,数据对象是抽象数据类型(Abstract Data Type,ADT)的实例,其中包括可在这种类型的数据对象上执行的操作方法的集合。我们强调的是对于一个特定的ADT可能有几种不同的实现策略,并探讨这些选择的优点和缺点。我们几乎为书中的所有数据结构和算法都提供了完整的Python实现,并介绍了将这些实现组织为可重用的组件所需的重要的面向对象设计模式。
通过阅读本书,读者可以:
对常见数据集合的抽象有一定了解(如栈、队列、表、树、图)。
理解生成常用数据结构的高效实现的算法策略。
通过理论方法和实验方法分析算法的性能,并了解竞争策略之间的权衡。
明智地利用编程语言库中已有的数据结构和算法。
拥有大多数基础数据结构和算法的具体实现经验。
应用数据结构和算法来解决复杂的问题。
为了达到最后一个目标,我们在书中提供了数据结构的很多应用实例,包括:文本处理系统,结构化格式(如HTML)的标签匹配,简单的密码技术,文字频率分析,自动几何布局,霍夫曼编码,DNA序列比对,以及搜索引擎索引。
本书特色
本书主要基于由Goodrich和Tamassia所著的《Data Structures and Algorithms in Java》,以及由Goodrich、Tamassia和Mount所著的《Data Structures and Algorithms in C++》编写而成。然而,我们并不是简单地用Python语言实现以上书籍的内容。为了充实内容,我们重新设计了本书:
对全部代码进行了重新设计,以充分利用Python的优势,如使用生成器迭代集合的元素。
在Java和C++版本中,我们提供了很多伪代码,而本书则提供了Python实现的完整代码。
在一般情况下,ADT被定义为与Python内建数据类型和Python的collections模块具有一致的接口。
第5章深入探讨了Python中基于动态数组的内置数据结构,如list、tuple和str类。新增的附录A提供了关于str类功能的进一步讲解。
重新绘制或修改了超过450幅插图。
经过新增和修订,练习的总数达到750个。
在线资源
本书提供一系列丰富的在线资源,可访问以下网站获取:
www.wiley.comcollegegoodrich
鼓励学生在学习本书时使用这个网址,以更有效地进行练习并提高对所学知识的认识。也欢迎教师使用本网站来帮助规划、组织和展示他们的课程材料。对于教师和学生而言,网站中包含一系列与本书主题相关的教学资源,由于它们是有附加价值的,所以一些网上资源受密码保护。
对于所有的读者,尤其是学生,我们有以下资源:
书中所有Python程序的源代码。
提供给教师的PDF讲义版PPT(每页四张)。
保存所有练习提示的数据库,以练习的编号为索引。
对于使用本书的教师,我们有以下额外的教学辅助资源:
本书练习的答案。
书中所有图形和插图的彩色版本。
PPT和PDF版本的幻灯片,其中PDF版本为每页一张。
PPT是完全可编辑的,教师可根据自己的课程需求进行修改。在教师使用本书作为教材时,所有的在线资源不收取额外费用。
内容和组织
书中各章节的内容循序渐进,适于教学。从Python编程和面向对象设计的基础开始,然后逐渐增加如算法分析和递归之类的基础技术。在本书的主体部分中,我们展示了基本的数据结构和算法,并且包括对内存管理的讨论(也是数据结构的架构基础)。本书的章节安排如下:
第1章 Python入门
第2章 面向对象编程
第3章 算法分析
第4章 递归
第5章 基于数组的序列
第6章 栈、队列和双端队列
第7章 链表
第8章 树
第9章 优先级队列
第10章 映射、哈希表和跳跃表
第11章 搜索树
第12章 排序与选择
第13章 文本处理
第14章 图算法
第15章 内存管理和B树
附录A Python中的字符串
附录B 有用的数学定理
预备知识
我们假设读者至少接触过一种高级语言,如C、C++、Python或Java,可以理解相关高级语言的主要概念,包括:
变量和表达式。
决策结构(if语句和switch语句)。
迭代结构(for循环和while循环)。
函数(无论是过程式方法还是面向对象方法)。
对于已经熟悉这些概念但还不清楚如何在Python中应用的读者,我们建议将第1章作为Python语言的入门。这本书主要讨论数据结构,而不是讲解Python,因此并没有详尽介绍Python。
直到第2章才开始使用Python中的面向对象编程,这一章对于那些Python新手以及熟悉Python但不熟悉面向对象编程的人都是有用的。
就数学背景而言,我们假定读者多少熟悉些高中数学知识。即便如此,在第3章中,我们先讨论了算法分析的7个最重要的功能。若所涉及的内容超出了这7个功能,则作为可选章节,用星号(*)标记。附录B对其他有用的数学定理做了总结,包括初等概率等。
计算机科学课程的设计
为了帮助教师在IEEEACM 2013的框架下设计教学课程,下表描述了本书涵盖的知识要点。
知识要点相关章节
AL基本分析第3章,4.2节,12.2.4节
AL算法策略12.2.1节,13.2.1节,13.3节,13.4.2节
AL基本数据结构与算法4.1.3节,5.5.2节,9.4.1节,9.3节,10.2节,11.1节,13.2节,第12章,第14章的大部分内容
AL高级数据结构5.3节,10.4节,11.2~11.6节,12.3.1节,13.5节,14.5节,15.3节
AR内存系统组织和架构第15章
DS集合、关系和功能10.5.1节,10.5.2节,9.4节
DS证明技巧3.4节,4.2节,5.3.2节,9.3.6节,12.4.1节
DS基础计数2.4.2节,6.2.2节,12.2.4节,8.2.2节,附录B
DS图和树第8章和第14章的大部分内容
DS离散概率1.11节,10.2节,10.4.2节,12.3.1节
PL面向对象编程本书的大部分内容,特别是第2章以及7.4节、9.5.1节、10.1.3节和11.2节
PL函数式编程1.10节
SDF算法和设计2.1节,3.3节,12.2.1节
SDF基本编程概念第1章,第4章
SDF基本数据结构第6章,第7章,附录A,1.2.1节,5.2节,5.4节,9.1节,10.1节
SDF开发方法1.7节,2.2节
SE软件设计2.1节,2.1.3节
|
|