数据结构--哈希查找
一、散列表(哈希表)
- 根据key直接访问内存的存储结构。散列表建立了关键字与存储地址之间直接映射的关系。
- 查找的时间复杂度O(1)。
- 散列表的查找效率取决于三个因素:散列函数、处理冲突的方法、装填因子α。
- 装填因子计算: 。 其中,n是表中记录数,m是表长。
- 散列表平均查找长度不直接依赖于表中记录数n和表长m。
- α越大,表示装填的记录越满,发生冲突的可能性越大。
- ★注意查找成功和查找失败时的平均查找长度的计算。
二、散列函数 H(key)
1. 直接定址法:
H(key) = key 或者 H(key) = a*key+b
2. 除留取余法:
H(key) = key%p (假设表长为m,p取不大于m的最大质数)
3. 数字分析法:
r进制的关键字,r个数码在各位上出现的频率不一定相同,可能在某些位上分布的均匀一些,每种数码出线机会相等;也有可能某些位上分布不均匀,只有几种数码经常出现。此时应该选择数码分布均匀的若干位作为散列地址。
4. 平方取中法:
取关键字平方值中间几位作为散列地址。
三、处理冲突的方法:
1. 开放定址法:
(1)线性探测法:
a) 发生冲突后,顺序查看表中下一个单元,直到找到一个空闲单元。
b) 容易造成大量元素在相邻的散列地址聚集(堆积)的现象。
(2)平方探测法:
a) 发生冲突后,对当前下标进行处理,分别加上 直到找到空闲单元。
b) 可以有效降低“堆积”现象的出现。
(3)再散列法:
a) 需要两个散列函数,在发生冲突后,对该下标使用第二个散列函数计算其增量。
b) 。其中 i是冲突的次数。
2. 链地址法:
(1) 将同义词存储在 以下标为头的线性链表中。
(2) 适合经常插入、删除的情况。
四、例题
首先明确下如何求查找成功、查找失败时的平均查找长度。
- ★ ★查找成功的平均查找长度:比较次数 / (关键字个数) ★ ★
- ★ ★查找失败的平均查找长度:查找到空位置的比较次数 / ( H(key)的mod数 ) ★ ★
特别注意查找失败的平均查找长度求法:查找到空位置的比较次数是0~ mod-1 这些位置,依次向后查找,查找到内容为空的单元 的比较次数。与采用什么样的冲突解决方法无关。(对比下面线性探测法和平方探测法的例题去理解)
线性探测法例题:
解:
这里比较次数,就是步骤(一)构建散列表的插入时比较次数,因此有必要在建表时记录。
注意是 位置0~mod-1
平方探测法例题:
解:
链地址法例题:
解:
注意是 位置0~mod-1
有的题目会明确说,查找失败只计入关键字比较次数,与null比较不算在内。则有几个元素,查找几次。
参考:
bilibili 狂暴的南希
数据结构--哈希查找相关推荐
- 数据结构哈希查找的C语言实现
大家好,我是练习编程时长两年半的昆工第一ikun,今天我们来分享查找算法中的一个--哈希查找,哈希查找适用于有庞大的数据量时的查找,是一种很好用的查找算法,话不多说,开团!!! 一.六种 ...
- 数据结构——哈希查找的实现(C语言)
哈希查找算法的思想:通过对元素的关键字值进行某种运算,直接求出元素的地址,即使用关键字到地址的直接转换方法,而不需要反复比较. 直接转换方法有很多,这里介绍最常用的一种方法:除留取余法,即H(key) ...
- 数据结构实验之查找七:线性之哈希表
数据结构实验之查找七:线性之哈希表 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 根据给定 ...
- 【数据结构笔记】B树和B+树的实现,哈希查找,STL中的hash_map和unordered_map容器用法
B和B+树 哈希查找 用开放定址法解决哈希冲突的哈希查找算法 链地址法: 利用哈希表查找一个字符串中第一个只出现一次的字符 hash_map和unordered_map 设计算法删除重复的元素 设计算 ...
- SDUT 3379 数据结构实验之查找七:线性之哈希表
数据结构实验之查找七:线性之哈希表 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 根据给定的一系列整数关键字和素数p, ...
- SDUT 3377 数据结构实验之查找五:平方之哈希表
数据结构实验之查找五:平方之哈希表 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 给定的一组 ...
- 数据结构和算法系列13 五大查找之哈希查找
原文地址 http://www.cnblogs.com/mcgrady/p/3294871.html 数据结构和算法系列13 五大查找之哈希查找 这一篇要总结的是五天查找的最后一篇,哈希查找,也称为散 ...
- 【除留余数法定义hash函数+线性探测法解决hash冲突】数据结构实验之查找七:线性之哈希表
Think: 1知识点:除留余数法定义hash函数+线性探测法解决hash冲突 数据结构实验之查找七:线性之哈希表 Time Limit: 1000MS Memory Limit: 65536KB P ...
- 数据结构与算法 ~ 查找 ~ 散列查找(哈希~线性探查法和二次探查法)
数据结构与算法 ~ 查找 ~ 散列查找(哈希~线性探查法和二次探查法) /*search-hash*/ #include<math.h> #include<stdio.h> # ...
最新文章
- 启用tomcat debug模式
- Android NDK 编译选项设置[zhuan]
- 安装ORACLE RAC时,用到的一些小命令1.弹出CD,2:配置时间同步,3.查看磁盘信息UUID
- HTMLCSS 第三天 笔记
- 算法设计与分析——递归与分治策略——全排列
- OpenKG 祝大家新春快乐
- 服务器能记录远程访问用户嘛,bat记录远程桌面连接登录信息
- Eclipse 答疑:Eclipse 如何更换夜间及外部主题?如何修改代码样式、背景颜色、字体大小?为何注释文字大小不一?
- qt添加菜单纯代码_QtCreator插件开发(二)——QtCreator菜单和菜单项
- axis webservice 实验
- android获取Bitmap对象,获取图片宽高
- 腾讯云主机ssh自动断开解决办法
- Git - 时光机穿梭
- 《算法竞赛入门经典》Chap3
- vue指令学习——vue基本用法
- okl4 linux,数据接入 API
- 三星gtn8010安卓7_三星平板N8000刷机升级安卓版本到7.1过程记录
- 互联网造车定位称王还是镜花水月
- 基于脑机接口的光感知视觉机制模型
- 视频怎么压缩到20M以内