算法笔记
内容介绍
《算法笔记》详细介绍了若干意见常用算法,既包含排列、哈希等基本算法,也包含无约束提升、插值与拟合等数值计算方法。
《算法笔记》在详细介绍算法的一起,融合了创作者自个对数学课背景图、应用领域的了解,有利于小读者掌握算法的核心内容。
《算法笔记》尽量地绕开了以应考为导向性的填鸭式解读,务求造成小读者的兴趣爱好并扩张其视线,比如在详细介绍哈希时,解读了如何把哈希的算法观念应用于相似度检索、负载均衡等好几个实际上难题中;又当在详细介绍高斯消去法时,解读了有关的数学课基础理论及程序编写建立上的主要方法,并将其应用于对规模性稀少线性方程组的解微分方程,等等等等。
《算法笔记》朝向有必须高等数学、计算机语言基本及对算法有分步知道的小读者,包含高等学校的大学生、程序猿、算法剖析工作人员及设计方案工作人员等,致力于协助小读者深化学习培训算法,了解与算法有关的基础理论基本和运用案例。
目录
- 第1 章 排序1
- 1.1 比较排序. 1
- 1.1.1 梳排序. 2
- 1.1.2 堆排序. 4
- 1.1.3 归并排序 5
- 1.1.4 快速排序 8
- 1.1.5 内省排序 10
- 1.1.6 Timsort 11
- 1.2 非比较排序. 14
- 1.2.1 桶排序. 14
- 1.2.2 基数排序 15
- 1.3 总结 16
- 第2 章 哈希17
- 2.1 基本概念与实现.. 17
- 2.1.1 哈希函数 17
- 2.1.2 哈希表. 19
- 2.2 哈希的应用. 20
- 2.2.1 相似性搜索.. 20
- 2.2.2 信息安全 23
- 2.2.3 比特币. 25
- 2.2.4 负载均衡 26
- 第3 章 动态规划与近似算法29
- 3.1 基本概念. 29
- 3.1.1 动态规划 29
- 3.1.2 计算复杂性.. 30
- 3.2 字符串的编辑距离. 30
- 3.2.1 问题引入 31
- 3.2.2 动态规划算法.. 33
- 3.2.3 滚动数组优化.. 35
- 3.2.4 上界限制 36
- 3.2.5 解的回溯 37
- 3.2.6 分治算法 38
- 3.2.7 多个字符串的编辑距离. 41
- 3.3 子集和问题. 43
- 3.3.1 问题引入 43
- 3.3.2 子集和问题的动态规划算法 43
- 3.3.3 最优化问题.. 44
- 3.3.4 滚动数组的技巧. 45
- 第4 章 高斯消去法59
- 4.1 问题引入. 59
- 4.2 矩阵编程基础 60
- 4.3 三角方程组. 62
- 4.3.1 三角矩阵 62
- 4.3.2 三角矩阵的存储. 63
- 4.3.3 三角方程组求解. 64
- 4.4 高斯消去法. 66
- 4.4.1 算法概述 66
- 4.4.2 高斯变换 68
- 4.4.3 LU 分解.. 69
- 4.4.4 Cholesky 分解.. 70
- 4.5 主元选择. 71
- 4.5.1 列选主元 71
- 4.5.2 全选主元 73
- 4.5.3 主元与计算量.. 74
- 4.6 稀疏矩阵的编程基础 75
- 4.6.1 稀疏向量 76
- 4.6.2 稀疏矩阵 79
- 4.7 稀疏LU 分解. 82
- 4.7.1 Markowitz 算法.. 82
- 4.7.2 最小度算法.. 83
- 第5 章 图论与线性规划86
- 5.1 线性规划基础 86
- 5.1.1 Fourier Motzkin 消去法. 89
- 5.1.2 基 91
- 5.1.3 单纯形方法.. 93
- 5.1.4 对偶.. 95
- 5.2 全单模矩阵. 98
- 5.2.1 关联矩阵 98
- 5.2.2 全单模矩阵.. 99
- 5.2.3 全单模矩阵与图论 100
- 5.2.4 全单模矩阵与线性规划. 103
- 5.3 图论中的经典问题. 104
- 5.3.1 单源最短路问题. 104
- 5.3.2 二分图的最大匹配与最小覆盖问题 106
- 5.3.3 最大流与最小割问题.. 108
- 5.4 延伸阅读. 109
- 5.4.1 逐步线性规划.. 109
- 5.4.2 半正定规划.. 111
- 第6 章 无约束优化113
- 6.1 单峰函数的最值.. 114
- 6.1.1 三分法. 115
- 6.1.2 对分法. 115
- 6.1.3 黄金分割法.. 116
- 6.1.4 小结.. 117
- 6.2 无导数优化方法.. 118
- 6.2.1 模式搜索法.. 118
- 6.2.2 坐标下降法.. 119
- 6.2.3 代理模型法.. 120
- 6.3 导数优化方法 121
- 6.3.1 线搜索. 122
- 6.3.2 梯度下降法.. 123
- 6.3.3 共轭梯度法.. 124
- 6.3.4 牛顿法. 127
- 6.3.5 拟牛顿法 128
- 6.4 最小二乘. 132
- 6.4.1 线性最小二乘.. 133
- 6.4.2 非线性最小二乘. 133
- 第7 章 迭代法136
- 7.1 线性方程组的迭代法 136
- 7.1.1 一阶定常格式迭代法.. 136
- 7.1.2 Krylov 子空间算法 142
- 7.1.3 无约束优化方法. 147
- 7.2 非线性方程组的迭代法 147
- 7.2.1 不动点迭代.. 148
- 7.2.2 Newton-Raphson 迭代. 149
- 7.2.3 无约束优化方法. 152
- 第8 章 插值与拟合153
- 8.1 插值 153
- 8.1.1 常见的插值算法. 154
- 8.1.2 插值的应用.. 158
- 8.2 拟合 163
- 8.2.1 常见的拟合算法. 164
- 8.2.2 拟合的应用.. 166
- 参考文献169
互联网技术、数字技术等广泛应用,算法社会正飞速而来。一方面,信息日益碎片化,信息获取日益低效化,社会已进入信息过载时代;另一方面,个体与群体间在信息技术与信息能力方面的差异使信息鸿沟进一步扩大。大数据通过数字画像使算法能根据个人职业、收入、喜好等精准定制信息、推送服务,或提供基于算法的社会决策或商业服务。在评分社会(Scored Society)中,算法的快速与高效使算法得以广泛使用,逐渐形成算法接管社会的现象并决定着社会的诸多事务。[6]但因算法自身的因素或突发性错误等瑕疵使算法运行过程中会出现偏差,即算法偏见,也被称为算法歧视,是指那些可以造成不公平、不合理结果的系统性可重复出现的错误,其最常见的是对不同人有不同的结果,或者是给两个相同或相似条件的人不同结果。如算法设计者刻意编写带有主观性的程序将出现算法操纵现象。
算法分析 计数排序是一个稳定的排序算法。当输入的元素是 n 个 0到 k 之间的整数时,时间复杂度是O(n+k),空间复杂度也是O(n+k),其排序速度快于任何比较排序算法。当k不是很大并且序列比较集中时,计数排序是一个很有效的排序算法。 桶排序(Bucket Sort) 插入段落 桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。桶排序 (Bucket sort)的工作的原理:假设输入数据服从均匀分布,将数据分到有限数量的桶里,每个桶再分别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排)
算法分析 插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 希尔排序(Shell Sort) 1959年Shell发明,第一个突破O(n2)的排序算法,是简单插入排序的改进版。它与插入排序的不同之处在于,它会优先比较距离较远的元素。希尔排序又叫缩小增量排序。 算法描述 先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算法描述: 选择一个增量序列t1,t2,…,tk,其中ti 按增量序列个数k,对序列进行k 趟排序; 每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。