数据结构(七)——查找之哈希表

基本概念

  • 哈希函数:又叫散列函数,在关键字与记录在表中的存储位置之间建立一个函数关系,以 H(key) 作为关键字为 key 的记录在表中的位置,通常称这个函数 H(key) 为哈希函数。
  • 哈希地址:由哈希函数得到的存储位置称为哈希地址
  • 装填因子:设散列表空间大小为n,填入表中的结点 数为m,则称a=m/n为散列表的装填因子。
  • 冲突(Collision)与同义词: 若H(k1)=H(k2),则称 为冲突,发生冲突的两个关键字k1和k2称为同义词。

哈希函数的构造原则

  • 计算简单
  • 分布均匀

哈希函数的构造方法

  • 直接地址法

取关键字或关键字的某个线性函数值为哈希地址。即:H(key)=key或H(key)=a*key+b
其中a、b为常数。又称H(key)为自身函数。

  • 数字分析法
  • 平方取中法
  • 折叠法

将关键字分割成位数相同的几段,最后一位可以 不同。段的长度取决于散列表的地址位数,然后 将各段的叠加和(舍去进位)作为散列地址

  • 除留余数法

设桶数B,取质数 m ≤ B ,Hash ( key ) = key % m

  • 除随机数法

设定哈希函数为: H(key) = Random(key) 其中,Random 为伪随机函数

处理冲突的方法

开放地址法
Hi = ( H(key) + di ) MOD m i = 1,2,…,k ( k≤m-2 )
对增量 d i 有三种取法:
H(key) 为哈希函数,m为表长,d i 为增量序列:

  • di = 1,2,3,…,m-1— 线性探测再散列
  • di = 12,-12,22,-22,…,± k2 (k ≤m/2) —二次探测再散列 或平方探测再散列
  • di 为伪随机序列 —随机探测再散列
  • 双散列函数探测-发生冲突是采用两个散列函数 H1(key)和H2(key)

**链地址法(又称拉链法) **

  • 根据关键字K找到关键字为K的结点所在 单链表的首地址;
  • 在所找到的单链表上进行顺序查找,若找 到返回地址值,否则返回空值。

哈希表的查找和分析

决定哈希表查找的ASL的因素:

  • 选用的哈希函数;
  • 选用的处理冲突的方法;
  • 哈希表饱和的程度–装载因子,α=n/m 值的大小(n—记录数,m—表的长度

装载因子α 越小,发生冲突的可能性就越小

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值