《程序员的数学基础课》简介:
本书紧贴计算机领域,从程序员的需求出发,精心挑选了程序员真正用得上的数学知识,通过生动的案例来解读知识中的难点,使程序员更容易对实际问题进行数学建模,进而构建出更优化的算法和代码。本书共分为三大模块:“基础思想”篇梳理编程中常用的数学概念和思想,既由浅入深地精讲数据结构与数学中基础、核心的数学知识,又阐明数学对编程和算法的真正意义;“概率统计”篇以概率统计中核心的贝叶斯公式为基点,向上讲解随机变量、概率分布等基础概念,向下讲解朴素贝叶斯,并分析其在生活和编程中的实际应用,使读者真正理解概率统计的本质,跨越概念和应用之间的鸿沟;“线性代数”篇从线性代数中的核心概念向量、矩阵、线性方程入手,逐步深入分析这些概念是如何与计算机融会贯通以解决实际问题的。除了理论知识的阐述,本书还通过Python语言,分享了通过大量实践积累下来的宝贵经验和编码,使读者学有所用。 本书的内容从概念到应用,再到本质,层层深入,不但注重培养读者养成良好的数学思维,而且努力使读者的编程技术实现进阶,非常适合希望从本质上提升编程质量的中级程序员阅读和学习。
《程序员的数学基础课》目录:
第 一篇 基础思想 1
第 1章 二进制、余数和布尔代数 2
1.1 二进制 2
1.1.1 二进制计数法 2
1.1.2 二进制的位操作 3
1.1.3 负数的二进制表示 11
1.2 余数 15
1.2.1 求余和同余定理 15
1.2.2 哈希 16
1.2.3 奇偶校验 17
1.2.4 交叉验证 19
1.3 布尔代数 19
1.3.1 逻辑 19
1.3.2 集合 23
第 2章 迭代、数学归纳和递归 30
2.1 迭代法 30
2.1.1 迭代法简介 30
2.1.2 迭代法的应用 31
2.2 数学归纳法 37
2.3 递归 41
2.3.1 从数学归纳法到递归 42
2.3.2 分而治之 44
2.4 迭代法、数学归纳法和递归的关联 56
第3章 排列、组合和动态规划 58
3.1 排列 58
3.2 组合 62
3.3 动态规划 65
3.3.1 编辑距离 66
3.3.2 状态转移 67
3.3.3 状态转移方程和编程实现 70
3.3.4 动态规划解决最优组合 72
第4章 树和图 74
4.1 图和树的概念 74
4.2 树的常见应用 77
4.2.1 WordNet中的关联词 77
4.2.2 二叉树 81
4.3 树的深度优先搜索和遍历 83
4.3.1 前缀树的构建和查询 83
4.3.2 深度优先的实现 88
4.4 树和图的广度优先搜索和遍历 94
4.4.1 社交网络中的好友问题 94
4.4.2 实现社交好友推荐 99
4.4.3 如何更高效地求两个用户间的最短路径 104
4.4.4 更有效的嵌套型聚合 111
4.5 图中的最短路径 114
4.5.1 基于广度优先或深度优先搜索的方法 115
4.5.2 一个优化的版本:Dijkstra算法 116
第5章 编程中的数学思维 126
5.1 数据结构、编程语言和基础算法 126
5.1.1 数据结构 126
5.1.2 编程语句 128
5.1.3 基础算法 128
5.2 算法复杂度分析 129
5.2.1 复杂度分析的原理和法则 130
5.2.2 复杂度分析的案例 134
第二篇 概率统计 138
第6章 概率和统计基础 139
6.1 概论和统计对于编程的意义 139
6.1.1 概率和统计的概念 139
6.1.2概率和统计可以做什么 140
6.2 随机变量、概率分布和期望值 141
6.2.1 随机变量 141
6.2.2 概率分布 142
6.2.3 期望值 157
6.3 联合概率、条件概率和贝叶斯定理 159
6.3.1 联合概率、条件概率和边缘概率 159
6.3.2 贝叶斯定理 162
6.3.3 随机变量之间的独立性 163
第7章 朴素贝叶斯分类 165
7.1 原始信息的转换 165
7.2 朴素贝叶斯的核心思想 166
7.3 基于朴素贝叶斯算法的文本分类 170
7.3.1 文本分类系统的基本框架 170
7.3.2 自然语言的预处理 171
7.3.3 朴素贝叶斯模型的构建 174
7.3.4 朴素贝叶斯模型的预测 176
7.3.5 朴素贝叶斯分类的实现 177
第8章 马尔可夫过程 181
8.1 语言模型 181
8.1.1 链式法则 181
8.1.2 马尔可夫假设 181
8.1.3 模型推导 182
8.2 语言模型的应用 183
8.2.1 信息检索 183
8.2.2 中文分词 184
8.3 马尔可夫模型 184
8.4 隐马尔可夫模型 188
8.4.1 模型的原理 188
8.4.2 模型的求解 192
8.4.3 模型的实现 195
第9章 信息熵 200
9.1信息熵和信息增益 200
9.1.1 性格测试中的信息熵 200
9.1.2 信息增益 203
9.2 通过信息增益进行决策 204
9.2.1 通过信息熵挑选合适的问题 204
9.2.2 几种决策树算法 207
9.3 特征选择 209
9.3.1 特征选择 209
9.3.2 利用信息熵进行特征选择 209
9.3.3 利用卡方检验进行特征选择 210
第 10章 数据分布 212
10.1 特征变换 212
10.1.1 为什么需要特征变换 212
10.1.2 两种常见的特征变换方法 214
10.2 统计意义 217
10.2.1 显著性差异 219
10.2.2 统计假设检验和显著性检验 220
10.2.3 P值 220
10.2.4 不同的检验方法 221
10.3 拟合、欠拟合和过拟合及其处理 229
10.3.1 拟合、欠拟合和过拟合 229
10.3.2欠拟合和过拟合的处理 233
第三篇 线性代数 235
第 11章 线性代数基础 236
11.1 向量和向量空间 236
11.1.1 向量的概念 236
11.1.2 向量的运算 239
11.1.3 向量空间 244
11.2 矩阵 250
11.2.1 矩阵的运算 250
11.2.2 矩阵运算的几何意义 252
第 12章 文本处理中的向量空间模型 256
12.1 信息检索 256
12.1.1 信息检索的概念 256
12.1.2 信息检索中的向量空间模型 257
12.2 文本聚类 259
12.2.1 聚类算法的概念 259
12.2.2 使用向量空间进行聚类 260
12.3 文本分类 263
第 13章 对象间关系的刻画——矩阵 267
13.1 PageRank的矩阵实现 267
13.1.1 PageRank算法的回顾 267
13.1.2 简化PageRank公式 267
13.1.3 考虑随机跳转 269
13.1.4 代码的实现 270
13.2 用矩阵实现推荐系统 272
13.2.1 用矩阵实现推荐系统的核心思想 272
13.2.2 基于用户的过滤 272
13.2.3 基于物品的过滤 277
第 14章 矩阵的特征 279
14.1 主成分分析(PCA) 279
14.1.1 PCA的主要步骤 279
14.1.2 PCA背后的核心思想 286
14.2 奇异值分解(SVD) 288
14.2.1 方阵的特征分解 288
14.2.2 矩阵的奇异值分解 289
14.2.3 潜在语义分析和SVD 291
第 15章 回归分析 294
15.1 线性方程组 294
15.1.1 高斯消元法 295
15.1.2 使用矩阵实现高斯消元法 296
15.2 最小二乘法 299
15.2.1 通过观测值的拟合 300
15.2.2 最小二乘法 302
15.2.3 补充证明和解释 303
15.2.4 演算示例 305
第 16章 神经网络 311
16.1 神经网络的基本原理 311
16.2 基于TensorFlow的实现 317
16.3 Word2Vec 327
· · · · · ·