数据结构和算法--散列表

数据结构和算法是一种思想,理解了思想就是忘记了代码也能找回原来的记忆。

 

散列表,又叫哈希表

以每个对象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.公共溢出区法:为所有冲突的关键字开辟一个公共区来存放。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值