数据结构和算法是一种思想,理解了思想就是忘记了代码也能找回原来的记忆。
散列表,又叫哈希表
以每个对象ki的关键字为自变量,用一个函数h(ki)来映射出ki的内存地址,也就是ki的下标,将ki对象的元素内容全部存入这个地址中就行了。这个就是Hash的基本思路。
解决哈希冲突的方法
1.链地址法:基本思想是将具有同一散列地址的记录存储在一条线性链表中。例如除留余数,34、56、23、67、89、12、34对10取余,散列地址依次是3、5、2、6、8、1、3。
2.开放定址法:如果h(k)已经被占用,按如下序列探查(h(k)+p(1))%TSize、(h(k)+p(2))%TSize、... (h(k)+p(i))%TSize。h(k)为哈希函数,TSize为哈希表长,p(i)为探查函数。
p(i)一般有
线性探查法p(i) = i。(1,2,3,4,5,6,7...)
二次探查法p(i) = (-1)^(i-1)*((i+1)/2)^2,探查序列依次为:1、-1、4、-4、9、-9.....
随机数探查法p(i):随机数。
双散列函数法h(key),hp(key),若h(key)出现冲突,再使用hp(key)求散列地址。序列为h(k),h(k)+hp(k),...,h(k)+i*hp(k)。
3.桶定址法:桶:一片足够大的存储空间。桶定址:为表中的每个地址关联一个桶。如果桶已经满了,可以使用开放定址法来处理。
4.公共溢出区法:为所有冲突的关键字开辟一个公共区来存放。
1557

被折叠的 条评论
为什么被折叠?



