习题题5-1Hash函数答案说明
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题题5-1Hash函数答案说明
题5.1
a.分离链接法:将散列到同⼀个值的所有元素保留到⼀个链表中。
1)⾸先插⼊4371,h(4371)=4371(mod 10)=1,故插⼊1位置。
2)插⼊1323,h(1323)=1323(mod 10)=3,故插⼊3位置。
3)插⼊6173,h(6173)=6173(mod 10)=3,故插⼊3位置,此时发⽣冲突(与1323
插⼊同⼀位置),故添加⼀个链表并保存到此链表中。
4)插⼊4199,h(4199)=4199(mod 10)=9,故插⼊9位置。
5)插⼊4344,h(4344)=4344(mod 10)=4,故插⼊4位置。
6)插⼊9679,h(9679)=9679(mod 10)=9,故插⼊9位置,此时发⽣冲突(与4199
插⼊同⼀位置),故添加⼀个链表并保存到此链表中。
7)插⼊1989,h(1989)=1989(mod 10)=9,故插⼊9位置,此时发⽣冲突(与4199,
9679插⼊同⼀位置),故添加⼀个链表并保存到此链表中。
b.线性探测:hi(x)=(hash(x)+f(i))mod TableSize,其中f(i)=i,i为发
⽣冲突的次数,f(0)=0。
相当于逐个探测散列表,最后将值散列
到最接近的⼀个空单元中(可以理解为,若发⽣冲突,则插⼊到下⼀个空单元中)。
1)⾸先插⼊4371,h0(4371)=(4371(mod 10)+f(0))mod 10=1,故插⼊1位置。
2)插⼊1323,h0(1323)=(1323(mod 10)+f(0))mod 10=3,故插⼊3位置。
3)插⼊6173,h0(6173)=(6173(mod 10)+f(0))mod 10=3,故插⼊3位置,此时发
⽣冲突(与1323插⼊同⼀位置)。
发⽣第⼀次冲突,计算h1(6173)=(6173(mod 10)+f(1))mod 10=4,故插⼊4位置。
4)插⼊4199,h0(4199)=(4199(mod 10)+f(0))mod 10=9,故插⼊9位置。
5)插⼊4344,h0(4344)=(4344(mod 10)+f(0))mod 10=4,故插⼊4位置,此时发
⽣冲突(与6173。
插⼊同⼀位置)。
发⽣第⼀次冲突计算h1(4344)=(4344(mod 10)+f(1))mod 10=5,故插⼊5位置。
6)插⼊9679,h0(9679)=(9679(mod 10)+f(0))mod 10=9,故插⼊9位置,此时发
⽣冲突(与4199插⼊同⼀位置)。
发⽣第⼀次冲突计算h1(9679)=(9679(mod 10)+f(1))mod 10=0,故插⼊0位置。
7)插⼊1989,h0(1989)=(1989(mod 10)+f(0))mod 10=9,故插⼊9位置,此时发
发⽣第⼀次冲突计算h1(1989)=(1989(mod 10)+f(1))mod 10=0,故插⼊0位置,此时发⽣冲突(与9679插⼊同⼀位置)。
发⽣第⼆次冲突计算h2(1989)=(1989(mod 10)+f(2))mod 10=1,故插⼊1位置,此时发⽣冲突(与4371插⼊同⼀位置)。
发⽣第三次冲突计算h3(1989)=(1989(mod 10)+f(3))mod 10=2,故插⼊2位置。
c.平⽅探测:hi(x)=(hash(x)+f(i))mod TableSize,其中f(i)=i2,i为
发⽣冲突的次数,f(0)=0。
1)⾸先插⼊4371,h0(4371)=(4371(mod 10)+f(0))mod 10=1,故插⼊1位置。
2)插⼊1323,h0(1323)=(1323(mod 10)+f(0))mod 10=3,故插⼊3位置。
3)插⼊6173,h0(6173)=(6173(mod 10)+f(0))mod 10=3,故插⼊3位置,此时发
⽣冲突(与1323插⼊同⼀位置)。
发⽣第⼀次冲突,计算h1(6173)=(6173(mod 10)+f(1))mod 10=4,故插⼊4位置。
4)插⼊4199,h0(4199)=(4199(mod 10)+f(0))mod 10=9,故插⼊9位置。
5)插⼊4344,h0(4344)=(4344(mod 10)+f(0))mod 10=4,故插⼊4位置,此时发
发⽣第⼀次冲突计算h1(4344)=(4344(mod 10)+f(1))mod 10=5,故插⼊5位置。
6)插⼊9679,h0(9679)=(9679(mod 10)+f(0))mod 10=9,故插⼊9位置,此时发
⽣冲突(与4199插⼊同⼀位置)。
发⽣第⼀次冲突计算h1(9679)=(9679(mod 10)+f(1))mod 10=0,故插⼊0位置。
7)插⼊1989,h0(1989)=(1989(mod 10)+f(0))mod 10=9,故插⼊9位置,此时发
⽣冲突(与4199插⼊同⼀位置)。
发⽣第⼀次冲突计算h1(1989)=(1989(mod 10)+f(1))mod 10=0,故插⼊0位置,此时发⽣冲突(与9679插⼊同⼀位置)。
发⽣第⼆次冲突计算h2(1989)=(1989(mod 10)+f(2))mod 10=3,故插⼊3位置,此时发⽣冲突(与1323插⼊同⼀位置)。
发⽣第三次冲突计算h3(1989)=(1989(mod 10)+f(3))mod 10=8,故插⼊8位置。
d.双散列:hi(x)=(hash(x)+f(i))mod TableSize,其中f(i)=i*hash2(x),
i为发⽣冲突的次数,f(0)=0。
题中hash2(x)=7-(x mod 7)。
1)⾸先插⼊4371,h0(4371)=(4371(mod 10)+f(0))mod 10=1,故插⼊1位置。
2)插⼊1323,h0(1323)=(1323(mod 10)+f(0))mod 10=3,故插⼊3位置。
3)插⼊6173,h0(6173)=(6173(mod 10)+f(0))mod 10=3,故插⼊3位置,此时发
⽣冲突(与1323插⼊同⼀位置)。
4)发⽣第⼀次冲突,计算hash2(6173)=7-(6173 mod 7)=1,f(1)=1*hash2(6173)=1,
h1(6173)=(6173(mod 10)+f(1))mod 10=4,故插⼊4位置。
5)插⼊4199,h0(4199)=(4199(mod 10)+f(0))mod 10=9,故插⼊9位置。
6)插⼊4344,h0(4344)=(4344(mod 10)+f(0))mod 10=4,故插⼊4位置,此时发
⽣冲突(与6173插⼊同⼀位置)。
发⽣第⼀次冲突,计算hash2(4344)=7-(4344 mod 7)=3,f(1)=1*hash2(4344)=3,h1(4344)=(4344(mod 10)+f(1))mod 10=7,故插⼊7位置。
7)插⼊9679,h0(9679)=(9679(mod 10)+f(0))mod 10=9,故插⼊9位置,此时发
⽣冲突(与4199插⼊同⼀位置)。
发⽣第⼀次冲突,计算hash2(9679)=7-(9679mod 7)=2,f(1)=1*hash2(9679)=2,h1(9679)=(9679(mod 10)+f(1))mod 10=1,
故插⼊1位置,此时发⽣冲突(与4371插⼊同⼀位置)。
发⽣第⼆次冲突,计算f(2)=2*hash2(9679)=4,h1(9679)=(9679(mod
10)+f(2))mod 10=3,故插⼊3位置,此时发⽣冲突(与1323插⼊同⼀位置)。
发⽣第三次冲突,计算f(3)=3*hash2(9679)=6,h1(9679)=(9679(mod
10)+f(3))mod 10=5,故插⼊5位置。
8)插⼊1989,h0(1989)=(1989(mod 10)+f(0))mod 10=9,故插⼊9位置,此时发
⽣冲突(与4199插⼊同⼀位置)。
发⽣第⼀次冲突计算hash2(1989)=7-(1989 mod 7)=6,f(1)=1*hash2(1989)=6,h1(1989)=(1989(mod 10)+f(1))mod 10=5,故插⼊5位置,此时发⽣冲突(与9679插⼊同⼀位置)。
发⽣第⼆次冲突,计算f(2)=2*hash2(1989)=12,h1(1989)=(1989(mod
10)+f(2))mod 10=1,故插⼊1位置,此时发⽣冲突(与4371插⼊同⼀位置)。
发⽣第三次冲突,计算f(3)=3*hash2(1989)=18,h1(1989)=(1989(mod
10)+f(3))mod 10=7,故插⼊7位置,此时发⽣冲突(与4344插⼊同⼀位置)。
发⽣第四次冲突,计算f(4)=4*hash2(1989)=24,h1(1989)=(1989(mod
10)+f(4))mod 10=3,故插⼊3位置,此时发⽣冲突(与1323插⼊同⼀位置)。
发⽣第五次冲突,计算f(5)=5*hash2(1989)=30,h1(1989)=(1989(mod
10)+f(5))mod 10=9,故插⼊9位置,此时发⽣冲突(与4199插⼊同⼀位置)。
此时,可以知道,将再次逐个探测位置9->5->7->3->9,最终⽆法插⼊1989。