一、哈希表的定义:

二、哈希表举例:
哈希函数就是映射关系

三、哈希表应用举例:
Leetcode上第387题:

思路:通过s.charAt(i)-'a’将字符串中的字符映射成hash表,出现一次,在相应位置加一,左后找到第一个值为1的下标
其他思路:当然此题解决方案很多,如一位一位的遍历亦可以

四、哈希函数:

  • 将业务场景中的键转化为索引的过程称为哈希表的核心
  • 即使再优秀的哈希表也保证不了一个键对应一个不同的索引,这就是哈希冲突
  • 哈希函数设计原则:一致性(equals相等这hash值相等)、高效性(简单高效)、均匀性(尽可能使得hash值分布均匀)
  • 哈希表体现了空间换时间的原理

为了降低哈希冲突,需要采用大于实际存储数据数量的哈希表,这就是空间换时间的原理。

五、常见哈希函数:
1.整型
小整数:

  • 小正整数:直接使用;如0-9
  • 小负整数:偏移成正整数再使用;如-10-0可以先加10再使用

大整数:

  • 大整数取部分:如复杂的学号20210917141122,如果直接使用需要20210917141122长的哈希表,取部分,如17141122则可以节省很大的空间。

  • 大整数对m取模:m的值很重要,一般是质数取模,哈希冲突的概率小

质数是除了1与自身之外没有其他约数的自然数;0与1既不是质数也不是合数

业内总结数值区间与最优取模值,如下:

2.浮点型
转化为整数即可

3.字符串
通过直接转换或者B进制数,转化为整数即可

如果B很大可以每一项都先取模:

3.引用数据类型
可以让其中的成员变量各自哈希得出;
Java中的hashCode(),为我们计算string类型的hash值;

六、哈希冲突处理方法:

再完美的hash算法也不可能避免hash冲突,因此需要有处理hash冲突的方法;

1.链地址法(常用):
hashMap、hashSet底层均是散列表;其解决hash冲突的方式就是链地址法;

2.开发地址法:
如果遇到hash冲突,开放地址法有四种处理方案:
线性探测法:冲突时,就去存相邻位置,以此类推
平方探测法:冲突时,进行平方找位置,以此类推
再哈希法: 再次用其他的hash算法,进行一次或多次hash
合理扩容: 为了较少hash冲突可进行适当扩容

数据结构与算法更多相关内容【持续更新中】:

  • 【数据结构与算法一:时间频度和时间复杂度】: 传送门.
  • 【数据结构与算法二:数组】: 传送门.
  • 【数据结构与算法三:栈和队列】: 传送门.
  • 【数据结构与算法四:链表】: 传送门.
  • 【数据结构与算法五:哈希表-哈希函数设计原则-哈希冲突解决方案】: 传送门.

数据结构与算法五:哈希表-哈希函数设计原则-哈希冲突解决方案相关推荐

  1. 数据结构与算法第二章 线性表、栈、队列、数组、字符串、树、二叉树、哈希表的增删查

    03 增删查:掌握数据处理的基本操作,以不变应万变 通过前面课时的学习,相信你已经建立了利用数据结构去完成时空转移的思想.接下来,你需要在理论思想的指导下灵活使用.其实,要想灵活使用数据结构,你需要先 ...

  2. hbase表的行键设计原则

     hbase表的行键设计原则 原理: HBase是一个分布式的.面向列的数据库,它和一般关系型数据库的最大区别是:HBase很适合于存储非结构化的数据,还有就是它基于列的而不是基于行的模式. 既然HB ...

  3. C++(数据结构与算法):30---散列(哈希)表的介绍(散列函数、散列冲突、散列溢出)

    一.散列(哈希)介绍 散列使用一个散列函数(也称为哈希函数)把字典的数对映射到一个散列表(也称为哈希表)的具体位置 散列的存储与查找: 查找:如果数对p的关键字是k,散列函数为f,那么在理想的情况下, ...

  4. Android版数据结构与算法(五):LinkedHashMap核心源码彻底分析

    版权声明:本文出自汪磊的博客,未经作者允许禁止转载. 上一篇基于哈希表实现HashMap核心源码彻底分析 分析了HashMap的源码,主要分析了扩容机制,如果感兴趣的可以去看看,扩容机制那几行最难懂的 ...

  5. 【数据结构与算法】之线性表的应用和操作

    数据结构概念 数据结构:是相互之间存在一种或多种特定关系的数据元素的集合. 数据结构的逻辑结构:数据对象中数据元素之间的相互关系,分为线性结构.树形结构.图形结构以及集合结构. 数据结构的物理结构:数 ...

  6. 【数据结构与算法基础】线性表

    写在前面 挺早之前看的数据结构和算法了,但是最近刷LeetCode上题目的时候发现还不是很熟练(都忘光了....),于是狠心再来一遍.边整理边刷题,用的教材是北大裘宗燕的<数据结构与算法pyth ...

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

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

  8. 算法练习day12——190331(哈希函数、哈希表、布隆过滤器、一致性哈希)

    1.哈希函数 1.1 特点: 经典的哈希函数输入域是无穷大的. 输出域是有穷尽的: 相同输入得到的输出肯定是一样的: 不同的输入得到的输出也可能一样(输入域>输出域); 哈希函数的离散型:给定多 ...

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

    学习地址:[数据结构与算法基础-java版]                  

最新文章

  1. Openfire XMPP Smack RTC IM 即时通讯 聊天 MD
  2. Java并发编程(五)JVM指令重排
  3. log4net简介(三)之无法写入日志
  4. mysql优化的几种方法_详解mysql数据库不同类型sql语句优化方法
  5. 如何通过递归找父节点或子节点详解
  6. 华为云视频Cloud Native架构设计与工程实践
  7. 1.20(设计模式)模板模式
  8. Sentinel(十三)之动态规则扩展
  9. 狗狗手机壁纸|爱宠必备
  10. 从在浏览器中输入URL到页面渲染出来的完整过程是怎样的?
  11. C# list集合 重复元素 索引_Python列表(List)
  12. 最新版MySQL 8.0.22(Windows 64位)下载安装详细方法
  13. 个人自媒体技术分享博客网站模板
  14. 硬件开发笔记(十): 硬件开发基本流程,制作一个USB转RS232的模块(九):创建CH340G/MAX232封装库sop-16并关联原理图元器件
  15. 设置背景图片自动适应屏幕
  16. 押宝线下渠道 能否拯救陷入芯片困境的魅族?
  17. infoq_InfoQ与Azul Systems Gil Tene谈论Zing,Zulu和新版本
  18. 有关excel中宏的使用问题
  19. android wifi讲解 wifi列表显示
  20. firefox firbug 的“阻挡”

热门文章

  1. 网页老是打不开 跟断网一样
  2. 离线计算七 辅助系统(flume、sqoop、oozie)
  3. Bootstrap(全局CSS之表单按钮图片辅助类响应式工具)
  4. 华为交换机查看端口相关信息常用命令
  5. 直播一对一社交源码交友软件平台搭建解决方案
  6. 【名单回顾】2019年海淀区智慧杯“编程思维”C/C++项目线下决赛获奖名单(小学组)
  7. 杨辉三角形【第十二届】【省赛】【B组】
  8. 新显卡出世,我们来谈谈与深度学习有关的显卡架构和相关技术
  9. gettag java_Java TagLibraryInfo.getTag方法代码示例
  10. 复习队列的入队和出队操作