数据结构之查找-哈希查找

目录

哈希法(计算式查找)

哈希法又称散列法、杂凑发、关键字地址计算法,相应的表成为哈希表、散列表等。

哈希法的基本思想:首先在元素的关键字k和元素的存储位置p之间建立一个对应关系H,是的p=H(k),H成为哈希函数。

五个因素:①计算哈希函数所需的时间。②关键字长度。③哈希表的大小。④关键字分布情况。⑤记录查找的频率。

哈希函数的构造方法

构造哈希函数原则:一是函数本身便于计算;二是计算出来的地址分布均匀。

1、数字分析法:事先要知道关键字集合,并且每个关键字的位数比哈希表的地址为数多时,可以从关键字中选出分布均匀的若干位构成哈希地址。

2、平方取中法:当无法确定关键字中那几位分布较均匀时,可以先求出关键字的平方值,然后取平方值中间的几位作为哈希地址。

3、分段叠加法:按哈希表地址为数将关键字分成位数相等的几部分,然后将这几部分相加,舍弃最高进位后的结果就是该关键字的哈希地址。

4、除留余数法:假设哈希表的长度为m,p为小于等于m的最大素数,则哈希函数为其中,%的模p为取余运算。

5、伪随机数法:采用一个为随机函数作为哈希函数,即H(key)=random(key)

处理冲突的方法

通过构造性能良好的哈希函数,可以减少冲突,但一般不节能完全避免冲突,因此解决冲突时哈希法的另一个关键技术。

1、开放定址法:这种方法也成再散列法,其基本思想是当关键字key的初始哈希地址出现冲突时,以$h_0$
为基础产生另一个地址$h_1$如果仍然冲突,再以
$h_0$为基础,产生地址,直到不冲突地址
$h_i$将相应元素存入。

2、在哈希法:这种方法的基本思想是同时构造多个不同的哈希函数:
$H_i = RH_i(key) i=1,2,3...,k$
当哈希地址$H_1 = RH_1(key)$冲突时,在计算$H_2 = RH_2(key)$直到冲突不在产生。这种方法不易产生聚集,但增加了计算时间。

3、链地址法:这种方法的基本思想是将所有的哈希地址为i的元素构成一个称为同义词链的单链表,并将单链表的头指针存在哈希表的第i个单元中,因而查找、插入、删除、主要在同义词链中进行。

4、建立公共溢出区:这种方法的基本思想是将哈希表分为基本表和溢出表两部分,凡是和基本表发生冲突的元素一律填入溢出表。

哈希表的查找过程

①首先计算 $h_0 = hash(K)$;

②如果单元$h_0$为空,则所查元素不存在;

③如果单元$h_0$中元素的关键字为K,则查找到所查元素。

④否则重复下述解决冲突的过程:

a、按解决冲突的方法,找出下一个哈希地址$h_i$;

b、如果单元$h_i$为空,则所查元素不存在;

c、如果单元$h_i$中元素的关键字为K,则查找到所查元素。

猜你喜欢

转载自www.cnblogs.com/Leon-The-Professional/p/9950101.html