数据结构:哈希表函数构造和冲突解决方法
哈希表
哈希函数:记录的存储位置和它的关键字之间建立一个确定的对应关系。
冲突:对不同的关键字可能得到同一哈希地址,这种现象称为冲突。
哈希函数构造方法
1.直接定址法
取关键字或关键字的某个线性函数值为哈希地址,即:
或
2.数字分析法
3.平方取中法
取关键字平方后的中间几位为哈希地址。这是一种较常用的构造哈希函数的方法。一个数平方后的中间几位数和数的每一位都相关。
4.折叠法
5.除留余数法
取关键字被某个不大于哈希表表长m的数p除后所得余数为哈希地址,即
这是最简单也是最常用的构造哈希函数的方法。不仅可以对关键字直接取模,也可以在折叠,平方取中等运算之后取模。
6.随机数法
冲突处理方法
1.开放定址法
为哈希函数;为增量序列,可有下列三种取法:
- ,称为线性探测再散列;
- ,称为二次探测再散列;
- 为伪随机数列,称为伪随机探测再散列。
2.再哈希法
均是不同的哈希函数,即在同义词产生地址冲突时计算另一个哈希函数地址,直到冲突不再发生,但是增加了计算时间。
3.链地址法
将所有关键字为同义词的记录存储在同一线性链表中。
平均查找长度以牛客网中的一个题目举例:
设散列表的长度为10,散列函数H(n)=n mod 7,初始关键字序列为 (33,24,8,17,21,10),用链地址法作为解决冲突的方法,平均查找长度是():
33/7=5, 查找33需要1次;
24/7=3,查找24需要1次;
8/7=1,查找8需要1次;
17/7=3,查找17需要2次;
21/7=0,查找21需要1次;
10/7=3,查找10需要3次;
ASL=每个关键字查找的次数之和/关键字的个数=(1+1+1+2+3+1)/6=1.5
4.建立一个公共溢出区
哈希表的查找及分析
哈希表的装填因子定义为
,
为表中填入的记录数,为哈希表的长度。标志着哈希表的装满程度。
线性探测再散列的哈希表查找成功时的平均查找长度
,
随机探测再散列,二次探测再散列查找成功时平均查找长度
,
链地址法处理冲突的哈希表查找成功时的平均查找长度为
。
参考:
数据结构(c语言版),严蔚敏
数据结构:哈希表函数构造和冲突解决方法相关推荐
- 数据结构 - 哈希表(散列表)
一.概念 散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构.也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快 ...
- Hash函数与算法、哈希查找、哈希冲突解决方法总结
Hash哈希知识点导航 1.基本概念 2. 哈希函数 2.1 直接寻址法 2.2 数字分析法 2.3 平方取中法 2.4 折叠法 2.5 随机数法 2.6 除留余数法 3. 哈 ...
- 哈希表的构造和查找算法
实现哈希表的构造和查找算法,要求:用除留余数法构造哈希函数,分别用一次探测再散列.二次探测再散列解决冲突. #include<stdio.h> #include<stdlib.h&g ...
- Python中常用的数据结构---哈希表(字典)
Python中常用的数据结构-哈希表(字典) 常用的数据结构有数组.链表(一对一).栈和队列.哈希表.树(一对多).图(多对多)等结构. 在本目录下我们将讲解,通过python语言实现常用的数据结构. ...
- 数据结构——哈希表的详解与实现
数据结构--哈希表(HashTable) 1.前言 当我们频繁的查找数据中的某个元素时,我们通常会选择数组来存放数据,因为数组的的内存是连续的,可以直接通过下标访问数据,但是它添加和删除数据比较麻 ...
- 算法笔记(三)特殊数据结构——哈希表、有序表、并查集、KMP、Manacher、单调栈、位图、大数据类题
layout: post title: 算法笔记(三)特殊数据结构--哈希表.有序表.并查集.KMP.Manacher.单调栈.位图.大数据类题 description: 算法笔记(三)特殊数据结构- ...
- 数据结构哈希表的实现与设计
数据结构哈希表查找姓名的课程设计 有没有大神能帮忙写一下这道题,课设的题目.用C++语言 问题描述:针对某公司中花名设计哈希表,并完成相应的建表和查表程序,基本要求: (1)假设花名为汉字拼音形式.名 ...
- java hashtable 数据结构_数据结构--哈希表(Java)
数据结构--哈希表(Java) 介绍 哈希表 底层是 数组加链表 或者是 数组加二叉树 ,一个数组里面有多个链表,通过散列函数来提高效率 代码 package cn.guizimo.hashtab; ...
- 一文搞定哈希(六种构建、四种冲突解决方法、查找算法总结)
写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...
最新文章
- Linux下使用nmap扫描局域网存活的IP
- c语言坐标三角形判断,【C语言】判断三角形类型(示例代码)
- REVIT使用中遇到的各种问题汇总
- iterm2 保存阿里云登陆并防止断开连接
- php在window,php在window上的问题
- CentOS6.4x64_安装Qt5
- Kafka产品迭代计划(RoadMap)
- python如何调用参数配置文件_【Python学习笔记七】从配置文件中读取参数
- 快手打击低俗直播 封禁一批高粉用户
- SQL Server 2005中设置Reporting Services发布web报表的匿名访问
- 【数据结构】思维导图补充知识
- Directx使用基础
- 吉米多维奇数学分析习题集每日一题--泰勒公式习题1376
- cannot be cast to com.activiti.common.config.ICustomProcessDiagramGenerator
- CSS动画实现的三种方式
- GameCenter接入
- 设备驱动安装不上怎么办?
- 使用Linux搭建IPV6路由器
- python赋值语句
- c语言中的16进制坐标计算器,十六进制计算器_16进制计算器
热门文章
- lumia920 和htc 8x的对比评测
- 想写一篇关于.net下COM工作原理的文章
- XCTF-MISC-新手区-gif
- html怎么改变一块区域颜色,更改HTML中所选区域的背景颜色/不透明度
- 第三方免费开放API 获取用户IP 并查询其地理位置
- iview Table列表中增加字体图标
- java最大内存_JAVA:测试java虚拟机支持的最大内存 Xmx 值?Tomcat 内存溢出?
- this.$nextTick()的使用场景
- typescript设置只读属性和任意类型
- echarts中x轴文字过长换行处理和倾斜处理。