算法图解end:10种算法简介
1.树
二叉查找树:
二叉查找树的左边节点都比他小,右边节点都比他大从根节点开始逐步往下找
二叉查找树的查找,删除,插入速度都是
O
(
l
o
g
n
)
O(log n)
O(logn)
而数组只有查找速度是
O
(
l
o
g
n
)
O(log n)
O(logn) 删除和插入的速度是
O
(
n
)
O(n)
O(n)
缺点:不能随机访问;遇到倾斜的树时 效率不高
举例:
- 处于平衡状态的特殊二叉查找树:红黑树
- 数据库用B树来存储数据
- 堆、伸展树……
2 反向索引
搜索引擎的工作原理:
一个散列表,将单词(键)映射到包含它的页面(值)。这种数据结构被称为反向索引(inverted index)未提及正向索引
3 傅里叶变换
傅里叶变换非常适合用于处理信号,还可以用来地震预测和DNA分析等
以下三种算法斗鱼可扩展性和海量数据处理有关:
4 并行算法
为提高算法效率,让处理数据在多个内核中并行的执行。
并行算法设计和提升比较困恼,因为:
①并行性管理开销
②负载均衡
5 MapReduce
分布式算法,让算法在多台计算机上运行。可以通过开源工具Apache Hadoop来使用它。
分布式算法非常适合用于在短时间内完成海量工作,其中的MapReduce基于两个简单的理念:映射(map)函数和归并(reduce)函数
6 布隆过滤器和HyperLogLog
- 布隆过滤器是一种概率型数据结构,它提供的答案有可能不对,但很可能是正确的。
在搜集未发布过的网站时。可能出现错报的情况,即Google可能指出“这个网站已搜集”,但实际上并没有搜集;不可能出现漏报的情况,即如果布隆过滤器说“这个网站未搜集”,就肯定未搜集。
布隆过滤器的优点在于占用的存储空间很少
- HyperLogLog近似地计算集合中不同的元素数,与布隆过滤器一样,它不能给出准确的答案,但也八九不离十,而占用的内存空间却少得多。
面临海量数据且只要求答案八九不离十时,可考虑使用概率型算法!
7 SHA算法
一种散列函数是安全散列算法(secure hash algorithm,SHA)函数
给定一个特定的字符串 返回其散列值,对于每个不同的字符串,SHA生成的散列值都不同。
8 局部敏感的散列算法
可使用Simhash,这样可以根据两个散列值来判断两个字符串的相似度
9 Diffie-Hellman 密钥交换
对消息进行加密,以便只有收信人能看懂。
Diffie-Hellman 算法解决了下面两个问题:
- 双方无需知道加密算法
- 要破解加密的消息很难
它使用两个密钥:公钥和私钥
该算法的替代者RSA
10 线性规划
所有图算法都可以用线性规划来实现。
线性规划是一个宽泛的框架,图问题只是其中一个子集。
线性规划可以使用Simplex算法。
最优化和运筹学讲的比较详细。
11.参考资料
《算法图解》