编辑推荐
这是一本零基础就能读懂的算法书籍,读者不需要因为自己没有语言基础而畏惧。书籍的第2章便是一个C语言的入门教程,内容非常易懂,并且十分实用,阅读完这章就可以对本书需要的C语言基础有一个较好的掌握。
本书已经覆盖了大部分基础经典算法,不仅可以作为考研机试和PAT的学习教材,对其他的一些算法考试(例如CCF的CSP考试)或者考研初试的数据结构科目的学习和理解也很有帮助,甚至仅仅想学习经典算法的读者也能从本书中学到许多知识,本书还有配套的《算法笔记上机训练实战指南》
本书的作者是同样经历过考研机试和各类算法考试的专家型学长,知晓这类考试中的痛点,以及考生在学习算法时容易产生困惑的地方,因此可以把本书看作是学长为你奉献的满满的经验干货,这是有价值的东西。
本书的试印版本献给了浙大考研学子,并令当年的浙大考研机试平均分增加了十多分,收获了考生的大量好评。但作者并没有止步于此,经过了半年多时间的内容完善和补充之后,新的版本在新一年的考研机试中再次获得了考生的一致赞美。最后,在经过精心整理之后,书籍终于定稿,并编撰成书。
我们知道,纸质书籍的一个弱点就在于不能像软件一样随时更新内容,但本书采用了与二维码相结合的方式,使得本书变为能够随时更新内容的书籍,读者也可以随时从二维码中找到勘误。这种作者和读者能够相互沟通的方式让书籍变“活”了,也能够帮助提升读者对知识的理解。
内容简介
《算法笔记》内容包括:C/C快速入门、入门模拟、算法初步、数学问题、C标准模板库(STL)、数据结构专题(二章)、搜索专题、图算法专题、动态规划专题、字符串专题、专题扩展。《算法笔记》印有二维码,用来实时更新、补充内容及发布勘误的。
《算法笔记》可作为计算机专业研究生入学考试复试上机、各类算法等级考试(如PAT、CSP等)的辅导书,也可作为“数据结构”科目的考研教材及辅导书内容的补充。《算法笔记》还是学习C语言、数据结构与算法的入门辅导书,非常适合零基础的学习者对经典算法进行学习。
章节目录
前言
第1章如何使用本书 1
1.1本书的基本内容 1
1.2如何选择编程语言和编译器 1
1.3在线评测系统 2
1.4常见的评测结果 3
1.5如何高效地做题 4
第2章C/C快速入门 5
2.1基本数据类型 7
2.1.1变量的定义 7
2.1.2变量类型 7
2.1.3强制类型转换 11
2.1.4符号常量和const常量 12
2.1.5运算符 14
2.2顺序结构 17
2.2.1赋值表达式 17
2.2.2使用scanf和printf输入/输出 18
2.2.3使用getchar和putchar输入/输出字符 23
2.2.4注释 24
2.2.5typedef 24
2.2.6常用math函数 25
2.3选择结构 28
2.3.1if语句 28
2.3.2if语句的嵌套 31
2.3.3switch语句 32
2.4循环结构 34
2.4.1while语句 34
2.4.2do while语句 35
2.4.3for语句 36
2.4.4break和continue语句 38
2.5数组 39
2.5.1一维数组 39
2.5.2冒泡排序 41
2.5.3二维数组 43
2.5.4memset——对数组中每一个元素赋相同的值 46
2.5.5字符数组 47
2.5.6string.h头文件 50
2.5.7sscanf与sprintf 53
2.6函数 55
2.6.1函数的定义 55
2.6.2再谈main函数 58
2.6.3以数组作为函数参数 58
2.6.4函数的嵌套调用 59
2.6.5函数的递归调用 60
2.7指针 61
2.7.1什么是指针 61
2.7.2指针变量 62
2.7.3指针与数组 63
2.7.4使用指针变量作为函数参数 65
2.7.5引用 68
2.8结构体(struct)的使用 70
2.8.1结构体的定义 70
2.8.2访问结构体内的元素 71
2.8.3结构体的初始化 72
2.9补充 74
2.9.1cin与cout 74
2.9.2浮点数的比较 75
2.9.3复杂度 78
2.10黑盒测试 80
2.10.1单点测试 80
2.10.2多点测试 80
第3章入门篇(1)——入门模拟 85
3.1简单模拟 85
3.2查找元素 87
3.3图形输出 89
3.4日期处理 91
3.5进制转换 93
3.6字符串处理 95
第4章入门篇(2)——算法初步 99
4.1排序 99
4.1.1选择排序 99
4.1.2插入排序 100
4.1.3排序题与sort函数的应用 101
4.2散列 106
4.2.1散列的定义与整数散列 106
4.2.2字符串hash初步 109
4.3递归 111
4.3.1分治 111
4.3.2递归 112
4.4贪心 118
4.4.1简单贪心 118
4.4.2区间贪心 122
4.5二分 124
4.5.1二分查找 124
4.5.2二分法拓展 131
4.5.3快速幂 134
4.6two pointers 137
4.6.1什么是two pointers 137
4.6.2归并排序 139
4.6.3快速排序 142
4.7其他高效技巧与算法 146
4.7.1打表 146
4.7.2活用递推 147
4.7.3随机选择算法 149
第5章入门篇(3)——数学问题 152
5.1简单数学 152
5.2最大公约数与最小公倍数 154
5.2.1最大公约数 154
5.2.2最小公倍数 156
5.3分数的四则运算 156
5.3.1分数的表示和化简 157
5.3.2分数的四则运算 157
5.3.3分数的输出 159
5.4素数 159
5.4.1素数的判断 160
5.4.2素数表的获取 160
5.5质因子分解 165
5.6大整数运算 170
5.6.1大整数的存储 170
5.6.2大整数的四则运算 171
5.7扩展欧几里得算法 176
5.8组合数 181
5.8.1关于n!的一个问题 181
5.8.2组合数的计算 183
第6章C标准模板库(STL)介绍 191
6.1vector的常见用法详解 191
6.2set的常见用法详解 197
6.3string的常见用法详解 202
6.4map的常用用法详解 213
6.5queue的常见用法详解 218
6.6priority_queue的常见用法详解 221
6.7stack的常见用法详解 227
6.8pair的常见用法详解 230
6.9algorithm头文件下的常用函数 232
6.9.1max()、min()和abs() 232
6.9.2swap() 233
6.9.3reverse() 233
6.9.4next_permutation() 234
6.9.5fill() 235
6.9.6sort() 235
6.9.7lower_bound()和upper_bound() 242
第7章提高篇(1)——数据结构专题(1) 245
7.1栈的应用 245
7.2队列的应用 251
7.3链表处理 253
7.3.1链表的概念 253
7.3.2使用malloc函数或new运算符为链表结点分配内存空间 254
7.3.3链表的基本操作 256
7.3.4静态链表 260
第8章提高篇(2)——搜索专题 269
8.1深度优先搜索(DFS) 269
8.2广度优先搜索(BFS) 274
第9章提高篇(3)——数据结构专题(2) 283
9.1树与二叉树 283
9.1.1树的定义与性质 283
9.1.2二叉树的递归定义 284
9.1.3二叉树的存储结构与基本操作 285
9.2二叉树的遍历 289
9.2.1先序遍历 289
9.2.2中序遍历 290
9.2.3后序遍历 291
9.2.4层序遍历 292
9.2.5二叉树的静态实现 298
9.3树的遍历 302
9.3.1树的静态写法 302
9.3.2树的先根遍历 303
9.3.3树的层序遍历 303
9.3.4从树的遍历看DFS与BFS 304
9.4二叉查找树(BST) 310
9.4.1二叉查找树的定义 310
9.4.2二叉查找树的基本操作 310
9.4.3二叉查找树的性质 314
9.5平衡二叉树(AVL树) 319
9.5.1平衡二叉树的定义 319
9.5.2平衡二叉树的基本操作 320
9.6并查集 328
9.6.1并查集的定义 328
9.6.2并查集的基本操作 328
9.6.3路径压缩 330
9.7堆 335
9.7.1堆的定义与基本操作 335
9.7.2堆排序 339
9.8哈夫曼树 342
9.8.1哈夫曼树 342
9.8.2哈弗曼编码 345
第10章提高篇(4)——图算法专题 347
10.1图的定义和相关术语 347
10.2图的存储 348
10.2.1邻接矩阵 348
10.2.2邻接表 348
10.3图的遍历 350
10.3.1采用深度优先搜索(DFS)法遍历图 350
10.3.2采用广度优先搜索(BFS)法遍历图 359
10.4最短路径 367
10.4.1Dijkstra算法 367
10.4.2Bellman-Ford算法和SPFA算法 391
10.4.3Floyd算法 398
10.5最小生成树 400
10.5.1最小生成树及其性质 400
10.5.2prim算法 401
10.5.3kruskal算法 409
10.6拓扑排序 414
10.6.1有向无环图 414
10.6.2拓扑排序 415
10.7关键路径 417
10.7.1AOV网和AOE网 417
10.7.2最长路径 419
10.7.3关键路径 419
第11章提高篇(5)——动态规划专题 425
11.1动态规划的递归写法和递推写法 425
11.1.1什么是动态规划 425
11.1.2动态规划的递归写法 425
11.1.3动态规划的递推写法 426
11.2最大连续子序列和 429
11.3最长不下降子序列(LIS) 432
11.4最长公共子序列(LCS) 434
11.5最长回文子串 436
11.6DAG最长路 439
11.7背包问题 442
11.7.1多阶段动态规划问题 442
11.7.201背包问题 443
11.7.3完全背包问题 446
11.8总结 447
第12章提高篇(6)——字符串专题 449
12.1字符串hash进阶 449
12.2KMP算法 455
12.2.1next数组 456
12.2.2KMP算法 458
12.2.3从有限状态自动机的角度看待KMP算法 463
第13章专题扩展 465
13.1分块思想 465
13.2树状数组(BIT) 470
13.2.1lowbit运算 470
13.2.2树状数组及其应用 470
参考文献 481
算法笔记是2016年由机械工业出版社出版,作者曾磊。
得书感谢您对《算法笔记》关注和支持,如本书内容有不良信息或侵权等情形的,请联系本网站。