哈希总结

来源:互联网 发布:java sendmail 发邮件 编辑:程序博客网 时间:2024/06/16 02:34

哈希总结

性质

所有散列函数都有如下一个基本特性:如果两个散列值是不相同的(根据同一函数),那么这两个散列值的原始输入也是不相同的。这个特性是散列函数具有确定性的结果。但另一方面,散列函数的输入和输出不是一一对应的,如果两个散列值相同,两个输入值很可能是相同的,但并不能绝对肯定二者一定相等。输入一些数据计算出散列值,然后部分改变输入值,一个具有强混淆特性的散列函数会产生一个完全不同的散列值。

典型的散列函数都有无限定义域,比如任意长度的字节字符串,和有限的值域,比如固定长度的比特串。在某些情况下,散列函数可以设计成具有相同大小的定义域和值域间的一一对应。一一对应的散列函数也称为排列。可逆性可以通过使用一系列的对于输入值的可逆混合运算而得到。

常用HASH函数

·直接取余法:f(x):= x mod maxM ;maxM一般是不太接近 2^t 的一个质数。

·乘法取整法:f(x):=trunc((x/maxX)*maxlongit)mod maxM,主要用于实数。

·平方取中法:f(x):=(x*x div 1000) mod 1000000);平方后取中间的,每位包含信息比较多。

构造方法

散列函数能使对一个数据序列的访问过程更加迅速有效,通过散列函数,数据元素将被更快地定位。

(详细构造方法可以参考hash函数中的【哈希表的构造方法】)

1直接寻址法:取关键字或关键字的某个线性函数值为散列地址。即H(key)=keyH(key) = a·key + b,其中ab为常数(这种散列函数叫做自身函数)

2数字分析法

3平方取中法

4折叠法

5随机数法

6除留余数法:取关键字被某个不大于散列表表长m的数p除后所得的余数为散列地址。即H(key) = key MOD p,p<=m。不仅可以对关键字直接取模,也可在折叠、平方取中等运算之后取模。对p的选择很重要,一般取素数或m,若p选的不好,容易产生同义词。

原创粉丝点击