数据结构-哈希表-哈希函数-哈希冲突

一.哈希冲突

若线性表(24,13,31,6,15,18,8)采用散列(Hash)法进行存储和查找,设散列函数为H(Key)=Key mod 11,则构造散列表时发生冲突的元素为()

先看一个例题,可以明白什么是哈希冲突,线性表中的值通过哈希函数取得了相同的值,就是哈希冲突。

散列表中有 m 个存储单元,散列函数 H(key)= key % p ,则 p 最好选择? 

这题p最好大于等于m,当然散列表有相同元素依然能冲突,如果不满足,p最好选择小于等于m的最大素数。

1 哈希表的平均查找长度

哈希表的平均查找长度与哈希函数、冲突处理方法和装填因子有关,但与哈希表长无关。

一般情况下哈希函数是均匀的,可不考虑它对平均查找长度的影响.

2.线性探测再散列法

散列表{1,2,3,4,5},而哈希函数hash(key)=key%3,则平均查找长度?

1%3=1,查找1次

2%3=2,查找1次

3%3=0,查找1次

4%3=1,产生冲突,将4之加1再通过散列函数为2,再冲突,再加1为3,查找3次。

5%3=2,发生冲突,经过两次加1,为4,查找为3次 

所以平均查找长度为(1+1+1+3+3)/5=9/5。

3.装填因子a

定义为存储的元素总个数除以哈希键值个数。装填因子越大,冲突的可能性越大

装填因子是哈希表可装填的元素个数和表长度的比值,反映哈希表空间的装满程度及表空间的利用效率。装填因子可以在设计哈希表的时候可以设置其值大小,一般来说小于等于1(链地址法可以装填元素数量可以超过哈希表表长,所以链地址法装填因子可大于1

4.开链法

拉链法适用于造表前无法确定表长的情况。

一个线性序列(30,14,40,63,22,5),假定采用散列函数Hash(key)=key%7来计算散列地址,将其散列存储在A[0~6]中,采用链地址法解决冲突。若查找每个元素的概率相同,则查找成功的平均查找长度

存储取余

0         14->63

1        22

2        30

3        

4        

5        40->5

平均查找长度为(4+2+2)/6=4/3.

你可能感兴趣的:(数据结构与算法,哈希算法,数据结构,散列表)