展开全部

主编推荐语

CSDN超人气博主、算法专栏达人王晓华力作。

内容简介

本书从一系列有趣的生活实例出发,全面介绍了构造算法的基础方法及其广泛应用,生动地展现了算法的趣味性和实用性。

全书分为两个部分,一部分介绍了算法的概念、常用的算法结构以及实现方法,二部分介绍了算法在各个领域的应用,如物理实验、计算机图形学、数字音频处理等。其中,既有各种大名鼎鼎的算法,如神经网络、遗传算法、离散傅里叶变换算法及各种插值算法,也有不起眼的排序和概率计算算法。讲解浅显易懂而不失深度和严谨,对程序员有很大的启发意义。书中所有的示例都与生活息息相关,淋漓尽致地展现了算法解决问题的本质,让你爱上算法,乐在其中。

本书适合软件开发人员、编程和算法爱好者以及计算机专业的学生阅读。

目录

  • 版权信息
  • 序一
  • 序二
  • 序三
  • 致谢
  • 前言
  • 第1章 程序员与算法
  • 1.1 什么是算法
  • 1.2 程序员必须要会算法吗
  • 1.2.1 一个队列引发的惨案
  • 1.2.2 我的第一个算法
  • 1.3 算法的乐趣在哪里
  • 1.4 算法与代码
  • 1.5 总结
  • 1.6 参考资料
  • 第2章 算法设计的基础
  • 2.1 程序的基本结构
  • 2.1.1 顺序执行
  • 2.1.2 循环结构
  • 2.1.3 分支和跳转结构
  • 2.2 算法实现与数据结构
  • 2.2.1 基本数据结构在算法设计中的应用
  • 2.2.2 复杂数据结构在算法设计中的应用
  • 2.3 数据结构和数学模型与算法的关系
  • 2.4 总结
  • 2.5 参考资料
  • 第3章 算法设计的常用思想
  • 3.1 贪婪法
  • 3.1.1 贪婪法的基本思想
  • 3.1.2 贪婪法的例子:0-1背包问题
  • 3.2 分治法
  • 3.2.1 分治法的基本思想
  • 3.2.2 递归和分治,一对好朋友
  • 3.2.3 分治法的例子:大整数Karatsuba乘法算法
  • 3.3 动态规划
  • 3.3.1 动态规划的基本思想
  • 3.3.2 动态规划法的例子:字符串的编辑距离
  • 3.4 解空间的穷举搜索
  • 3.4.1 解空间的定义
  • 3.4.2 穷举解空间的策略
  • 3.4.3 穷举搜索的例子:Google方程式
  • 3.5 总结
  • 3.6 参考资料
  • 第4章 阿拉伯数字与中文数字
  • 4.1 中文数字的特点
  • 4.1.1 中文数字的权位和小节
  • 4.1.2 中文数字的零
  • 4.2 阿拉伯数字转中文数字
  • 4.2.1 一个转换示例
  • 4.2.2 转换算法设计
  • 4.2.3 算法实现
  • 4.2.4 中文大写数字
  • 4.3 中文数字转阿拉伯数字
  • 4.3.1 转换的基本方法
  • 4.3.2 算法实现
  • 4.4 数字转换的测试用例
  • 4.5 总结
  • 4.6 参考资料
  • 第5章 三个水桶等分8升水的问题
  • 5.1 问题与求解思路
  • 5.2 建立数学模型
  • 5.2.1 状态的数学模型与状态树
  • 5.2.2 倒水动作的数学模型
  • 5.3 搜索算法
  • 5.3.1 状态树的遍历
  • 5.3.2 剪枝和重复状态判断
  • 5.4 算法实现
  • 5.5 总结
  • 5.6 参考资料
  • 第6章 妖怪与和尚过河问题
  • 6.1 问题与求解思路
  • 6.2 建立数学模型
  • 6.2.1 状态的数学模型与状态树
  • 6.2.2 过河动作的数学模型
  • 6.3 搜索算法
  • 6.3.1 状态树的遍历
  • 6.3.2 剪枝和重复状态判断
  • 6.4 算法实现
  • 6.5 总结
  • 6.6 参考资料
  • 第7章 稳定匹配与舞伴问题
  • 7.1 稳定匹配问题
  • 7.1.1 什么是稳定匹配
  • 7.1.2 Gale-Shapley算法原理
  • 7.2 Gale-Shapley算法的应用实例
  • 7.2.1 算法实现
  • 7.2.2 改进优化:空间换时间
  • 7.3 有多少稳定匹配
  • 7.3.1 穷举所有的完美匹配
  • 7.3.2 不稳定因素的判断算法
  • 7.3.3 穷举的结果
  • 7.4 二部图与二分匹配
  • 7.4.1 最大匹配与匈牙利算法
  • 7.4.2 带权匹配与Kuhn-Munkres算法
  • 7.5 总结
  • 7.6 参考资料
  • 第8章 爱因斯坦的思考题
  • 8.1 问题的答案
  • 8.2 分析问题的数学模型
  • 8.2.1 基本模型定义
  • 8.2.2 线索模型定义
  • 8.3 算法设计
  • 8.3.1 穷举所有的组合结果
  • 8.3.2 利用线索判定结果的正确性
  • 8.4 总结
  • 8.5 参考资料
  • 第9章 项目管理与图的拓扑排序
  • 9.1 AOV网和AOE网
  • 9.2 拓扑排序
  • 9.2.1 拓扑排序的基本过程
  • 9.2.2 按照活动开始时间排序
  • 9.3 关键路径算法
  • 9.3.1 什么是关键路径
  • 9.3.2 计算关键路径的算法
  • 9.4 总结
  • 9.5 参考资料
  • 第10章 RLE压缩算法与PCX图像文件格式
  • 10.1 RLE压缩算法
  • 10.1.1 连续重复数据的处理
  • 10.1.2 连续非重复数据的处理
  • 10.1.3 算法实现
  • 10.2 RLE与PCX图像文件格式
  • 10.2.1 PCX图像文件格式
  • 10.2.2 PCX_RLE算法
  • 10.2.3 256色PCX文件的解码和显示
  • 10.3 总结
  • 10.4 参考资料
  • 第11章 算法与历法
  • 11.1 格里历(公历)生成算法
  • 11.1.1 格里历的历法规则
  • 11.1.2 今天星期几
  • 11.1.3 生成日历的算法
  • 11.1.4 日历变更那点事儿
  • 11.2 二十四节气的天文学计算
  • 11.2.1 二十四节气的起源
  • 11.2.2 二十四节气的天文学定义
  • 11.2.3 VSOP-82/87行星理论
  • 11.2.4 误差修正——章动
  • 11.2.5 误差修正——光行差
  • 11.2.6 用牛顿迭代法计算二十四节气
  • 11.3 农历朔日(新月)的天文学计算
  • 11.3.1 日月合朔的天文学定义
  • 11.3.2 ELP-2000/82月球理论
  • 11.3.3 误差修正——地球轨道离心率修正
  • 11.3.4 误差修正——黄经摄动
  • 11.3.5 月球地心视黄经和最后的修正——地球章动
  • 11.3.6 用牛顿迭代法计算日月合朔
  • 11.4 农历的生成算法
  • 11.4.1 中国农历的起源与历法规则
  • 11.4.2 中国农历的推算
  • 11.4.3 一个简单的“年历”
  • 11.5 总结
  • 11.6 参考资料
  • 第12章 实验数据与曲线拟合
  • 12.1 曲线拟合
  • 12.1.1 曲线拟合的定义
  • 12.1.2 简单线性数据拟合的例子
  • 12.2 最小二乘法曲线拟合
  • 12.2.1 最小二乘法原理
  • 12.2.2 高斯消元法求解方程组
  • 12.2.3 最小二乘法解决“速度与加速度”实验
  • 12.3 三次样条曲线拟合
  • 12.3.1 插值函数
  • 12.3.2 样条函数的定义
  • 12.3.3 边界条件
  • 12.3.4 推导三次样条函数
  • 12.3.5 追赶法求解方程组
  • 12.3.6 三次样条曲线拟合算法实现
  • 12.3.7 三次样条曲线拟合的效果
  • 12.4 总结
  • 12.5 参考资料
  • 第13章 非线性方程与牛顿迭代法
  • 13.1 非线性方程求解的常用方法
  • 13.1.1 公式法
  • 13.1.2 二分逼近法
  • 13.2 牛顿迭代法的数学原理
  • 13.3 用牛顿迭代法求解非线性方程的实例
  • 13.3.1 导函数的求解与近似公式
  • 13.3.2 算法实现
  • 13.4 参考资料
  • 第14章 计算几何与计算机图形学
  • 14.1 计算几何的基本算法
  • 14.1.1 点与矩形的关系
  • 14.1.2 点与圆的关系
  • 14.1.3 矢量的基础知识
  • 14.1.4 点与直线的关系
  • 14.1.5 直线与直线的关系
  • 14.1.6 点与多边形的关系
  • 14.2 直线生成算法
  • 14.2.1 什么是光栅图形扫描转换
  • 14.2.2 数值微分法
  • 14.2.3 Bresenham算法
  • 14.2.4 对称直线生成算法
  • 14.2.5 两步算法
  • 14.2.6 其他直线生成算法
  • 14.3 圆生成算法
  • 14.3.1 圆的八分对称性
  • 14.3.2 中点画圆法
  • 14.3.3 改进的中点画圆法——Bresenham算法
  • 14.3.4 正负判定画圆法
  • 14.4 椭圆生成算法
  • 14.4.1 中点画椭圆法
  • 14.4.2 Bresenham椭圆算法
  • 14.5 多边形区域填充算法
  • 14.5.1 种子填充算法
  • 14.5.2 扫描线填充算法
  • 14.5.3 改进的扫描线填充算法
  • 14.5.4 边界标志填充算法
  • 14.6 总结
  • 14.7 参考资料
  • 第15章 音频频谱和均衡器与傅里叶变换算法
  • 15.1 实时频谱显示的原理
  • 15.2 离散傅里叶变换
  • 15.2.1 什么是傅里叶变换
  • 15.2.2 傅里叶变换原理
  • 15.2.3 快速傅里叶变换算法的实现
  • 15.3 傅里叶变换与音频播放的实时频谱显示
  • 15.3.1 频域数值的特点分析
  • 15.3.2 从音频数据到功率频谱
  • 15.3.3 音频播放时实时频谱显示的例子
  • 15.4 破解电话号码的小把戏
  • 15.4.1 拨号音的频谱分析
  • 15.4.2 根据频谱数据反推电话号码
  • 15.5 离散傅里叶逆变换
  • 15.5.1 快速傅里叶逆变换的推导
  • 15.5.2 快速傅里叶逆变换的算法实现
  • 15.6 利用傅里叶变换实现频域均衡器
  • 15.6.1 频域均衡器的实现原理
  • 15.6.2 频域信号的增益与衰减
  • 15.6.3 均衡器的实现——仿Foobar的18段均衡器
  • 15.7 总结
  • 15.8 参考资料
  • 第16章 全局最优解与遗传算法
  • 16.1 遗传算法的原理
  • 16.1.1 遗传算法的基本概念
  • 16.1.2 遗传算法的处理流程
  • 16.2 遗传算法求解0-1背包问题
  • 16.2.1 基因编码和种群初始化
  • 16.2.2 适应度函数
  • 16.2.3 选择算子设计与轮盘赌算法
  • 16.2.4 交叉算子设计
  • 16.2.5 变异算子设计
  • 16.2.6 这就是遗传算法
  • 16.3 总结
  • 16.4 参考资料
  • 第17章 计算器程序与大整数计算
  • 17.1 哦,溢出了,出洋相的计算器程序
  • 17.2 大整数计算的原理
  • 17.2.1 大整数加法
  • 17.2.2 大整数减法
  • 17.2.3 大整数乘法
  • 17.2.4 大整数除法与模
  • 17.2.5 大整数乘方运算
  • 17.3 大整数类的使用
  • 17.3.1 与Windows的计算器程序一决高下
  • 17.3.2 最大公约数和最小公倍数
  • 17.3.3 用扩展欧几里得算法求模的逆元
  • 17.4 总结
  • 17.5 参考资料
  • 第18章 RSA算法——加密与签名
  • 18.1 RSA算法的开胃菜
  • 18.1.1 将模幂运算转化为模乘运算
  • 18.1.2 模乘运算与蒙哥马利算法
  • 18.1.3 模幂算法
  • 18.1.4 素数检验与米勒-拉宾算法
  • 18.2 RSA算法原理
  • 18.2.1 RSA算法的数学理论
  • 18.2.2 加密和解密算法
  • 18.2.3 RSA算法的安全性
  • 18.3 数据块分组加密
  • 18.3.1 字节流与大整数的转换
  • 18.3.2 PCKS与OAEP加密填充模式
  • 18.3.3 数据加密算法实现
  • 18.3.4 数据解密算法实现
  • 18.4 RSA签名与身份验证
  • 18.4.1 RSASSA-PKCS与RSASSA-PSS签名填充模式
  • 18.4.2 签名算法实现
  • 18.4.3 验证签名算法实现
  • 18.5 总结
  • 18.6 参考资料
  • 第19章 数独游戏
  • 19.1 数独游戏的规则与技巧
  • 19.1.1 数独游戏的规则
  • 19.1.2 数独游戏的常用技巧
  • 19.2 计算机求解数独问题
  • 19.2.1 建立问题的数学模型
  • 19.2.2 算法实现
  • 19.2.3 与传统穷举方法的结果对比
  • 19.3 关于数独的趣味话题
  • 19.3.1 数独游戏有多少终盘
  • 19.3.2 史上最难的数独游戏
  • 19.4 总结
  • 19.5 参考资料
  • 第20章 华容道游戏
  • 20.1 华容道游戏介绍
  • 20.2 自动求解的算法原理
  • 20.2.1 定义棋盘的局面
  • 20.2.2 算法思路
  • 20.3 自动求解的算法实现
  • 20.3.1 棋局状态与Zobrist哈希算法
  • 20.3.2 重复棋局和左右镜像的处理
  • 20.3.3 正确结果的判断条件
  • 20.3.4 武将棋子的移动
  • 20.3.5 棋局的搜索算法
  • 20.4 总结
  • 20.5 参考资料
  • 第21章 A*寻径算法
  • 21.1 寻径算法演示程序
  • 21.2 Dijkstra算法
  • 21.2.1 Dijkstra算法原理
  • 21.2.2 Dijkstra算法实现
  • 21.2.3 Dijkstra算法演示程序
  • 21.3 带启发的搜索算法——A*算法
  • 21.3.1 A*算法原理
  • 21.3.2 常用的距离评估函数
  • 21.3.3 A*算法实现
  • 21.4 总结
  • 21.5 参考资料
  • 第22章 俄罗斯方块游戏
  • 22.1 俄罗斯方块游戏规则
  • 22.2 俄罗斯方块游戏人工智能的算法原理
  • 22.2.1 影响评价结果的因素
  • 22.2.2 常用的俄罗斯方块游戏人工智能算法
  • 22.2.3 Pierre Dellacherie评估算法
  • 22.3 Pierre Dellacherie算法实现
  • 22.3.1 基本数学模型和数据结构定义
  • 22.3.2 算法实现
  • 22.4 总结
  • 22.5 参考资料
  • 第23章 博弈树与棋类游戏
  • 23.1 棋类游戏的AI
  • 23.1.1 博弈与博弈树
  • 23.1.2 极大极小值搜索算法
  • 23.1.3 负极大极搜索算法
  • 23.1.4 “α-β”剪枝算法
  • 23.1.5 估值函数
  • 23.1.6 置换表与哈希函数
  • 23.1.7 开局库与终局库
  • 23.2 井字棋——最简单的博弈游戏
  • 23.2.1 棋盘与棋子的数学模型
  • 23.2.2 估值函数与估值算法
  • 23.2.3 如何产生走法(落子方法)
  • 23.3 奥赛罗棋(黑白棋)
  • 23.3.1 棋盘与棋子的数学模型
  • 23.3.2 估值函数与估值算法
  • 23.3.3 搜索算法实现
  • 23.3.4 最终结果
  • 23.4 五子棋
  • 23.4.1 棋盘与棋子的数学模型
  • 23.4.2 估值函数与估值算法
  • 23.4.3 搜索算法实现
  • 23.4.4 最终结果
  • 23.5 总结
  • 23.6 参考资料
  • 附录A 算法设计的常用技巧
  • A.1 数组下标处理
  • A.2 一重循环实现两重循环的功能
  • A.3 棋盘(迷宫)类算法方向遍历
  • A.4 代码的一致性处理技巧
  • A.5 链表和数组的配合使用
  • A.6 “以空间换时间”的常用技巧
  • A.7 利用表驱动避免长长的switch-case
  • 附录B 一个棋类游戏的设计框架
  • B.1 代码框架的整体结构
  • B.2 代码框架的使用方法
  • 看完了
展开全部

评分及书评

4.4
5个评分

出版方

人民邮电出版社·图灵出品

图灵社区成立于2005年6月,由人民邮电出版社投资控股,以策划出版高质量的科技书籍为核心业务,主要出版领域包括计算机、电子电气、数学统计、科普等,通过引进国际高水平的教材、专著,以及发掘国内优秀原创作品等途径,为目标读者提供一流的内容。