文章目录

  • 一、基本概念
  • 二、常见散列函数
    • 1. 除留取余法---H(key)=key%p
    • 2.直接定址法---H(key)=a*key+b
    • 3. 数字分析法---选取数码分布较为均匀的若干位作为散列地址
    • 4.平方取中法---取关键字的平方值的中间几位作为散列地址
  • 三、处理冲突的方法
    • 1.拉链法
    • 2.开放定址法
      • (1) 线性探测法
      • (2) 平方探测法
      • (3) 伪随机序列法

一、基本概念

散列表特点 :
数据元素的关键字与存储地址直接相关

通过哈希函数建立“关键字”与“存储地址”的联系

若不同的关键字通过散列函数映射到同一个值,则称它们为 “同义词”
通过散列函数确定的位置已经存放了其他元素,则称这种情况为 “冲突”


二、常见散列函数

1. 除留取余法—H(key)=key%p

表长为m,取不大于m但最接近或等于m的质数

2.直接定址法—H(key)=a*key+b

适合 关键字分布基本连续 的情况

3. 数字分析法—选取数码分布较为均匀的若干位作为散列地址

4.平方取中法—取关键字的平方值的中间几位作为散列地址

散列查找是典型的 “用空间换时间” 的算法,只要散列函数设计的合理,则散列表越长,冲突的概率越低。

三、处理冲突的方法

1.拉链法

用拉链法处理“冲突”:把所有“同义词”存储在一个链表

2.开放定址法

空地址既对同义词开放,又向非同义词开放。其数学递推公式为
H i = ( H ( k e y ) + d i ) % m H_i=(H(key)+d_i)\%m Hi​=(H(key)+di​)%m
其中 i ∈ [ 0 , m − 1 ] i\in[0,m-1] i∈[0,m−1],m表示散列表表长, d i d_i di​为增量序列;H(key)表示初始地址;i理解为“第i次发生冲突”

(1) 线性探测法

d i = 0 , 1 , 2 , . . . , m − 1 d_i=0,1,2,...,m-1 di​=0,1,2,...,m−1

1存储操作
即发生冲突时,每次往后探测一个单元(向后挪1单元)。若为空,放入,若发生冲突,则接着挪

【易错点】
H ( k e y ) = k e y % p H(key)=key\%p H(key)=key%p
H i = ( H ( k e y ) + d i ) % m H_i=(H(key)+d_i)\%m Hi​=(H(key)+di​)%m
m和p不一定相等
例如:

n=13;p为不大于n且与n互质的数,为13
m为表长为16
H ( 25 ) = 25 % 13 = 12 H(25)=25\%13=12 H(25)=25%13=12
H 1 = ( 12 + 1 ) % 16 = 13 H_1=(12+1)\%16=13 H1​=(12+1)%16=13

查找操作与存储操作类同。当查找到第一个空位,仍未找到,则查找失败。(例如查找21,从位置8开始查找,直到位置13,仍未找到。查找失败)

缺点:

(2) 平方探测法

d i = 0 , 1 , − 1 , 2 2 , − 2 2 , 3 2 , − 3 2 . . . . d_i=0,1,-1,2^2,-2^2,3^2,-3^2.... di​=0,1,−1,22,−22,32,−32....

存储操作
即发生冲突时,以H(key)为,向右向左探索。若为空,放入;若左右都冲突,探测下一个平方值,直至找到空位(eg. H(key)=9, 若10和8都冲突,探测13和5,以此类推)

【注意】:

  1. 在平方探测法中,由于偏移量有,故要处理 H i = ( H ( k e y ) + d i ( i ) ) % m < 0 H_i=(H(key)+di(i))\%m<0 Hi​=(H(key)+di(i))%m<0的情况。处理方法为:当 d i ( i ) < 0 时, H i = ( H ( k e y ) + d i ( i ) + m ) % m di(i)<0时,H_i=(H(key)+di(i)+m)\%m di(i)<0时,Hi​=(H(key)+di(i)+m)%m
  2. 在平方探测法中,散列表长度m必须是一个可以表示为4j+3的素数,才能探测到所有位置

(3) 伪随机序列法

d i = 0 , 5 , 24 , 11 , . . d_i=0,5,24,11,.. di​=0,5,24,11,..或其他给出的伪随机序列
与以上两种操作类同,不再赘述

