作业帮 > 综合 > 作业

哈希函数H(k)=(3k)MOD11,用开放定址发处理冲突d=i((7k)MOD10+1)i=1,2,3...

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/29 11:44:58
哈希函数H(k)=(3k)MOD11,用开放定址发处理冲突d=i((7k)MOD10+1)i=1,2,3...
是不是H(k)=3k就是把数据除以3,那开放定址处理冲突d=i((7k)MOD10+1)是什么意思呢?
H(k) = (3k) mod 11是一种类计算机语言的描述,它的意思是,将k存入到3*k与11取模的空间中,也就是说所有的都放在11个地址空间中,但有时会发生冲突,这时可以考虑使用开放定位地址,而转向使用下一个地址中.而11是一个素数,这里做为哈杀系数.对于哈杀系数一般是使用比需要存储空间的数字略大的素数.素数的冲突机率最小,而数据选用越小,冲突机率越大,而越大则越存储越稀,浪费空间越大.
很多时间书上是这样教你的,一般是将所存储的数据与哈希系数取模.但这里只是用其3倍取模也是一样的,如以下数字放在哈希表中:
1,62,15,32,45,78,65,95,7,12
这个数据是10个,所以我选用的哈杀系数是11,如果使用H(k)=k mod 11采用地址开链法时是这样的:
1 mod 11 存放在1号空间中
62 mod 11 存放在7号空间中
15 mod 11 存放在4号空间中
32 mod 11 存放在10号空间中
45 mod 11 存放在1号空间中,这时发生了冲突,地址开链,则存在另一个地址中空间中
78 mod 11 存在1号发现存在,另存.
.
但是有时我们知道地址的冲突机充非常大时,这样是不行的,因为效率问题,我们可以使用另一个较小的素数进行改变:
如:以下数据列:
12,23,35,46,58,69,81,92,104,115
你会发现这时10个待存数据,可应该选用11作为哈希系数,但你会发现这几个都会产生冲突,如果还用H(k)=k mod 11非常不利,但如果是均匀冲突时则可以用h(k)=3k mod 11解决的!它的好处就是跨大距离而留足开放定地址法进行解决的.如果遇到冲突可以用另一个式子重新放入空间中,当然,如果遇到已经放入的情况,则将i的值进行顺次增加.
以此为例子,你的开放地址法处理冲突存放是:
12*3 mod 11 放在3号空间中
23*3 mod 11 放在3号空间中,但已经存放了,解使用冲突,
23*7 mod 10 +1 放在2号空间中.
35*3 mod 11 放在6号空间中,(若不使用3k mod 11时则放在2号空间,又冲突了,所以乘的作用就是跨大一下跟离而已!)
46*3 mod 11 放在6号空间中,重复冲突,使用开放地址法解决
46*7 mod 10 +1 放在3个空间中,又重复,使用前边的系数解决
2(46*7 mod 10 +1)放在6号空间中,又重复,(这次真是巧合,46*3 mod 11与2*(46*7 mod 10 +1)相等的时候根本不多!)只好换一下系数放在9号空间中了,问题是数据往往有很大的随机性,不像我举例子也找这样规律性的数字!
但原理你是知道了吧?