Data Structures (4)

本文详细介绍了哈希表的实现原理,包括哈希函数的设计原则,如易计算和减少碰撞。讨论了开放定址法的三种策略:线性探测、平方探测和双散列。还提到了再散列技术,当表满一半时,如何通过创建更大表并重新散列来解决冲突。这些方法对于优化插入、删除和查找操作的效率至关重要。

哈希
要求:
会算法 给出散列函数 会画图 会计算比较成功的次数 比较失败的次数 平均查找时间
【分离链接法】
【开放定址法】线性探测法 平方探测法 双散列
【再散列】

HASHING

散列表(hashing table)的实现叫散列(hashing)散列是一种用于以常数时间执行插入、删除和查找的技术,但不能排序。
散列函数(hashing function)是关键字被映射到0~TableSize-1范围内的函数。

  • must be easy to compute and minimizes the number of collisions.
  • Should be unbiased. For any x and any i, we have that probability(f(x)=i)=1/b. (Uniform hash function)
    ** f(x)=x%TableSize**
    TableSize=prime number is good for random integer keys.

处理冲突的办法

open addressing 开放定址法

find another empty cell to solve collision

Linear Probing 线性探测法

f(i)=i (a linear function)
如果对应位被占了,则往下继续寻找空位。
下一位是否为空?若为空放入,若不为空检查下一位;
再下一位是否为空?……
查找:先去对应位找,如果没找到再继续往下遍历。

Quadratic Probing 平方探测法

f(i)=i2
如果对应位被占了,则+1^1;
若这一位也被占了,则原位置+2^2;
……
(也有的算法是±i^2)
最大加到(n/2)的平方
查找:先去对应位找,如果没找到再去加1、加4等等位找。

Double Hashing 双散列法

第一个散列函数冲突时,使用第二个散列函数。
hash2(x)必须不恒等于0!
Tips: hash2(x)=R-(x%R) with R a prime smaller than TableSize, will work well.

Rehashing 再散列

当插入数据达到N/2时,再散列。

  • 建立一个原表的二倍大的表(接近原表二倍大的素数)
  • 从原表中读取数据,用新hash function 存到新表中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灰海宽松

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值