常见算法及问题场景——散列(哈希)

定义

哈希函数按照定义可以实现一个伪随机数生成器(PRNG),从这个角度来看,哈希函数之间性能、质量等方面的比较,可以通过其在伪随机生成质量方面的比较来衡量。

评价体系:

1、泊松分布可以用于分析不同的哈希函数对不同的数据的碰撞率(collision rate)。
2、算法复杂度,以及运行时间。
3、位偏向。哈希函数生成随机位序列时,产生高、低位的位偏向应该各为50%。
4、完美的哈稀函数不存在,只能寻找特定数据集上最满意的函数。

冲突

1、冲突会影响效率。
2、三个影响冲突的因素:散列函数是否均匀、处理冲突的方法、散列表的装填因子(填入表中的元素个数 / 散列表的长度)。
3、常见冲突处理方案:继续寻找下一个散列地址、在当前位置使用链表保存、建立公共溢出区。

指导思想

1、对数据进行哈希操作,如加法、乘法、移位等操作变换,来产生哈希值。
2、无法证明素数的参与会使哈希操作的结果熵更大,但事实这么做确定取得了不错的结果。

常用算法

字符串哈希

MD4、MD5、SHA-1等。
用于数据索引,或结构化支撑,如哈希表。

加密

数据库中密码存放。

信息摘要

防止信息在传输过程中被篡改

几何哈希

一种图像匹配算法。
可参考:基于Harris和几何哈希法的目标匹配
http://www.docin.com/p-737956954.html

布隆过滤器

1、由一个很长的二进制向量和一系列随机映射函数组成,布隆过滤器可以用于检索一个元素是否在一个集合中。
2、优点:空间效率和查询时间都远远超过一般的算法。
3、缺点:有一定的误识别率和删除困难。
4、特点:存在假正例False positives,不存在假反例False negatives。即有误报,但不会漏报。
Bloom Filter报告某一元素存在于某集合中,但是实际上该元素可能并不在集合中。
如果某个元素确实没有在该集合中,那么Bloom Filter 是不会报告该元素存在于集合中的,所以不会漏报。

你可能感兴趣的:(数学之美)