kindle电子书

资源下载,尽在我的书库!
首页 > kindle电子书库 > 典藏频道 > 工农林医、科学科普、IT网络

算法的乐趣

  • 作者:[中] 王晓华
  • 体积:4.59 MB
  • 语言:中文
  • 日期:2017-06-17
  • 推荐:

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

电子书详细介绍

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

编辑推荐

本书特色 
■ CSDN超人气博主、算法专栏达人王晓华力作 
■ 淋漓尽致展现算法本质,广泛涵盖常用算法结构及其应用 
■ 一本书玩转算法,尽享算法乐趣 

算法之大,大到可以囊括宇宙万物的运行规律;算法之小,小到寥寥数行代码即可展现一个神奇的功能。算法的应用和乐趣在生活中无处不在: 
■ 历法和二十四节气计算使用的是霍纳法则和求解一元高次方程的牛顿迭代法; 
■ 音频播放器跳动的实时频谱背后是离散傅立叶变换算法; 
■ DOS时代著名的PCX图像文件格式使用的是简单有效的RLE压缩算法; 
■ RSA加密算法的光环之下是朴实的欧几里得算法、蒙哥马利算法和米勒-拉宾算法; 
■ 井字棋、黑白棋、五子棋和俄罗斯方块游戏背后是各种有趣的AI算法; 
■ 华容道游戏求解的简单穷举算法中还蕴藏着对棋盘状态的哈希算法; 
■ 遗传算法神秘不可测,但用遗传算法求解0-1背包问题只用了60多行代码…… 
…… 
一本书带你走进色彩缤纷的算法世界,让你尽享算法的乐趣。

作者简介

王晓华 
2005年毕业于华中科技大学,目前在中兴通讯上海研发中心从事光纤接入网通讯设备开发,担任EPON(以太网无源光网络)业务软件开发经理,参与开发的PON设备在全球部署过亿线,为数亿家庭提供宽带接入服务。 

