图书介绍
轻松学算法 互联网算法面试宝典PDF|Epub|txt|kindle电子书版本网盘下载
- 赵烨编著 著
- 出版社: 北京:电子工业出版社
- ISBN:9787121291944
- 出版时间:2016
- 标注页数:394页
- 文件大小:33MB
- 文件页数:410页
- 主题词:算法语言
PDF下载
下载说明
轻松学算法 互联网算法面试宝典PDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1章 数组、集合和散列表1
1.1 要用就要提前想好的数据结构——数组2
1.1.1 什么是数组2
1.1.2 数组的存储结构3
1.1.3 数组的特点6
1.1.4 数组的适用场景7
1.2 升级版数组——集合8
1.2.1 什么是集合8
1.2.2 集合的实现8
1.2.3 集合的特点13
1.2.4 集合的适用场景13
1.2.5 数组与变长数组的性能14
1.3 数组的其他应用——散列表14
1.3.1 什么是散列表15
1.3.2 对散列表函数产生冲突的解决办法16
1.3.3 散列表的存储结构17
1.3.4 散列表的特点18
1.3.5 散列表的适用场景20
1.3.6 散列表的性能分析21
1.4 小结28
第2章 栈、队列、链表29
2.1 汉诺塔游戏——栈30
2.1.1 什么是汉诺塔30
2.1.2 什么是栈31
2.1.3 栈的存储结构31
2.1.4 栈的特点36
2.1.5 栈的适用场景36
2.2 火爆的奶茶店——队列37
2.2.1 什么是队列37
2.2.2 队列的存储结构38
2.2.3 队列的特点43
2.2.4 队列的适用场景44
2.3 用栈实现队列45
2.3.1 用两个栈实现队列46
2.3.2 两个队列实现栈50
2.4 链表53
2.4.1 什么是链表54
2.4.2 链表的存储结构54
2.4.3 链表的操作55
2.4.4 链表的特点66
2.4.5 链表的适用场景66
2.4.6 链表的性能分析67
2.4.7 面试举例:如何反转链表68
2.5 链表其实也可以用数组模拟69
2.5.1 静态链表70
2.5.2 静态链表的实现70
2.5.3 静态链表的特点80
2.6 再谈汉诺塔81
2.6.1 汉诺塔的移动原理81
2.6.2 汉诺塔的递归实现82
第3章 排序算法84
3.1 算法基础85
3.1.1 时间复杂度85
3.1.2 空间复杂度88
3.1.3 稳定性88
3.2 快而简单的排序——桶排序89
3.2.1 举个例子89
3.2.2 什么是桶排序90
3.2.3 桶排序的实现90
3.2.4 桶排序的性能及特点92
3.2.5 桶排序的适用场景93
3.3 咕嘟咕嘟的冒泡排序94
3.3.1 什么是冒泡排序94
3.3.2 冒泡排序的原理94
3.3.3 冒泡排序的实现96
3.3.4 冒泡排序的特点及性能99
3.3.5 冒泡排序的适用场景99
3.3.6 冒泡排序的改进方案100
3.4 最常用的快速排序100
3.4.1 什么是快速排序101
3.4.2 快速排序的原理101
3.4.3 快速排序的实现105
3.4.4 快速排序的特点及性能107
3.4.5 快速排序的适用场景108
3.4.6 快速排序的优化108
3.5 简单的插入排序109
3.5.1 什么是插入排序110
3.5.2 插入排序的原理110
3.5.3 插入排序的实现112
3.5.4 插入排序的特点及性能114
3.5.5 插入排序的适用场景115
3.6 直接插入的改进——希尔排序115
3.6.1 什么是希尔排序116
3.6.2 希尔排序的原理116
3.6.3 希尔排序的实现118
3.6.4 希尔排序的特点及性能120
3.6.5 希尔排序的适用场景121
3.7 简单选择排序121
3.7.1 什么是选择排序122
3.7.2 简单选择排序的原理122
3.7.3 简单选择排序的实现123
3.7.4 选择排序的特点及性能125
3.7.5 简单选择排序的优化125
3.7.6 选择排序的适用场景126
3.8 小结126
第4章 搜索,没那么难128
4.1 最先想到的——顺序查找129
4.1.1 最先想到的129
4.1.2 顺序查找的原理与实现129
4.1.3 顺序查找的特点及性能分析131
4.1.4 顺序查找的适用场景132
4.2 能不能少查点——二分查找133
4.2.1 某些特殊情况的查找需求133
4.2.2 二分查找的原理及实现133
4.2.3 二分查找的优化137
4.2.4 二分查找的特点及性能分析138
4.2.5 二分查找的适用场景139
4.2.6 我是来还债的——之前欠的二分插入排序139
4.3 行列递增的矩阵查找——二分查找思维拓展141
4.3.1 一道题142
4.3.2 几个解法142
4.3.3 其他拓展153
4.4 分块查找154
4.4.1 每次插入元素都要有序吗154
4.4.2 什么是分块查找155
4.4.3 分块查找的原理及实现155
4.4.4 分块查找的特点与性能分析159
4.4.5 分块查找的适用场景160
4.5 查找算法小结161
4.6 搜索引擎与倒排索引162
4.6.1 什么是搜索引擎162
4.6.2 倒排索引162
4.6.3 索引实例163
4.6.4 倒排索引的关键字提取164
4.6.5 商业索引的其他拓展164
第5章 树166
5.1 树的定义及存储结构167
5.1.1 什么是树167
5.1.2 其他相关术语168
5.1.3 都有哪些树170
5.1.4 树的存储结构及实现170
5.2 二叉树173
5.2.1 什么是二叉树173
5.2.2 还有两种特殊的二叉树173
5.2.3 二叉树的实现175
5.2.4 二叉树的遍历185
5.2.5 完全二叉树187
5.3 二叉树的查找算法188
5.3.1 二叉查找树188
5.3.2 平衡二叉树198
5.4 B-树、B+树202
5.4.1 什么是B-树203
5.4.2 什么是B+树204
5.4.3 B-树、B+树的特点及性能分析205
5.5 在MySQL数据库中是如何应用B+树的206
5.6 哈夫曼树209
5.6.1 几个术语209
5.6.2 什么是哈夫曼树209
5.6.3 哈夫曼树的构造211
5.6.4 哈夫曼编码及解码213
5.7 堆215
5.7.1 什么是堆215
5.7.2 堆的基本操作216
5.7.3 堆的性能分析221
5.7.4 堆排序222
5.8 红黑树224
5.8.1 什么是红黑树224
5.8.2 红黑树的特点与优势224
第6章 图226
6.1 图的定义及相关术语227
6.1.1 什么是图227
6.1.2 图的分类227
6.1.3 图的相关术语228
6.2 图的表示与存储方式229
6.2.1 邻接矩阵229
6.2.2 邻接表234
6.3 更多的图237
6.3.1 连通图238
6.3.2 强连通图238
6.4 深度优先遍历与广度优先遍历238
6.4.1 深度优先遍历239
6.4.2 广度优先遍历248
6.4.3 两种遍历方法的对比253
6.5 最短路径254
6.5.1 带权图254
6.5.2 Dijkstra算法255
6.5.3 Floyd算法269
第7章 字符串272
7.1 字符及字符串简介273
7.1.1 什么是字符273
7.1.2 什么是字符串273
7.2 字符的全排列275
7.2.1 问题描述及分析275
7.2.2 最先想到的275
7.2.3 利用字典序排列278
7.3 反转字符串283
7.3.1 问题描述及分析283
7.3.2 最先想到的283
7.3.3 对换反转法285
7.3.4 拓展——旋转字符串287
7.4 判断回文288
7.4.1 问题描述及分析288
7.4.2 对半判断289
7.5 寻找最大的回文子串290
7.5.1 问题描述及分析290
7.5.2 遍历实现291
7.6 将字符串转换为数字293
7.6.1 问题描述及分析293
7.6.2 解决293
7.7 判断字符串包含的问题297
7.7.1 问题描述及分析297
7.7.2 非常简单的解决思路297
7.7.3 利用排序进行优化299
7.7.4 投机取巧的素数方案302
7.7.5 用散列表进行实现304
7.7.6 用位运算进行实现305
第8章 数组还有好多玩法308
8.1 从数组中找出其和为指定值的两个数309
8.1.1 问题描述及分析309
8.1.2 最简单的办法309
8.1.3 一切为了速度310
8.1.4 排序总是好的选择311
8.1.5 还能更好313
8.2 找出连加值最大的子数组315
8.2.1 问题描述及分析315
8.2.2 暴力穷举法316
8.2.3 动态规划法319
8.2.4 问题拓展321
8.3 数组正负值排序323
8.3.1 问题描述及分析323
8.3.2 最直观的解法324
8.3.3 借鉴简单插入排序325
8.3.4 借鉴快速排序327
8.3.5 拓展329
8.4 将数组随机打乱顺序329
8.4.1 问题描述及分析329
8.4.2 随便糊弄一下330
8.4.3 插入排序的思想又来了331
8.5 数组赋值333
8.5.1 问题描述及分析333
8.5.2 分解计算333
8.6 寻找旋转数组的拐点335
8.6.1 问题描述及分析335
8.6.2 最简单的方法336
8.6.3 利用“有序”337
8.7 荷兰国旗问题339
8.7.1 问题描述及分析339
8.7.2 排序法340
8.7.3 快速排序带给人的灵感340
第9章 查找又来了344
9.1 出现次数超过一半的数字345
9.1.1 问题描述及分析345
9.1.2 排序法345
9.1.3 散列表347
9.1.4 删除法349
9.1.5 更优的解法349
9.2 寻找缺少的数字352
9.2.1 问题描述及分析352
9.2.2 借助快速排序352
9.2.3 借助散列表实现354
9.2.4 投机取巧法355
9.2.5 思路拓展357
9.3 在10亿个数中找出最大的1万个数357
9.3.1 问题描述及分析357
9.3.2 拍脑袋想问题358
9.3.3 借助快速排序358
9.3.4 不想都放入内存358
9.3.5 传说中的大顶堆359
9.3.6 拓展——找出数组中第k大的数359
第10章 更多363
10.1 不使用额外的空间交换两个数364
10.1.1 问题描述364
10.1.2 分析问题364
10.1.3 解决问题364
10.2 拿乒乓球的问题365
10.2.1 问题描述365
10.2.2 分析问题365
10.2.3 解决问题365
第11章 实现一些集合类367
11.1 栈(Stack)的实现368
11.1.1 实现前的思考368
11.1.2 实现栈368
11.1.3 参考JDK的实现372
11.2 变长数组(ArrayList)的实现372
11.2.1 实现前的思考372
11.2.2 实现变长数组373
11.2.3 参考JDK的实现380
11.3 散列表(HashMap)的实现381
11.3.1 实现前的思考381
11.3.2 实现散列表381
11.3.3 参考JDK的实现389
第12章 方向390
12.1 算法的一些常用思想391
12.1.1 分治法391
12.1.2 动态规划391
12.1.3 贪心算法391
12.1.4 回溯法392
12.1.5 分支限界法392
12.2 新兴算法392
12.2.1 加密算法392
12.2.2 商业算法393
12.3 其他算法393
12.3.1 基数估计算法393
12.3.2 蚁群算法394