在利用线性探测再散列法处理冲突的散列表中,很多人对计算失败时的平均查找长度,作除数应该是散列表长,还是散列函数:mod后面的数不清楚,首先接下来我们先解决这一问题. 问题一:其除以的数是mod后面的数还是散列表长? ...
前言:
在利用线性探测再散列法处理冲突的散列表中,很多人对计算失败时的平均查找长度,作除数应该是散列表长,还是散列函数:mod后面的数不清楚,首先接下来我们先解决这一问题.

问题一:其除以的数是mod后面的数还是散列表长?

答:是散列表长.
首先我们要明确哈希表中下标每一个位置都有可能存储一个关键字数据,所以我们要求的失败平均查找长度即为:
失败平均查找长度=每一个位置查找失败的次数相加/哈希表长
那么每一个位置在什么情况下算是查找失败呢?
在遇到第一个位置为NULL的时候才算失败,因为线性探测再散列法的设定,当哈希表为满表时,我们完全可以认为所有后面下标位置存储的数为下标为0时不断冲突得到的,比如mod为6,我们要存入序列{6,12,18,24,30,36}等序列.
所以如果我们要找数字为30时,比较次数为5次,即我们用数除以mod得到散列函数值即下标为0,这时我们比较值6并不匹配,我们想会不会我们的要找的数在下标为0的时候出现了冲突,会不会线性探测再散列安排到了后面,所以我们延续着与下标为1的关键字值比较,这时比较值为12,依旧不匹配,那我们再想,会不会我们要找的数又发生了冲突,被线性探测再哈希安排到了后面,所以,我们只能再往后找,这时我们继续比较,依次类推我们当我们比较5次时,终于匹配上了我们要找的数.
那如果我们要找的是42时,这时我们就能推出了下标为0时出现的失败次数,不断往后推,直到比较值为NULL,我们才算死心不再去找: 比较7次
那下标为1时,失败次数会是多少呢?其实失败次数计算就是假设最极端的情况,不到黄河心不死,我们就认定我们要找的数如果与坐标位置不匹配,那就是发生冲突了,肯定在下一位.所以:
当下标为1时:查找失败次数为6次,
当下标为2时.查找失败次数为5次
当下标为3时.查找失败次数为4次
当下标为4时.查找失败次数为3次
当下标为5时.查找失败次数为2次
当下标为6时.查找失败次数为1次
因为我们的序列有6个数据元素,以上的推理皆是散列表长度为7时,推理的结果.下标为6的位置为NULL .
根据以上信息我们完全可以画出我们的散列表
关键字序列:{6,12,18,24,30,36},散列函数为H(Key)=Key MOD 6
装填因子为6/7
所以平均查找失败次数为
(7+6+5+4+3+2+1)/7=4
例题:将关键字序列(7,8,30,11,18,6,13)散列存储在哈希表中,哈希存储空间是从下标0开始的一维数组,散列函数为H(Key)= Key MOD 7,处理冲突采用线性探测再散列法.要求装填因子为0.7
(1) 画出构造的散列表:
(2) 分别计算等概率情况下查找成功和查找失败时的平均查找长度:
查找成功时的平均长度为:ASL(成功)=(1 * 5+2 * 2)/7=9/7
查找失败时的平均长度为:
ASL(失败)=(4+3+2+1+5+4+3+2+1+1)/10=26/10=13/5
等概率情况下查找成功平均查找长度 等概率情况下查找不成功的平均查找长度 题目要求 将关键字序列(7、8、30、11、18、9、14)散列存储到散列表中。散列表的存储空间是一个下标从0开始的一维数组,散列...
哈希表查找——成功和不成功时的平均查找长度 以下求解过程是按照“计算机统考的计算方法”,不同的老师、教材在“处理冲突”上可能会有不同的方法,所以最主要的是掌握原理即可,对于考研的朋友最好掌握统考...
“它是表中所有可能散列到的位置上要插入新元素时为找到空桶的探查次数的平均值。” 理解: 1. 散列表中已经含有之前插入的元素。 即表已经不空了,若为空的话再插入元素的时候查找空位置一次就可以找到。 2. 这...
它通过把关键码值映射到哈希表中的一个位置来访问记录,以加快查找的速度。这个映射函数就做散列函数,存放记录的数组叫做散列表。 2、散列存储的基本思路 以数据中每个元素的关键字K为自变量,通过散列函数H(k)...
我给出一个较为准确的证明,如下:在一个长度为N的查找表中,查找失败时,平均查找长度是N+1,即找到第N+1个位置(查找完毕)才确定查找失败了。拉链法同样如此,a表示N/M,即装载因子,也是每个entry的平均...
题目:关键字序列为:{38,25,74,63,52,48},哈希函数为H(k)=k%7,哈希表的长度为7,用线性探测和链地址法处理冲突,分别计算等概率情况下查找成功的平均查找长度。 注:没给哈希表长度,给出装填因子时,可求...
一、什么是hash冲突? 假设hash表的大小为9(即有9个槽),现在要把一串数据存到表里:5,28,19,15,20,33,12,17,10 简单计算一下:hash(5)=5, 所以数据5...