哈希表的概念(散列表)相关推荐

  1. 哈希表(模拟散列表 字符串哈希)

    目录 一.哈希表的概念 二.模拟散列表 题目 代码实现 ①拉链法 ②开放寻址法 三.字符串哈希 题目 思路 注意点 代码实现 一.哈希表的概念 哈希表(又称为散列表),将一个比较大的值域映射到一个小的 ...

  2. 《算法图解》学习笔记(五):哈希表,小名散列表(附代码)

    欢迎关注WX公众号:[程序员管小亮] python学习之路 - 从入门到精通到大师 文章目录 欢迎关注WX公众号:[程序员管小亮] [python学习之路 - 从入门到精通到大师](https://b ...

  3. 【数据结构】哈希表的概念及应用

    [数据结构]哈希表的概念及应用 前言 1.写出哈希表的基本概念 2.列出常用的哈希函数构造方法,并阐述各自的特点. 直接定址法 除留余数法 数字分析法 其他构造整数关键字的哈希函数的方法: 平方取中法 ...

  4. 哈希表(闭散列、拉链法--哈希桶)

    哈希表,也称散列表,是一种通过key值来直接访问在内存中的存储的数据结构.它通过一个关键值的函数(被称为散列函数)将所需的数据映射到表中的位置来访问数据. 关于哈希表,主要为以下几个方面: 一.哈希表 ...

  5. java集合表_java集合类散列表

    哈希表 是种数据结构,它可以提供快速的插入操作和查找操作.第一次接触哈希表时,它的优点多得让人难以置信.不论哈希表中有多少数据, 插入和删除(有时包括侧除)只需要接近常量的时间即0(1)的时间级.实际 ...

  6. 什么是散列表(哈希表)?

    散列表(哈希表) 概念 散列表的构造方法 处理冲突的方法 后续 概念 散列函数:一个把查找表中的关键字映射成该关键字对应的地址的函数,记为Hash(key)=Addr(这里的地址可以是数组下标.索引或 ...

  7. Hash表(哈希表、散列表)

    哈希表 概念 为什么需要哈希表 静态查找表与动态查找表中,为了查找某关键字值等于某个值的记录,都要经过一系列的关键字进行比较,以确定待查记录的储存位置或查找失败,查找的时间总是与比较次数有关 什么是哈 ...

  8. 散列表(哈希表)工作原理 (转)

    1. 引言        哈希表(Hash Table)的应用近两年才在NOI中出现,作为一种高效的数据结构,它正在竞赛中发挥着越来越重要的作用. 哈希表最大的优点,就是把数据的存储和查找消耗的时间大 ...

  9. 【Java数据结构与算法】第十章 哈希表和二叉树

    第十章 哈希表和二叉树 文章目录 第十章 哈希表和二叉树 一.哈希表 1.介绍 2.代码实现 二.二叉树 1.介绍 2.遍历二叉树 3.查找二叉树 4.二叉树删除节点 5.二叉树综合实例 一.哈希表 ...

最新文章

  1. 转载 oracle12c 切换字符集
  2. 《the way to go》一处关于go匿名函数的“勘误”
  3. ASP.NET Core分布式项目实战(集成ASP.NETCore Identity)--学习笔记
  4. matplotlib的颜色和控制条
  5. arduino 舵机接线图_用fritzing绘制arduino硬件连线图
  6. MFC 中获取各种类指针的方法
  7. ai人工智能可以干什么_我们可以使人工智能更具道德性吗?
  8. UVAOJ1586题解
  9. SQL入门之第八讲——UPDATE更新语句
  10. Neverland Test 2.0
  11. 小强统一认证中心开源介绍
  12. 芭蕉树上第十八根芭蕉-- Qt图片绘图类QPixmap/QImage/QPicture
  13. 经典逻辑题笔试题和答案(不断更新)
  14. matlab灰色预测关联度
  15. bzoj 3730 震波 —— 动态点分治+树状数组
  16. Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exc
  17. 破竹课堂-老A的杠杆术
  18. SPSS数据分析中出现的常见问题总结
  19. 产品公司解决方案、解决方案公司解决方案,可能你做了一辈子IT你也不知道...
  20. MongoDB启动命令

热门文章

  1. 黑苹果键盘对应的相应按键
  2. ios开发之音频视频开发
  3. 防止后缀aol.com}AOL勒索病毒*** .com}AOL勒索病毒解密工具处理方法
  4. linux ps-e和-ax区别,Linux编程 6 (查看进程 ps 及输出风格)
  5. 伤感!!!!!!!!!!!!!!!
  6. 给你一台大疆无人机,你能用来做点啥?(二)-----——倾斜摄影建模
  7. 51单片机实现万年历
  8. eclipes error
  9. linuxService
  10. V型反弹的名场面,荣耀能否在海外市场“荣耀”?