10种算法
1.树
二叉树相对于数组来说,查找平均时间为 O(log n) ,最早的情况下为O(n),但是插入和删除速度更快。
数组 | 二叉查找树 | |
---|---|---|
查找 | O(log n) | O(log n) |
插入 | O(n) | O(log n) |
删除 | O(n) | O(log n) |
平衡的二叉树,即左右分支分布均匀,查找起来更快。如红黑树。
B树是一种特殊的二叉树,数据库常用来存储数据。
2.反向索引
散列表的键为单词,值为包含指定单词的页面。这种把单词映射到包含它的页面的数据结构,就是反向索引。用于创建搜索引擎。
3.傅里叶变换
给定一首歌曲,傅里叶变换能够将其中的各种频率分离出来。傅里叶变换非常适合用于处理信号,可用来压缩音乐。
4.并行算法
当处理器的速度达到瓶颈时,就需要采用并行来加快处理速度。并行算法对于速度的提升是非线性的,需要注意两个点:
(1)并行性管理开销,最后的合并需要时间。
(2)负载均衡,均匀的分配工作。
5.MapReduce
分布式算法,MapReduce,映射函数和归并函数。先使用映射函数处理加快处理速度,然后把处理结果进行合并。
6.布隆过滤器和 HyperLogLog
用来判断某一个元素是否包含在某个集合中,如果这个集合非常大,对内存的占用就会很高,这时候就不能使用散列表。
布隆过滤器是一种概率型数据结构,相比于散列表的绝对可靠性,它的可靠性是很可能。
HyperLogLog近似的计算集合中不同的元素数,也不能给出正确答案,但占用内存空间很少。
7. SHA 算法
SHA 是一个散列函数,用于把一个字符串生成一个新的较短的字符串,可用于对文件进行这种处理,然后使用生成的字符串来比较,判断两个文件是否相同。
由于 SHA 算法是单向加密的,可以使用对密码进行 SHA 算法,然后只验证处理后的字符串,这样就可以避免密码被窃取。
8,局部敏感的散列算法
SHA 算法在处理字符串时,如果字符串有微小的改动,比如改了一个字符串中的一个字母,这时候生成的新字符串和没有修改的结果相差会很大,这也保证了密码验证的安全性,不会被轻易破解。
然而有些时候却需要这种敏感性,就是新生成的字符串要和原先的字符串修改程度大小有关系,这样在比较两个文件时,有利于判断相似度。Simhash 就可以用来实现这个效果。
9.Diffie–Hellma
Diffie–Hellman 密钥交换是一个特殊的交换密钥的方法。它是密码学领域内最早付诸实践的密钥交换方法之一。 DH可以让双方在完全缺乏对方(私有)信息的前提条件下通过不安全的信道达成一个共享的密钥。此密钥用于对后续信息交换进行对称加密.
10.线性规划
线性规划用于在给定约束条件下最大限度地改善指定的指标。简单的说,线性规划就是在给定限制的情况下,求解目标。