数据结构Java10【哈希表概述、散列函数的设计、散列冲突解决方案】

学习地址:https://www.bilibili.com/video/BV1Zt411o7Rn【数据结构与算法基础-java版】

🚀数据结构--Java专栏:https://blog.csdn.net/weixin_44949135/category_10103369.html🚀
笔记01【01-09https://blog.csdn.net/weixin_44949135/article/details/106742935【概述、数组基本使用】【源码、课件】
笔记02【10-18https://blog.csdn.net/weixin_44949135/article/details/106746038【栈、队列、单链表、链表、递归】
笔记03【19-27https://blog.csdn.net/weixin_44949135/article/details/106784224【八大排序算法】
笔记04【28-33https://blog.csdn.net/weixin_44949135/article/details/106823785【树结构概述、二叉树】
笔记05【34-39https://blog.csdn.net/weixin_44949135/article/details/106832176【顺序存储二叉树、堆排、线索二叉树】
笔记06【40-48https://blog.csdn.net/weixin_44949135/article/details/106843814【赫夫曼树、解码、压缩&解压文件】
笔记07【49-54https://blog.csdn.net/weixin_44949135/article/details/106886659【二叉排序树】
笔记08【55-57https://blog.csdn.net/weixin_44949135/article/details/106896570【平衡二叉树(AVL)】
笔记09【58-60https://blog.csdn.net/weixin_44949135/article/details/106852286【计算机数据存储原理、2-3树、B树】
笔记10【61-63https://blog.csdn.net/weixin_44949135/article/details/106936504【哈希表、散列函数设计、解决冲突】
笔记11【64-67https://blog.csdn.net/weixin_44949135/article/details/106939350【图概述、图遍历(DFS、BFS)】

目   录

P61 5.1 哈希表概述

1、哈希表概念

P62 5.2 散列函数的设计

P63 5.3 散列冲突的解决方案

1、开放地址法

1.1、线性探测法

1.2、二次探测法

1.3、再哈希法

2、链地址法


P61 5.1 哈希表概述

1、哈希表概念

百度百科:https://baike.baidu.com/item/%E5%93%88%E5%B8%8C%E8%A1%A8/5981869?fr=aladdin

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表

给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后,若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash)函数。

  • 若关键字为k,则其值存放在f(k)的存储位置上。由此,不需比较便可直接取得所查记录。称这个对应关系f为散列函数,按这个思想建立的表为散列表。

  • 对不同的关键字可能得到同一散列地址,即k1≠k2,而f(k1)=f(k2),这种现象称为冲突(英语:Collision)。具有相同函数值的关键字对该散列函数来说称做同义词。综上所述,根据散列函数f(k)和处理冲突的方法将一组关键字映射到一个有限的连续的地址集(区间)上,并以关键字在地址集中的“像”作为记录在表中的存储位置,这种表便称为散列表,这一映射过程称为散列造表散列,所得的存储位置称散列地址

  • 若对于关键字集合中的任一个关键字,经散列函数映象到地址集合中任何一个地址的概率是相等的,则称此类散列函数为均匀散列函数(Uniform Hash function),这就是使关键字经过散列函数得到一个“随机的地址”,从而减少冲突。

哈希表(散列表):关键字年龄,通过存储位置(取余/减去固定值),返回相应的数据。

P62 5.2 散列函数的设计

散列函数的设计:计算简单、分布均匀。 

直接定址法(直接、计算简单、不好用、分布不均匀):将关键字作为 下标(存储地址)。【电话号码,不适合!】

数字分析法:需要提前知道关键字。

平方取中法:数字进行平方运算,取中间1、2、3个数字。

随机数法:存储地址=random();

哈希表底层,使用数组。

P63 5.3 散列冲突的解决方案

散列函数:解决地址冲突问题。【数据:11、12、22、21、23】【取余法(%10)】

1、开放地址法

1.1、线性探测法

线性探测法:数据冲突,紧跟着数据 进行存储。问题:数据聚集。

1.2、二次探测法

二次探测法:解决数据聚集问题。数据所在的位置,已有数据,根据 1^2、2^2、3^2……往后放。

1.3、再哈希法

散列函数

2、链地址法

链表:无限延伸。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章