10种算法

2018-06-21  本文已影响0人  小懒额
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.线性规划

线性规划用于在给定约束条件下最大限度地改善指定的指标。简单的说,线性规划就是在给定限制的情况下,求解目标。

上一篇下一篇

猜你喜欢

热点阅读