1 树
1二叉查找树
二叉查找树的左边节点都比他小,右边节点都比他大从根节点开始逐步往下找
二叉查找树的查找,删除,插入速度都是log n
而数组只有查找速度是long n 删除和插入的速度是n
缺点:遇到倾斜的树时 现率不高
2反向索引
一个散列表,将单词映射到包含它的页面。这种数据结构被称为反向索引(inverted index),
3傅里叶转换
傅里叶变换非常适合用于处理信号
4并行算法
并行性管理开销
负载均衡
并行算法设计和提升比较困恼
5MapReduce(分布式算法)
可通过流行的开源工具Apache Hadoop来使用它。
分布式算法非常适合用于在短时间内完成海量工作,其中的MapReduce基于两个简单的理念:映射(map)函数和归并(reduce)函数
map(func,arr)
reduce(func,arr)
6布隆过滤器和HyperLogLog
布隆过滤器提供了解决之道。布隆过滤器是一种概率型数据结构,它提供的答案有可能不对,但很可能是正确的
可能出现错报的情况,即Google可能指出“这个网站已搜集”,但实际上并没有搜集
不可能出现漏报的情况,即如果布隆过滤器说“这个网站未搜集”,就肯定未搜集。
布隆过滤器的优点在于占用的存储空间很少
HyperLogLog近似地计算集合中不同的元素数,与布隆过滤器一样,它不能给出准确的答案,但也八九不离十,而占用的内存空间却少得多。
面临海量数据且只要求答案八九不离十时,可考虑使用概率型算法!
11.7 SHA
有一个键将其相关的值放到数组中 使用散列函数来确定应该将这个值放到散列函数的什么位置
7比较文件
另一种散列函数是安全散列算法(secure hash algorithm,SHA)函数
给定一个特定的字符串 返回其散列值
对于每个不同的字符串,SHA生成的散列值都不同。
11.8 局部敏感的散列算法 可使用Simhash 这样可以根据两个散列值来判断两个字符串的相似度
11.9 Diffie-Hellman 密钥交换
Diffie-Hellman算法优势
要破解加密的消息比登天还难
双方无需知道加密算法。他们不必会面协商要使用的加密算法。
Diffie-Hellman使用两个密钥:公钥和私钥。
10 线性规划
线性规划使用Simplex算法
https://www.cnblogs.com/ScratchingBear/p/5634692.html
看完还是有点懵xx的