散列函数key mod p
1.线性探测法处理冲突
如果当前位置已经有元素了,就看下一个位置有没有元素,直到找到一个位置没有元素
找到一个元素需要几次?
例题:关键码集为{47,7,29,11,16,92,22,8,3},散列表表长为11,散列函数为Hash(key)=key mod 11,拟用线性探测法处理冲突,要找到3这个元素,需要查找几次?
47%11=4......3
7%11=0......7
29%11=2......7
11%11=1......0
16%11=1......5
92%11=8......4
22%11=2......0
8%11=0......3
3%11=0......3
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 22 | 47 | 92 | 16 | 8 | 7 | 29 | 3 |
3%11=0......3,所以先在3这个位置中查找,然后去第4个位置找,然后去第5个位置找..........
所以一共查找了7次
查找成功的平均查找长度
(2018 408)现有长度为7的散列表,散列函数为Hash(key)=key mod 7,用线性探测法解决冲突,将关键字22,43,15依次插入到散列表中,查找成功的平均查找长度是()
A.1.5 B.1.6 C.2 D.3
22%7=3......1
43%7=6......1
15%7=2......1
0 | 1 | 2 | 3 | 4 | 5 | 6 |
22 | 43 | 15 |
22查找1次就可以查找到
43需要查找2次才可以查找到
15需要查找3次可以查找到
所以平均查找次数是(1+2+3)/3=2,选c
查找失败的平均查找次数
一直查找, 直到碰到某个位置为空,不再查了
(2019 408) 现有长度为11的散列表,散列函数Hash(key)=key mod 采用线性探测法解决冲突。将关键字序列87,40,30,6,11,22,98,20依次插入散列表后,散列表查找失败的平均查找长度( )
A.4 B.5.25 C.6 D.6.29
构建散列表的过程略过:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |
98 | 22 | 30 | 87 | 11 | 40 | 6 | 20 |
当你给1个数x,x不在散列表中:
当x mod 7=0,从0这个位置开始查找,一直查到8这个位置发现是空的,才停止查找,一共查了9次
当x mod 7=1,从1这个位置开始查找,一直查到8这个位置发现是空的,才停止查找,一共查了8次
当x mod 7=2,从2这个位置开始查找,一直查到8这个位置发现是空的,才停止查找,一共查了7次
................
当x mod 7=5,从5这个位置开始查找,一直查到8这个位置发现是空的,才停止查找,一共查了4次
当x mod 7=6,从6这个位置开始查找,一直查到8这个位置发现是空的,才停止查找,一共查了3次
所以失败的平均查找长度为:
(9+8+7+6+5+4+3)/ 7=42/7=6
2.采用链地址法解决冲突
一组关键字{26,36,41,38,44,15,68,12,6,51,25},用链地址法解决冲突,散列表长度为15,散列函数为Hash(key)=key%13
计算等概率情况下查找成功和查找失败的平均查找长度
查找成功的平均查找长度:
(1*7+2*2+3*1+4*1)/11=18/11
查找失败的平均查找长度: