【数据结构·Data Structure】散列表-Hashing Table

散列表

散列函数

直接地址法:H(Key) = a*Key+b

除留余数法:H(Key) = Key%p,(p是个不大于m的最大素数)

数字分析法:取出现概率均匀的若干位作为散列地址

平方取中法:Key平方,取中间几位作为散列地址

......

解决冲突:

开放地址法:Hi = (H(Key)+di)%m

线性探测:di = 0, 1, 2, ..., m-1,(能遍历表,但会造成堆积,降低查找效率)

平方探测:di = 0, 1^2, -1^2, ..., (m/2)^2, -(m/2)^2,(m为4k+3形式的素数,不能遍历表,但可以避免出现“堆积”问题)

再散列法:di = Hi(key)

注:开放地址法中,删除空要和原始空区分开。因为开放地址法的查找是发现空就得出元素不存在的结论。开放地址法就是开放了相同地址元素的位置给其他地址元素,那么在查找中,如果发现一个删除空,其与原始空不区分,就会停止查找,查找不到存在的元素,出现错误。将删除空和原始空区分,在发现删除空也会继续使用开放地址法继续查找。缺点是表满时可能存在很多删除空的位置未利用,需要定期维护散列表,删除删除空。

拉链法:相同地址的元素以链表的形式存储在该位置

posted @ 2021-09-19 10:37  楚不予  阅读(46)  评论(0编辑  收藏  举报