哈希函数的设计以及冲突的处理

来源:互联网 发布:线切割锥度编程实例 编辑:程序博客网 时间:2024/06/05 08:32

采用哈希方法需要考虑的两个主要问题:哈希函数的设计和冲突的处理

哈希函数的设计方法:

1.直接定址法

    基本思想:哈希函数是关键字的线性函数,如:H(k)=a*k+b  (a,b为常数,k为关键字)

2.除留余数法

    基本思想:选择某个适当的正整数p,以关键字除以p的余数作为哈希地址,如:H(k)=k mod p

3.数字分析法

    基本思想:根据关键字在各个位上的分布情况,选取分布比较均匀的若干位组成哈希地址

4.平均取中法

    基本思想:对关键字平方后,按哈希表大小,取中间的若干位作为哈希地址(平方后截取)

5.折叠法

    基本思想:将关键字从左到右分割成位数相等的几部分,最后一部分位数可以短些,然后将这几部分叠加求和,并按哈希表表长,取后几位作为哈希地址

 

冲突的处理方法:

1.开放定址法   用开放定址法处理冲突得到的哈希表是闭哈希表,按形成探测序列的方法不同,开放定址法又可以分为线性探测法、二次探测法、伪随机探测法等。

       线性探测法:按公式Hi=(H(k)+di) mod m (di=1,2,3,4......m-1)寻找下一个哈希地址

       二次探测法:按公式Hi=(H(k)+di) mod m (di=1的平方,-1的平方,2的平方,-2的平方,...q的平方,-q的平方,且q<=m/2)寻找下一个哈希地址

      伪随机探测法:随机探测法探测下一个哈希地址的位移量是一个随机数列。

2.链地址法 

        基本思想:将所有哈希地址相同的记录,即所有关键字为同义词的记录存储在一个单链表中,称为同义词子表;在哈希表中存储的是所有同义词子表的头指针。用链地址发处理冲突得到的哈希表成为开哈希表。

0 0
原创粉丝点击