【数据结构与算法】哈希表

 哈希表主要是构造一个映射函数,该函数以数据元素为自变量,函数值即为数据元素在内存中的存储位置。通常把这样的映射函数称为哈希函数h(x)。因此可以说,哈希表是通过哈希函数h(x)来确定数据元素x存放位置h(x)的一种特殊存储结构。

11.1.1哈希表的基本构造方法
           构造哈希表的方法是:设要存储的数据元素个数为   n,设置一个长度为m(m≥n)的连续内存单元(即数组),分别以每个数据元素的关键字Ki(0≤i≤n-1)为自变量,以哈希函数h(Ki)值为该数据元素在数组中的下标值存储该数据元素。
            把构造哈希表时Ki≠Kj(i≠j),但h(Ki)=h(Kj)的现象称作哈希冲突。 

11.1.2  建立哈希表的关键问题
    设计一个好的哈希函数,使得尽量避免哈希冲突,以及哈希冲突发生后,如何解决哈希冲突,就成了建立哈希表的两个关键问题。
     哈希冲突主要与三个因素有关:
   (1)与装填因子a有关。
   (2)与所采用的哈希函数有关。 
   (3)与解决哈希冲突的哈希冲突函数有关。  

11.2 哈希函数构造方法 

设要存放的数据元素有n个,存放数据元素的数组个数为m,哈希函数的设计目标,就是要使通过哈希函数得到的n个数据元素的哈希地址 。
    1 除留余数法
           除留余数法是用数据元素的关键字K除以哈希表长度m所得的余数作为哈希地址的方法。除留余数法的哈希函数h(K)为:
             h(K) = K mod m

2 直接定址法
     直接定址法是以数据元素的关键字K本身或关键字加上某个数值常量C作为哈希函数的方法。直接定址法的哈希函数h(K)为:
                          h(K) = K + C
3 数字分析法
    数字分析法是取数据元素关键字中某些取值较均匀的数字位构造哈希函数的方法。它只适合于所有关键字值已知的情况。 


11.3 哈希冲突解决方法

解决哈希冲突的方法主要有开放定址法和链表法两大类。
11.3.1 开放定址法
         开放定址法是一类以发生哈希冲突的哈希地址为自变量、通过某种哈希冲突函数得到一个新的空闲的哈希地址的方法。开放定址法的哈希冲突函数通常是一组。

1 线性探查

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值