给定一组查找关键字(19,14,23,1,65,20,84,27,55,11,10,79)
哈希函数为:H(key)=key % 13, 哈希表长为m=15,设每个记录的查找概率相等。
请画出按照线性探测再散列处理冲突得到的哈希表(给出求解过程),并计算查找成功和查找失败时的平均查找长度各是多少。
请画出按照链地址法处理冲突得到的哈希表,并计算查找成功和查找失败时的平均查找长度各是多少。
2.1 线性探测
哈希表长为m=15;
分别得到的结果进行线性探测散列排列:
冲突的关键字按照关键字的原始排序进行向后的推移
图中的冲突的关键字“1”他的现地址为1,但这个位置上已经被关键字“14”所占领,遇到了冲突,探测下一个位置2,位置2上没有关键字,放入即可;
关键字“84”在原始的关键字中排列在前,他现在的地址为6,但这个位置已经被关键字“19”占领,遇到了冲突,探测下一个地址7,但这个位置上也已经被关键字“20”占领,继续探测下一个地址8,位置8上没有关键字,放入即可;
循环执行,到了这一步所有的关键字都已经填入哈希表,散列表的构造已经完成
注:散列表的比较次数与关键字在哈希表中插入位置的次数有关,
查找成功的平均查找长度为:
ASL=(1+1+2+1+3+4+1+1+2+1+1+2)/12
查找不成功的平均查找长度为:
ASL=(10+9+8+7+6+5+4+3+2+1+2+3+4)/13
注意:
区别概念平均成功查找次数和平均不成功查找次数。
平均成功查找次数=每个关键词比较次数之和÷关键词的个数
平均不成功查找次数=每个位置不成功时的比较次数之和÷表长(所谓每个位置不成功时的比较次数就是在除余位置内,每个位置到第一个为空的比较次数。
2.2链式地址法:
成功时平均查找次数:(1X5+2X4+3X1+4X1)/12=5/3
失败时平均查找次数:(4+2+2+1+2+1)/11 =1
注意:链地址法成功时查找次数的分母是哈希表元素的个数,分子为纵向比较;
失败时,分母为哈希表的长度,分子为横向比较(几个);