散列表

作者: 啦啦啦_9a5f | 来源:发表于2019-10-26 17:17 被阅读0次

散列表的基本概念

  • 散列函数:一个把查找表中的关键字映射成该关键字对应的地址的函数,记为Hash(key) = Addr
  • 冲突:散列函数可能会把两个或两个以上的不同关键字映射到统一地址
  • 同义词:这些发生碰撞的不用关键字
  • 散列函数的两点要求:1.散列函数应尽量减少这样的冲突 2.设计好处理冲突的方法
  • 散列表:根据关键字而直接进行访问的数据结构,建立了关键字和存储地址之间的中直接映射关系

散列函数的构造方法

在构造散列函数时,必须注意以下几点:
1)散列函数的定义域必须包含全部需要存储的关键字,而值域的范围则依赖于散列表的大小或地址范围
2)散列函数计算出来的地址应该能等概率、均匀地分布在整个空间中,从而减少冲突的发生
3)散列函数因尽量简单,能够在较多的时间内计算出任意关键字对应的散列地址

常见的散列函数

方法名 函数 优点 缺点
直接定址法 H(key) = a x key + b 不会产生冲突 关键字分布不均,造成空间浪费
除留余数法 H(key)= key %p 关键字分布较均匀 会产生冲突
数学分析法 分析关键字集合选取重复概率较小的数位作关键字 更换关键字集合需重新构造散列函数
平方取中法 取关键字平方值的中间几位作为关键地址 散列地址分布较均匀
折叠法 将关键字分割成位数相同的几个部分然后取这几个部分的叠加个作为散列地址

处理冲突的方法

1.开放地址法
Hi = (H(key)+di)%m
1)线性探测法:di = 0,1,2,3,...,m-1,冲突法发生时,顺序查看表中下一个单元,直到找到一个空闲单元或 查遍全表
2)平方探测法:di = 0*0,1*1,-1*1,2*2,-2*2,...,k*k,-k*k 是一种比较好的处理宏图的方法,可以避免痴线“堆积”问题,它的缺点是不能探测到散列表上的所有大院,但至少能探测到一半单元
3)再散列法:di = Hash2(key)
4) 伪随机序列法:当di = 为随机数序列时

2.拉链法
适合经常进行插入和删除操作

相关文章

  • 散列表

    1.啥是散列表及散列函数? 很多语言都提供了散列表的实现方式,python是用dict{ }来实现 2.有啥优势?...

  • 散列表

    基本概念(非严谨) 散列表:按照思考事物本质以及理想状态的思路,那么散列表从本质来讲就是一个表,而理想的散列表应该...

  • 散列表

    散列表:散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f...

  • 散列表

    转载请注明出处!https://www.jianshu.com/p/e325578eb512 链表实现 Githu...

  • 散列表

    一、定义 散列表(Hash Table,也叫哈希表),是通过把键值映射成整数来作为数组的索引,并进行访问记录的一种...

  • 散列表

    https://blog.csdn.net/pcwl1206/article/details/83582986

  • 散列表

    散列查找法的两项基本工作 计算位置:构造散列函数直接确定关键词存储位置散列函数的设计,主要目的是构造随机性:计算简...

  • 散列表

    散列表是一种基本的数据结构,那么散列表到底是什么样的一种数据结构呢?又有哪些应用场景呢? 假如我们要从一本电话本中...

  • 散列表

    散列表 认识散列表 是 字典(键 、值对)的一种实现方式。每次在字典中获取一个值,都需要重复遍历字典,如果用散列表...

  • 散列表

    散列函数将被查找的键转换为数组的索引 解决冲突的方法:拉链法和线性探测法 将整数散列最常见的方法是除留余数法,通常...

网友评论

      本文标题:散列表

      本文链接:https://www.haomeiwen.com/subject/ngzyvctx.html