- ISBN:9787301168554
- 装帧:70g胶版纸
- 册数:暂无
- 重量:暂无
- 开本:16开
- 页数:336
- 出版时间:2020-08-01
- 条形码:9787301168554 ; 978-7-301-16855-4
本书特色
1.理解为主 本书以理解优先为出发点,采用讲故事和举例子的方式展开每一章的内容;不强调概念,对于某些相近的名词,只强调通过上下文“意会”,而不追究严格意义上的概念。 2.注重原理 本书详细讨论了每一个算法原理,对于某些数学背景较深的算法,会讲述必要的数学知识作为铺垫,在进行公式推导时也会尽可能详细地描述推导过程。 3.示例详尽 本书每一个算法都配有代码示例,有些章节会通过示例逐步对算法进行扩充并完善代码实现,使读者能够通过示例进一步了解算法。 4.图片丰富美观 一图胜千言,全书包含270余幅插图,用于形象地解释语言难以描述的过程,同时也有助于增加阅读的趣味性。
内容简介
本书从人们身边常见的整数讲起,逐步深入,介绍了数论、计数、图论、机器学习等领域的一些典型算法及其原理,尤其是算法背后的数学原理,可以让读者对这些算法有更深入的理解。 本书分为11章,涵盖的主要内容有整数的素因子分解、辗转相除、更相减损、扩展欧几里得算法和Karastuba算法; 密码体制和RSA体制的加密原理;递归与分治算法、动态编程技术、特征方程和特征根;算法复杂度分析、大O和大Θ的意义;穷举法、深度优先搜索、广度优先搜索、贪心策略;A?搜索算法;遗传算法;网络流、增广路径优选流算法;很小二乘法的原理、线性回归、非线性回归;基于正态分布的异常检测、局部异常因子算法;P/NP问题。 本书内容通俗易懂,案例丰富,实用性强,立足于详细解释算法的原理,尤其是算法背后的数学原理,适合于有一定 编程基础和算法基础的读者进阶阅读,也适合 Python程序员、Java程序员等其他编程爱好者阅读。
目录
1.1学生的代码和老师的代码2
1.2整除和余数3
1.3素数5
1.4整数分解8
1.5*大公约数11
1.6青蛙约会16
1.7*小公倍数20
1.8哥德巴赫猜想猜的是什么?22
1.9整数比自然数更多吗?23
1.10全体实数比±1之间的实数更多吗?23
1.11大整数的乘法24
1.12小结29
第2章密码疑云(数论)
2.1密码简史31
2.2被窃听与被冒充33
2.3密码体制34
2.4数字签名38
2.5数字证书40
2.6RSA体制40
2.7攻破心的壁垒49
2.8来自量子计算的挑战50
2.9小结51
第3章递归的逻辑(计数)
3.1递归关系式54
3.2不断繁殖的兔子——递归关系模型54
3.3递归关系的基本解法57
3.4递归算法61
3.5动态编程62
3.6递归与分治64
3.7打印一棵二叉树69
3.8分形之美73
3.9米诺斯的迷宫78
3.10小结87
第4章O和大Θ(算法复杂度)
4.1算法分析89
4.2运行比较法91
4.3数学分析法91
4.4大O 96
4.5大Θ101
4.6二分查找有多快?103
4.7跨床大桥能完成吗?105
4.8冒泡排序真的慢吗?108
4.9小结112
第5章搜索的策略(搜索算法)
5.1盲目搜索114
5.2八皇后问题115
5.3贪心策略122
5.4小偷的背包122
5.5骑士旅行126
5.6觐天宝匣上的拼图134
5.7小结142
第6章*短路径(A搜索)
6.1A搜索144
6.2通往基地的捷径147
6.3再战觐天宝匣162
6.4小结170
第7章退而求其次(遗传算法)
7.1小偷又来了172
7.2遗传算法172
7.3椭圆中的*大矩形184
7.4宿管员的烦恼189
7.5小结211
第8章网络流(图论)
8.1基本概念和术语213
8.2寻找*大流218
8.3补给线上的攻防战227
8.4姜子牙的粮道232
8.5缓解拥堵的高速公路234
8.6皇家飞行员的匹配236
8.7小结239
第9章拟合的策略(*小二乘法)
9.1问题的源头241
9.2*小二乘法242
9.3线性回归249
9.4非线性问题252
9.5中国人口总量的线性拟合260
9.6正态分布的拟合曲线264
9.7小结267
第10章异常检测(半监督学习和无监督学习)
10.1监督学习不灵了269
10.2基于一元正态分布的异常检测270
10.3基于多元正态分布的异常检测276
10.4局部异常因子算法285
10.5小结295
第11章浅谈P/NP问题(非确定性问题)
11.1水浒英雄卡的故事297
11.2这些奇怪的名字298
11.3如何面对NP问题301
11.4如果P=NP305
11.5小结306
附录
A同余和模运算307
B切割图片的代码308
C拉格朗日乘子法310
D多元线性回归的推导过程311
E多元函数的泰勒展开314
F*大似然原理315
节选
第1章重新认识整数(整数分解) 整数的概念来源于计数,它带有很多朴素、自然的性质。本章从整数分解的角度重新看待整数,详解了整数的素因子分解及其应用,并通过欧几里得算式介绍了辗转相除法、更相减损术和Karastuba算法的原理。 整数的概念来源于计数,它带有很多朴素、自然的性质。结绳记事(图11)大概是整数*早的应用,它发生在语言产生以后、文字出现之前的漫长岁月里。《周易·系辞》云:“上古结绳而治”;《春秋左传集解》云:“古者无文字,其有约誓之事,事大大其绳,事小小其绳,结之多少,随扬众寡,各执以相考,亦足以相治也。” 再看汉字中的“数”,从娄从攴(图12)。攴是以手持杖,娄是打了很多绳结的木棍,合起来就是拿着手杖去数绳子上有多少个绳结。数者,结绳而记之也。 图11结绳记事图12古汉字中的“数” 可以毫不夸张地说,整数奠定了数学的基石。19世纪的数学家克罗内克(Kronecker)曾经说过:“上帝创造了整数,其余都是人做的工作。”整数的定义如此简单自然,以至于总是让人忘记它背后的复杂。本章将从分解的视角重新认识整数。 1.1学生的代码和老师的代码 编程总是充满趣味,在学习了判断和循环后就可以编写一些有趣的代码。记得我初学编程时,老师曾出过一个题目:找出两个数的*大公约数。当时我在黑板上写下了自己的实现方式。 代码11学生的代码01def gcd_stu(a, b):02if a < b:03a, b = b, a04result = \[i for i in range(1, b + 1) if b %i == 0 and a %i == 0\]05return result.pop()运行结果是正确的。回到座位上,我为此高兴了2分钟。 后来老师写出了另一个实现。 代码12老师的代码01def gcd_teacher(a, b):02if a < b:03a, b = b, a04return a if b == 0 else gcd_teacher(b, a %b)我的**反应是:“嗯?” 遗憾的是,我当时并没有深究这段代码,只是简单地记住了这种方法,反正都是交给计算机计算,何必在乎快慢呢? 后来学了数据结构,知道了用大O评估算法效率,我这才开始重新审视那段寻找*大公约数的代码——它实际上使用了传说中的“辗转相除”,要真正弄清楚其来龙去脉,还要从整数说起…… 1.2整除和余数 我们都曾经用笨拙的声音从1数到10,这大概是人生中**次接触数学,稍大一点后懂得了零的概念,再后来知道了还有负数……这些美好的记忆都有整数相伴左右。随着年龄的增长和知识的扩充,我们知道了更多关于整数的知识,其中就包括整除和余数。 1.2.1欧几里得算式 数学中是以数轴分段的方式定义整除的,如果n是一个正整数,那么可以用n的倍数将数轴分成很多段,如图13所示。 图13用n的倍数将数轴分成很多段 如果将另一个整数m放在数轴上,那么m将正好位于qn和(q+1)n之间,其中q也是一个整数,如图14所示。 图14m位于qn和(q+1)n之间 如果m正好是n的整数倍,那么m=qn;否则可以写成m=qn+r的形式,其中qn是位于m左侧*近的n的整数倍,r是qn到m的整数距离。如果把两种情况合并,那么对于任意整数m和n,且n≠0,总是可以写成下面的形式: m=qn+r,0≤r对于特定的n来说,m的表达是唯一的,这种表达式叫作欧几里得算式,也叫作除法算式。 看上去很复杂,其实欧几里得算式有更常见的描述:如果m和n都是整数,且n≠0,那么总是存在整数q和r,0≤rm÷n=q……r 其中q是商,r是余数,如果r=0,则称m能够被n整除,或称n能整除m,记作n|m,其中“|”是整除符号。可见,欧几里得算式只不过是从代数上解释了整除和余数。 乘法和除法互为逆运算,把欧几里得算式写成乘法就变成了m的唯一的表达式: m=qn+r 示例11找出q和r(1)m=10,n=3; (2)m=3,n=10; (3)m=-11,n=5。 前两个比较简单。 (1)10=3×3+1,q=3,r=1。 (2)3=10×0+3,q=0,r=3。 图15在计算机 上计算-11%5第三个可能会出点差错。 (3)-11=5×(-2)-1,q=-2,r=-1。 在计算机上计算-11%5,结果如图15所示。 看来计算机认为是另一种答案:-11=5×(-3)+4,q=-3,r=4。 整除的定义终于显现出作用了,余数的取值范围是0≤r1.2.2整除的性质 如果a、b、c都是整数,则有以下3个被人们熟知的关于整除的性质。 性质1.1 如果a|b且a|c,则a|(b+c)。 性质1.2 如果a|b,则a|cb。 性质1.3如果a|b且b|c,则a|c。 注:由于0不能作为除数,所以a|b包含的默认条件是a≠0。 此外,还有一个推论:如果a、b、c都是整数,当a|b且a|c时,对于任意整数m和n,都有a|(mb+nc)。 除法和乘法互为逆运算,这些性质和推论其实都是根据乘法的分配律和结合律推导而来的,以性质1.1为例: ab and acb=pa,c=qa b+c=pa+qa=(p+q)a p+q是一个整数,根据欧几里得算式对整除的定义,得出a|(b+c)。
作者简介
孙博,苏州工业园区高技能领军人才,擅长人工智能、机器学习、算法和软件结构设计等,曾在CSDN等多个知名博客网站发表多篇技术文章,深受读者的喜爱。
-
有限与无限的游戏:一个哲学家眼中的竞技世界
¥37.4¥68.0 -
全图解零基础word excel ppt 应用教程
¥12.0¥48.0 -
机器学习
¥59.4¥108.0 -
深度学习的数学
¥43.5¥69.0 -
智能硬件项目教程:基于ARDUINO(第2版)
¥31.9¥65.0 -
硅谷之火-人与计算机的未来
¥14.3¥39.8 -
元启发式算法与背包问题研究
¥38.2¥49.0 -
AI虚拟数字人:商业模式+形象创建+视频直播+案例应用
¥62.9¥89.8 -
UNIX环境高级编程(第3版)
¥164.9¥229.0 -
剪映AI
¥52.8¥88.0 -
深度学习高手笔记 卷2:经典应用
¥90.9¥129.8 -
纹样之美:中国传统经典纹样速查手册
¥76.3¥109.0 -
UG NX 12.0数控编程
¥22.1¥45.0 -
MATLAB计算机视觉与深度学习实战(第2版)
¥90.9¥128.0 -
界面交互设计理论研究
¥30.8¥56.0 -
UN NX 12.0多轴数控编程案例教程
¥25.8¥38.0 -
微机组装与系统维护技术教程(第二版)
¥37.8¥43.0 -
明解C语言:实践篇
¥62.9¥89.8 -
Linux服务器架设实战(Linux典藏大系)
¥83.3¥119.0 -
Visual Basic 语言程序设计基础(第6版)
¥32.0¥45.0