哈希表简介

哈希表

  • 概念:哈希表是用来存储键值对的,可以平衡时间和空间的数据结构,用空间来换空间。

    当键是整数时,可以用无序数组来实现哈希表。

  • 哈希函数:要将键映射到存储的下标(地址),就需要一个函数,这就是哈希函数的功能。

  • 哈希冲突处理:使用哈希函数时,很多时候存在将多个键映射到同一个下标(地址)的情况,这就产生了冲突,此时就需要处理哈希冲突。

Hash函数构造方法:

  1. 直接定址法:直接定址法是以数据元素关键字k本身或它的线性函数作为它的哈希地址

  2. 数字分析法:从中提取分布均匀的若干位或它们的组合作为地址,适用于能预先估计出全体关键字的每一位上各种数字出现的频度

  3. 折叠法(移位叠加、间接叠加):将关键字分割成若干部分,然后取它们的叠加和为哈希地址。适用于关键字的数字位数特别多

  4. 平方取中法: 先取关键字的平方,然后根据可使用空间的大小,选取平方数是中间几位为哈希地址。适用于关键字中的每一位都有某些数字重复出现频度很高的现象

  5. 减去法: 减去法是数据的键值减去一个特定的数值以求得数据存储的位置

  6. 除留余数法:假设哈希表长为mp为小于等于m的最大素数,则哈希函数为

    hk=k % p ,其中*%为模p*取余运算。

  7. 随机数法:设定哈希函数为:H(key) = Random(key)其中,Random 为伪随机函数。适用于对长度不等的关键字构造哈希函数。

Hash冲突处理方法:

  1. 开放地址法(存在一个通用的在散列函数)、
  2. 再哈希法(同时有多个哈希函数)、
  3. 链地址法(这种方法的基本思想是将所有哈希地址为i的元素构成一个称为同义词链的单链表)、
  4. 建立公共溢出区(将哈希表分为基本表溢出表两部分,凡是和基本表发生冲突的元素,一律填入溢出表)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值