散列表失败平均查找长度
已知数据长度为L,散列表长度为M,存储公式为H(k)=k%P
k:关键字
P:小于表长M的最大质数
使用线性探测法解决冲突:H[i]=( H(k) + d[i] ) % M
i:对于关键字k的第i次冲突的解决
线性探测法中的d[i] = i (i<m)
成功的平均查找长度是针对已插入表中的L个数据的查找研究,故成功平均查找长度(ASL succeed)应为:
((每个元素的解决冲突次数+1)之和)/L
失败的平均查找长度是针对研究查找失败的,而查找的公式就是H(k)=k%P,故研究查找失败,就是研究对这0~P-1个地址的查找失败的平均和,然后冲突解决方法为线性探测法。所以失败平均查找长度(ASL unsucceed)应为:
((0~P-1个地址,每个地址的最糟糕查找情况)之和)/P
所谓最糟糕的查找情况就是:所有查找都比对失败,每次解决冲突后还是查找失败,直到碰到空地址了,还没找到待查找的k。
例如:
关键字数据为:{19,14,23,1,68,20,84,27,55,11,10,79}
数据长度L=12,表长M=16,选择P=13,H(k)=k%13,冲突解决使用线性探测法。
散列地址 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
关键字 | 14 | 1 | 68 | 27 | 55 | 19 | 20 | 84 | 79 | 23 | 11 | 10 | ||||
冲突次数+1 | 1 | 2 | 1 | 4 | 3 | 1 | 1 | 3 | 9 | 1 | 1 | 3 |
ASL(succeed)= (1+2+1+4+3+1+1+3+9+1+1+3)/12
//针对位置0,直接一次比对就能判断查找为空,失败
//针对位置1,每次解决冲突后还是比对失败但是不能确定下一个冲突解决后是否还是失败,故直到位置13为空了,才能确定是失败了,次数为13
//接下来的直到P-1=12的位置,同上
ASL(unsucceed)= (1+13+12+11+10+9+8+7+6+5+4+3+2)/13