算法学习指南
徐波 译
出版时间:2022年09月
页数:222
“本书将会讲述计算机科学中的基本算法和数据结构,帮助读者编写更加高效的代码。如果读者正在寻找一份需要编程技巧的技术型工作,本书有可能帮助其在面试中表现优异。”
——Zvi Galil
佐治亚理工学院、计算机系荣誉主任
在编写代码时,每位软件专业人士都需要对算法有充分的理解。在这本实用性极强的著作中,作者对一些关键的算法进行了详实的描述,可以有效地提高用各种语言编写代码的质量。软件开发人员、测试人员和维护人员可以在本书中学会如何使用算法,以创造性的方式解决计算性问题。
本书各章内容前后衔接紧密,环环相扣,用醒目的图表有条不紊地展示了一些核心概念,并对书中介绍的每种算法的性能进行了分析。在每一章的最后,读者需要应用在该章所学习的知识,解决一个新颖的具有挑战性的问题,就像在参加技术面试。
在本书中,读者将会:
● 学习计算机科学和软件工程中非常重要且基本的算法;
● 学习高效解决问题的常用策略,包括分治法、动态规划等;
● 使用大O表示法对代码进行分析,评估它的时间复杂度;
● 在算法中使用现有的Python程序库和数据结构解决问题;
● 理解重要算法的主要步骤。
- 第1章 解决问题
- 学习目标
- 1.1 什么是算法?
- 1.2 在一个任意的列表中查找最大值
- 1.3 对关键操作进行计数
- 1.4 可以预测算法性能的模型
- 1.5 在一个随机列表中查找两个最大值
- 1.6 锦标赛算法
- 1.7 时间复杂度和空间复杂度
- 1.8 总结
- 1.9 挑战练习
- 第2章 分析算法
- 学习目标
- 2.1 使用实验模型预测性能
- 2.2 乘法可以更快
- 2.3 性能分类
- 2.4 渐进性分析
- 2.5 对所有操作进行计数
- 2.6 对所有字节进行计数
- 2.7 关上一扇门,打开另一扇门
- 2.8 二分数组搜索
- 2.9 几乎和π一样简单
- 2.10 一石二鸟
- 2.11 综述
- 2.12 曲线拟合与上下界的比较
- 2.13 总结
- 2.14 挑战练习
- 第3章 更好的散列,更适意的人生
- 学习目标
- 3.1 值与键相关联
- 3.2 散列函数和散列码
- 3.3 (key,value)对的可散列结构
- 3.4 使用线性探查法检测和解决冲突
- 3.5 用链表实现分离链表
- 3.6 从链表中删除一个数据项
- 3.7 评估
- 3.8 增长的散列表
- 3.9 分析动态散列表的性能
- 3.10 完美散列
- 3.11 对(key, value)对进行迭代
- 3.12 总结
- 3.13 挑战练习
- 第4章 堆起来!
- 学习目标
- 4.1 最大二叉堆
- 4.2 插入(value, priority)对
- 4.3 删除具有最高优先级的值
- 4.4 用数组表示二叉堆
- 4.5 实现上游和下沉
- 4.6 总结
- 4.7 挑战练习
- 第5章 深入浅出论排序!
- 学习目标
- 5.1 交换排序
- 5.2 选择排序
- 5.3 平方时间级排序算法的剖析
- 5.4 分析插入排序和选择排序的性能
- 5.5 递归和分治法
- 5.6 归并排序
- 5.7 快速排序
- 5.8 堆排序
- 5.9 O(NlogN)等级算法的性能比较
- 5.10 Tim排序
- 5.11 总结
- 5.12 挑战练习
- 第6章 二叉树:掌上世界的无限可能
- 学习目标
- 6.1 基础知识
- 6.2 二叉查找树
- 6.3 在二叉查找树中搜索值
- 6.4 从二叉查找树删除值
- 6.5 遍历二叉树
- 6.6 分析二叉查找树的性能
- 6.7 平衡二叉树
- 6.8 分析平衡二叉树的性能
- 6.9 使用二叉树作为(key,value)符号表
- 6.10 使用二叉树作为优先队列
- 6.11 总结
- 6.12 挑战练习
- 第7章 图:连得上的才是好的!
- 学习目标
- 7.1 图高效地存储了实用的信息
- 7.2 使用深度优先搜索解决迷宫问题
- 7.3 广度优先搜索提供了一种不同的搜索算法
- 7.4 有向图
- 7.5 具有边权重的图
- 7.6 迪杰斯特拉算法
- 7.7 全顶点对的最短路径
- 7.8 Floyd-Warshall算法
- 7.9 总结
- 7.10 挑战练习
- 第8章 综述
- 学习目标
- 8.1 Python的内置数据类型
- 8.2 在Python中实现堆栈
- 8.3 在Python中实现队列
- 8.4 堆和优先队列的实现
- 8.5 进一步的探索
书名:算法学习指南
译者:徐波 译
国内出版社:人民邮电出版社
出版时间:2022年09月
页数:222
书号:978-7-115-59244-6
原版书书名:Learning Algorithms
原版书出版商:O'Reilly Media
George T. Heineman
George T. Heineman是一位计算机科学系的教授,在软件工程和算法领域有超过20年的教学经验。他是《算法技术手册》(第2版)的作者,也是很多O’Reily视频培训课程的讲师。
George T. Heineman is an associate professor of computer science at Worcester Polytechnic Institute. His research interests are in software engineering. He coedited the 2001 book Component-Based Software Engineering: Putting the Pieces Together (Addison-Wesley). George was the program chair for the 2005 International Symposium on Component-Based Software Engineering.