业余时间喜欢研究算法和写作博客(http://blog.csdn.net/orbit),最大的乐趣就是用程序解决生活中的问题: 
■为了方便使用Visual Studio 6.0开发软件,曾特意编写并开源了一个tabbar插件; 
■为了文档安全,开发了一个基于layerFSD技术的透明文件加密系统; 
■使用Source Insight软件觉得不习惯,于是以外挂的形式开发了TabSiPlus插件……

目录

第1章 程序员与算法1 
1.1 什么是算法2 
1.2 程序员必须要会算法吗2 
1.2.1 一个队列引发的惨案3 
1.2.2 我的第一个算法5 
1.3 算法的乐趣在哪里7 
1.4 算法与代码8 
1.5 总结9 
1.6 参考资料9 
第2章 算法设计的基础10 
2.1 程序的基本结构10 
2.1.1 顺序执行10 
2.1.2 循环结构11 
2.1.3 分支和跳转结构13 
2.2 算法实现与数据结构16 
2.2.1 基本数据结构在算法设计中的应用16 
2.2.2 复杂数据结构在算法设计中的应用19 
2.3 数据结构和数学模型与算法的关系24 
2.4 总结25 
2.5 参考资料25 
第3章 算法设计的常用思想26 
3.1 贪婪法26 
3.1.1 贪婪法的基本思想27 
3.1.2 贪婪法的例子:0—1背包问题27 
3.2 分治法30 
3.2.1 分治法的基本思想30 
3.2.2 递归和分治,一对好朋友31 
3.2.3 分治法的例子:大整数Karatsuba乘法算法32 
3.3 动态规划34 
3.3.1 动态规划的基本思想34 
3.3.2 动态规划法的例子:字符串的编辑距离37 
3.4 解空间的穷举搜索40 
3.4.1 解空间的定义41 
3.4.2 穷举解空间的策略42 
3.4.3 穷举搜索的例子:Google方程式44 
3.5 总结46 
3.6 参考资料46 
第4章 阿拉伯数字与中文数字47 
4.1 中文数字的特点47 
4.1.1 中文数字的权位和小节48 
4.1.2 中文数字的零48 
4.2 阿拉伯数字转中文数字49 
4.2.1 一个转换示例49 
4.2.2 转换算法设计49 
4.2.3 算法实现50 
4.2.4 中文大写数字51 
4.3 中文数字转阿拉伯数字52 
4.3.1 转换的基本方法52 
4.3.2 算法实现52 
4.4 数字转换的测试用例54 
4.5 总结55 
4.6 参考资料55 
第5章 三个水桶等分8升水的问题56 
5.1 问题求解与思路57 
5.2 建立数学模型58 
5.2.1 状态的数学模型与状态树58 
5.2.2 倒水动作的数学模型59 
5.3 搜索算法60 
5.3.1 状态树的遍历60 
5.3.2 剪枝和重复状态判断61 
5.4 算法实现62 
5.5 总结64 
5.6 参考资料64 
第6章 妖怪与和尚过河问题65 
6.1 问题与求解思路66 
6.2 建立数学模型66 
6.2.1 状态的数学模型与状态树67 
6.2.2 过河动作的数学模型67 
6.3 搜索算法69 
6.3.1 状态树的遍历70 
6.3.2 剪枝和重复状态判断70 
6.4 算法实现71 
6.5 总结72 
6.6 参考资料73 
第7章 稳定匹配与舞伴问题74 
7.1 稳定匹配问题74 
7.1.1 什么是稳定匹配74 
7.1.2 Gale—Shapley算法原理75 
7.2 Gale—Shapley算法的应用实例77 
7.2.1 算法实现77 
7.2.2 改进优化:空间换时间80 
7.3 有多少稳定匹配81 
7.3.1 穷举所有的完美匹配81 
7.3.2 不稳定因素的判断算法82 
7.3.3 穷举的结果84 
7.4 二部图与二分匹配84 
7.4.1 最大匹配与匈牙利算法85 
7.4.2 带权匹配与Kuhn—Munkres算法88 
7.5 总结93 
7.6 参考资料94 
第8章 爱因斯坦的思考题95 
8.1 问题的答案96 
8.2 分析问题的数学模型96 
8.2.1 基本模型定义96 
8.2.2 线索模型定义98 
8.3 算法设计99 
8.3.1 穷举所有的组合结果99 
8.3.2 利用线索判定结果的正确性101 
8.4 总结103 
8.5 参考资料104 
第9章 项目管理与图的拓扑排序105 
9.1 AOV网和AOE网107 
9.2 拓扑排序108 
9.2.1 拓扑排序的基本过程108 
9.2.2 按照活动开始时间排序108 
9.3 关键路径算法111 
9.3.1 什么是关键路径112 
9.3.2 计算关键路径的算法113 
9.4 总结116 
9.5 参考资料116 
第10章 RLE行程长度压缩算法与PCX图像格式117 
10.1 RLE压缩算法117 
10.1.1 连续重复数据的处理117 
10.1.2 连续非重复数据的处理118 
10.1.3 算法实现118 
10.2 RLE与PCX图像文件格式121 
10.2.1 PCX文件格式121 
10.2.2 PCX_RLE算法122 
10.2.3256色PCX文件的解码和显示123 
10.3 总结124 
10.4 参考资料125 
第11章 算法与历法126 
11.1 格里历(公历)生成算法126 
11.1.1 格里历的历法规则126 
11.1.2 今天星期几127 
11.1.3 生成日历的算法131 
11.1.4 日历变更那点事儿132 
11.2 二十四节气的天文学计算134 
11.2.1 二十四节气的起源134 
11.2.2 二十四节气的天文学定义135 
11.2.3 VSOP—82/87行星理论137 
11.2.4 误差修正——章动141 
11.2.5 误差修正——光行差143 
11.2.6 用牛顿迭代法计算二十四节气144 
11.3 农历朔日(新月)的天文学计算146 
11.3.1 日月合朔的天文学定义147 
11.3.2 ELP—2000/82月球理论147 
11.3.3 误差修正——地球轨道离心率修正149 
11.3.4 误差修正——黄经摄动149 
11.3.5 月球地心视黄经和最后的修正——地球章动150 
11.3.6 用牛顿迭代法计算日月合朔151 
11.4 农历的生成算法152 
11.4.1 中国农历的起源与历法规则153 
11.4.2 中国农历的推算157 
11.4.3 一个简单的“年历”165 
11.5 总结166 
11.6 参考资料167 
第12章 实验数据与曲线拟合168 
12.1 曲线拟合168 
12.1.1 曲线拟合的定义168 
12.1.2 简单线性数据拟合的例子168 
12.2 最小二乘法曲线拟合169 
12.2.1 最小二乘法原理170 
12.2.2 高斯消元法求解方程组171 
12.2.3 最小二乘法解决“速度与加速度”实验172 
12.3 三次样条曲线拟合173 
12.3.1 插值函数174 
12.3.2 样条函数的定义174 
12.3.3 边界条件175 
12.3.4 推导三次样条函数176 
12.3.5 追赶法求解方程组179 
12.3.6 三次样条曲线拟合算法实现181 
12.3.7 三次样条曲线拟合的效果183 
12.4 总结184 
12.5 参考资料184 
第13章 非线性方程与牛顿迭代法185 
13.1 非线性方程求解的常用方法185 
13.1.1 公式法185 
13.1.2 二分逼近法186 
13.2 牛顿迭代法的数学原理187 
13.3 用牛顿迭代法求解非线性方程的实例188 
13.3.1 导函数的求解与近似公式188 
13.3.2 算法实现188 
13.4 参考资料189 
第14章 计算几何与计算机图形学190 
14.1 计算几何的基本算法190 
14.1.1 点与矩形的关系190 
14.1.2 点与圆的关系191 
14.1.3 矢量的基础知识191 
14.1.4 点与直线的关系194 
14.1.5 直线与直线的关系194 
14.1.6 点与多边形的关系196 
14.2 直线生成算法199 
14.2.1 什么是光栅图形扫描转换200 
14.2.2 数值微分法(DDA法)200 
14.2.3 Bresenham算法202 
14.2.4 对称直线生成算法(改进的Bresenham算法)204 
14.2.5 两步算法205 
14.2.6 其他直线生成算法207 
14.3 圆生成算法207 
14.3.1 圆的八分对称性208 
14.3.2 中点画圆法209 
14.3.3 改进的中点画圆法——Bresenham算法210 
14.3.4 正负判定画圆法211 
14.4 椭圆生成算法212 
14.4.1 中点画椭圆法213 
14.4.2 Bresenham椭圆算法215 
14.5 多边形区域填充算法217 
14.5.1 种子填充算法218 
14.5.2 扫描线算法(Scan—Line Filling)223 
14.5.3 改进的扫描线填充算法229 
14.5.4 边界标志填充算法233 
14.6 总结236 
14.7 参考资料236 
第15章 音频频谱和均衡器与傅立叶变换算法237 
15.1 实时频谱显示的原理2 
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章计算器程序与大整数计算 
第18章RSA算法——加密与签名 
第19章数独游戏 
第20章华容道游戏 
第21章A*寻径算法 
第22章俄罗斯方块游戏 
第23章博弈树与棋类游戏 
附录A算法设计的常用技巧 
附录B一个棋类游戏的设计框架

我来说两句

本书评论

共有 0 条评论
图书分类
我的书库手机端
帮助中心
会员登录 ×
新用户注册 ×