这一章是对其他算法的简单介绍。这章的大部分东西我都是不懂的Orz。
第十一章 接下来如何做
树
- 二叉查找树:对于其中的每个节点,左子节点的值都比它小,而右子节点的值都比它大。二叉查找树查找查找方式几乎与二分查找一样。
- B树?
- 红黑树?
- 堆?
- 伸展树?
反向索引
反过来索引
- 常规文档是文档===>关键字,反向索引(倒排索引)是关键字===>文档
傅里叶变换
- 给它一杯沙冰,它能告诉你其中包含哪些成分。可使用创建音乐识别软件(分离频率)。
并行算法
- 并行性管理开销:排序需要时间,而合并也是需要时间的。
- 负载均衡:每个任务执行者的执行效率可能不同,如何合理的安排?
MapReduce
分布式算法 维基百科
当前的软件实现是指定一个Map(映射)函数,用来把一组键值对映射成一组新的键值对,指定并发的Reduce(归纳)函数,用来保证所有映射的键值对中的每一个共享相同的键组。
分布式算法非常适合短时间内完成海量工作,其中MapReduce基于两个简单的理念:映射(map)函数和归并(reduce)函数。
映射函数
接受一个数组,并对其中的每个元素执行同样的处理。如js中的Array.prototype.map
。
归并函数
理念为将很多项归并为一项。
Array.prototype.reduce
布隆过滤器和HyperLogLog
我们面临一个问题,使用散列表建立数万亿个数据的索引时,散列表会非常大,需要占用大量的存储空间。
布隆过滤器
布隆过滤器时一种概率型数据结构,提供的答案有可能不对,但很可能是正确的。当然这种可能不对是会多报但不会漏报的。
HyperLogLog
类似于布隆过滤器的算法。
SHA算法
SHA是一个散列函数,给定字符串,返回其散列值。 密码加密:sha256 + 盐
局部敏感的散列算法
SHA算法有一个特性为局部不敏感,即微小修改的散列结果是截然不同的,无法通过散列结果的相似性比较原有数据的相似性。 那么局部敏感的算法有Simhash,可比较相似性。
Diffe-Hellman 密钥交换
非对称加密
使用两个密钥:公钥和私钥。公钥公开,有人对你发送消息时,使用公钥加密,加密后的消息你使用私钥进行解密。 可扩展阅读https
线性规划
线性规划使用Simplex算法,所有的图算法都可使用线性规划来实现。