一、散列表(哈希表)

  1. 根据key直接访问内存的存储结构。散列表建立了关键字与存储地址之间直接映射的关系。
  2. 查找的时间复杂度O(1)。
  3. 散列表的查找效率取决于三个因素:散列函数、处理冲突的方法、装填因子α。
    1. 装填因子计算: 。 其中,n是表中记录数,m是表长。
    2. 散列表平均查找长度不直接依赖于表中记录数n和表长m。
    3. α越大,表示装填的记录越满,发生冲突的可能性越大。
  4. ★注意查找成功和查找失败时的平均查找长度的计算。

二、散列函数 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) 适合经常插入、删除的情况。


四、例题

首先明确下如何求查找成功、查找失败时的平均查找长度。

  1. ★ ★查找成功的平均查找长度:比较次数   / (关键字个数) ★ ★
  2. ★ ★查找失败的平均查找长度:查找到空位置的比较次数   /  ( H(key)的mod数 ) ★ ★

特别注意查找失败的平均查找长度求法:查找到空位置的比较次数是0~ mod-1 这些位置,依次向后查找,查找到内容为空的单元  的比较次数。与采用什么样的冲突解决方法无关。(对比下面线性探测法和平方探测法的例题去理解)

线性探测法例题:

解:

这里比较次数,就是步骤(一)构建散列表的插入时比较次数,因此有必要在建表时记录。

注意是  位置0~mod-1


平方探测法例题:

解:


链地址法例题:

解:

注意是  位置0~mod-1

有的题目会明确说,查找失败只计入关键字比较次数,与null比较不算在内。则有几个元素,查找几次。

参考:

bilibili 狂暴的南希

数据结构--哈希查找相关推荐

  1. 数据结构哈希查找的C语言实现

           大家好,我是练习编程时长两年半的昆工第一ikun,今天我们来分享查找算法中的一个--哈希查找,哈希查找适用于有庞大的数据量时的查找,是一种很好用的查找算法,话不多说,开团!!! 一.六种 ...

  2. 数据结构——哈希查找的实现(C语言)

    哈希查找算法的思想:通过对元素的关键字值进行某种运算,直接求出元素的地址,即使用关键字到地址的直接转换方法,而不需要反复比较. 直接转换方法有很多,这里介绍最常用的一种方法:除留取余法,即H(key) ...

  3. 数据结构实验之查找七:线性之哈希表

    数据结构实验之查找七:线性之哈希表 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Problem Description 根据给定 ...

  4. 【数据结构笔记】B树和B+树的实现,哈希查找,STL中的hash_map和unordered_map容器用法

    B和B+树 哈希查找 用开放定址法解决哈希冲突的哈希查找算法 链地址法: 利用哈希表查找一个字符串中第一个只出现一次的字符 hash_map和unordered_map 设计算法删除重复的元素 设计算 ...

  5. SDUT 3379 数据结构实验之查找七:线性之哈希表

    数据结构实验之查找七:线性之哈希表 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 根据给定的一系列整数关键字和素数p, ...

  6. SDUT 3377 数据结构实验之查找五:平方之哈希表

    数据结构实验之查找五:平方之哈希表 Time Limit: 400MS Memory Limit: 65536KB Submit Statistic Problem Description 给定的一组 ...

  7. 数据结构和算法系列13 五大查找之哈希查找

    原文地址 http://www.cnblogs.com/mcgrady/p/3294871.html 数据结构和算法系列13 五大查找之哈希查找 这一篇要总结的是五天查找的最后一篇,哈希查找,也称为散 ...

  8. 【除留余数法定义hash函数+线性探测法解决hash冲突】数据结构实验之查找七:线性之哈希表

    Think: 1知识点:除留余数法定义hash函数+线性探测法解决hash冲突 数据结构实验之查找七:线性之哈希表 Time Limit: 1000MS Memory Limit: 65536KB P ...

  9. 数据结构与算法 ~ 查找 ~ 散列查找(哈希~线性探查法和二次探查法)

    数据结构与算法 ~ 查找 ~ 散列查找(哈希~线性探查法和二次探查法) /*search-hash*/ #include<math.h> #include<stdio.h> # ...

最新文章

  1. 启用tomcat debug模式
  2. Android NDK 编译选项设置[zhuan]
  3. 安装ORACLE RAC时,用到的一些小命令1.弹出CD,2:配置时间同步,3.查看磁盘信息UUID
  4. HTMLCSS 第三天 笔记
  5. 算法设计与分析——递归与分治策略——全排列
  6. OpenKG 祝大家新春快乐
  7. 服务器能记录远程访问用户嘛,bat记录远程桌面连接登录信息
  8. Eclipse 答疑:Eclipse 如何更换夜间及外部主题?如何修改代码样式、背景颜色、字体大小?为何注释文字大小不一?
  9. qt添加菜单纯代码_QtCreator插件开发(二)——QtCreator菜单和菜单项
  10. axis webservice 实验
  11. android获取Bitmap对象,获取图片宽高
  12. 腾讯云主机ssh自动断开解决办法
  13. Git - 时光机穿梭
  14. 《算法竞赛入门经典》Chap3
  15. vue指令学习——vue基本用法
  16. okl4 linux,数据接入 API
  17. 三星gtn8010安卓7_三星平板N8000刷机升级安卓版本到7.1过程记录
  18. 互联网造车定位称王还是镜花水月
  19. 基于脑机接口的光感知视觉机制模型
  20. 视频怎么压缩到20M以内

热门文章

  1. HWC与GPU混合渲染
  2. 深富策略猪肉板块表现强势
  3. 详解准确率、精确率、召回率、F1值的含义
  4. 1. 使用SimpleDateFormat类,把2018-03-04转换为2018年03月04日 2. 用程序判断2018年2月14日是星期几。 3. 键盘录入一个年份,判断这
  5. Ubuntu 14.04 LTS 英文环境下中文字体修改
  6. 如何实战开发一款小游戏
  7. Java包装类作为参数传递
  8. linux常问面试题
  9. 51单片机动态数码管显示
  10. 性能指标之时延、时延带宽积、往返时间RTT、利用率