数据结构——哈希表

首先什么是哈希表?

哈希表就是一个有哈希算法和冲突处理函数构造出来的数据存储表。

 创建哈希表的用意:将数据元素中的关键字作为哈希算法+冲突处理方法的处理对象,得到唯一的存储位置,这样在进行查找的时候,可以方便的通过计算得到数据存储地址,而不需要像顺序表那样一个一个的比较。

 

怎么构建哈希表呢?

常用的构建方法:直接定址法、数字分析法、平方取中法、折叠法、除留余数法

直接定制法求地址D = H(key) = key或H(key) = a * key + b;key为数据关键字, 通过这样线性的方法求哈希地址

数字分析法:比如有5个数:10032185、10034145、10033275、10032415、100326725 这样的8位数据需要存储,使用第一种方法就不方便了,对存储地址要求较大。观察这几个数字,前三位都相同,不方便用于区别数据元素,所以取后5位中的几位,进行构建哈希表(构建方法:比如选十位百位,作为H(key)中的key,以此来求得数据元素地址),因为它们更加随机,能更好的分布在存储空间并能较好减少冲突。

平方取中法:针对像1001、1000、1010、1100、1101的数,因为每一位数不是1就是0,比较缺少随机性,所以对这类数先进行平方,在将平方得到的数,采用数字分析法进行计算数据元素地址。

折叠法:有移位叠加和间界叠加。

比如移位叠加:12123151,将数分为三份,每部分最低为对齐12 123 151进行相加得到 286 再进行H(key)计算

间接移位:就好像折纸一样 同样12123151为例,这里以百位和千位中间为折痕,得到472(21) 括号中表示“纸”这过来多的部分,然后再将这部分折叠回去得到484, 再对计算H(484)

除留余数法: H(key) = key MOD p(表长为m, p <= m),p的选择对冲突出现的次数有较大的影响,通常选p为小于m的最大质数或不包含小于20的质数因子的合数。

 

知道了构建,那如果遇到冲途怎么办?

常用的冲突处理方法有:开放定址法、链表地址法

以下是链表地址法,使用哈希表指向H(key)相同的链表,如果需要插入,则将数字加在链表后端。此方法比较灵活

开放定址法:Hi = (H(key) + di) MOD m i = 1, 2, ..., k(k <= m - 1)

di 有三种取法:1,2,3,...m-1,称线性探测再散列 (2)1的平方,负1的平方,2的平法,负2的平方...k <= m / 2 (3)伪随机序列,称伪随机探测再散列

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值