hash冲突的解决办法

1、链地址法

原理:对于hash值相同的,用链表连接存储。

优点

1)适用总数经常变化的情况(因为链表中各结点是动态申请的)。

2)删除结点操作易于实现,只要简单地删去链表上相应的节点即可。

3)处理冲突简单,无堆积现象。

缺点

1)查询效率较低。(存储是动态的,查询时跳转需要更多的时间)

2)不容易序列化。

2、再哈希法

提供多个哈希函数,如果第一个哈希函数计算出来key的哈希值冲突了,则使用第二个哈希函数计算key的哈希值。

优点:不易产生聚集。

缺点:增加计算时间。

3、建立公共溢出区

将哈希表分为基本表和溢出表,凡是和基本表发生冲突的元素,一律填入溢出表。

4、开放定址法

当关键字key的哈希地址p=H(key)发生冲突,以p为基础,产生另一个哈希地址p1,若p1仍然冲突,再以p1基础,计算出p2,以此类推,则到pi不冲突。

即 Hi = (H(key) + di) % m (i = 1, 2, 3 ... n)

开放地址发有三种方法:线性探测再散列、二次(平方)探测再散列、伪随机探测再散列。

优点

1)容易序列化。

2)若预知数据总数,可以创建完美哈希序列。

缺点

1)占空间很大。

2)删除结点很麻烦。不能简单地将被删结点的空间置为空,因为空地址单元都是查找失败的条件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值