哈希表

哈希函数:记录的存储位置和它的关键字之间建立一个确定的对应关系

冲突:对不同的关键字可能得到同一哈希地址,这种现象称为冲突。

哈希函数构造方法

1.直接定址法

取关键字或关键字的某个线性函数值为哈希地址,即:

2.数字分析法

3.平方取中法

取关键字平方后的中间几位为哈希地址。这是一种较常用的构造哈希函数的方法。一个数平方后的中间几位数和数的每一位都相关。

4.折叠法

5.除留余数法

取关键字被某个不大于哈希表表长m的数p除后所得余数为哈希地址,即

这是最简单也是最常用的构造哈希函数的方法。不仅可以对关键字直接取模,也可以在折叠,平方取中等运算之后取模。

6.随机数法

冲突处理方法

1.开放定址法

为哈希函数;为增量序列,可有下列三种取法:

  1. ,称为线性探测再散列;
  2. ,称为二次探测再散列;
  3. 为伪随机数列,称为伪随机探测再散列。

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语言版),严蔚敏

数据结构:哈希表函数构造和冲突解决方法相关推荐

  1. 数据结构 - 哈希表(散列表)

    一.概念 散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构.也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快 ...

  2. Hash函数与算法、哈希查找、哈希冲突解决方法总结

    Hash哈希知识点导航 1.基本概念 2. 哈希函数   2.1 直接寻址法   2.2 数字分析法   2.3 平方取中法   2.4 折叠法   2.5 随机数法   2.6 除留余数法 3. 哈 ...

  3. 哈希表的构造和查找算法

    实现哈希表的构造和查找算法,要求:用除留余数法构造哈希函数,分别用一次探测再散列.二次探测再散列解决冲突. #include<stdio.h> #include<stdlib.h&g ...

  4. Python中常用的数据结构---哈希表(字典)

    Python中常用的数据结构-哈希表(字典) 常用的数据结构有数组.链表(一对一).栈和队列.哈希表.树(一对多).图(多对多)等结构. 在本目录下我们将讲解,通过python语言实现常用的数据结构. ...

  5. 数据结构——哈希表的详解与实现

    数据结构--哈希表(HashTable) 1.前言 ​ 当我们频繁的查找数据中的某个元素时,我们通常会选择数组来存放数据,因为数组的的内存是连续的,可以直接通过下标访问数据,但是它添加和删除数据比较麻 ...

  6. 算法笔记(三)特殊数据结构——哈希表、有序表、并查集、KMP、Manacher、单调栈、位图、大数据类题

    layout: post title: 算法笔记(三)特殊数据结构--哈希表.有序表.并查集.KMP.Manacher.单调栈.位图.大数据类题 description: 算法笔记(三)特殊数据结构- ...

  7. 数据结构哈希表的实现与设计

    数据结构哈希表查找姓名的课程设计 有没有大神能帮忙写一下这道题,课设的题目.用C++语言 问题描述:针对某公司中花名设计哈希表,并完成相应的建表和查表程序,基本要求: (1)假设花名为汉字拼音形式.名 ...

  8. java hashtable 数据结构_数据结构--哈希表(Java)

    数据结构--哈希表(Java) 介绍 哈希表 底层是 数组加链表 或者是 数组加二叉树 ,一个数组里面有多个链表,通过散列函数来提高效率 代码 package cn.guizimo.hashtab; ...

  9. 一文搞定哈希(六种构建、四种冲突解决方法、查找算法总结)

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

最新文章

  1. Linux下使用nmap扫描局域网存活的IP
  2. c语言坐标三角形判断,【C语言】判断三角形类型(示例代码)
  3. REVIT使用中遇到的各种问题汇总
  4. iterm2 保存阿里云登陆并防止断开连接
  5. php在window,php在window上的问题
  6. CentOS6.4x64_安装Qt5
  7. Kafka产品迭代计划(RoadMap)
  8. python如何调用参数配置文件_【Python学习笔记七】从配置文件中读取参数
  9. 快手打击低俗直播 封禁一批高粉用户
  10. SQL Server 2005中设置Reporting Services发布web报表的匿名访问
  11. 【数据结构】思维导图补充知识
  12. Directx使用基础
  13. 吉米多维奇数学分析习题集每日一题--泰勒公式习题1376
  14. cannot be cast to com.activiti.common.config.ICustomProcessDiagramGenerator
  15. CSS动画实现的三种方式
  16. GameCenter接入
  17. 设备驱动安装不上怎么办?
  18. 使用Linux搭建IPV6路由器
  19. python赋值语句
  20. c语言中的16进制坐标计算器,十六进制计算器_16进制计算器

热门文章

  1. lumia920 和htc 8x的对比评测
  2. 想写一篇关于.net下COM工作原理的文章
  3. XCTF-MISC-新手区-gif
  4. html怎么改变一块区域颜色,更改HTML中所选区域的背景颜色/不透明度
  5. 第三方免费开放API 获取用户IP 并查询其地理位置
  6. iview Table列表中增加字体图标
  7. java最大内存_JAVA:测试java虚拟机支持的最大内存 Xmx 值?Tomcat 内存溢出?
  8. this.$nextTick()的使用场景
  9. typescript设置只读属性和任意类型
  10. echarts中x轴文字过长换行处理和倾斜处理。