哈希表 Hash table 散列表

特点

  • 接近O(1)的查找效率
  • 根据键(key 关键值)而直接访问在内存存储位置
  • 本质上是一个数组,数组里面存的链表

原理和例子

  • 原始数据(key 关键值) —— 哈希函数(散列函数)—— 得到一个值(类似于数组下标),映射到表中一个位置(散列表)
  • 小王 —— 取首字母 —— W —— 电话博里面W那一页
  • 地址 index=H(key)
  • 键值对 key—— value 键值——Hush值 学号——名字

哈希函数构造方法

  • 考虑因素

    • 计算散列地址所需要的时间 关键字长度是否均匀,是否有规律可循 表长 Hush冲突
  • 构造方法
  • 直接定制法
    • H(key)=a*key+b 仅限于地址大小=关键字集合
  • 数字分析法
    • 假设每个关键字key都是由s位数字组成(k1 , k2 , … Kn)并从中提取分布均匀的若干位或他们的组合构成全体
    • 比如同一地区的同学,身份证5位相同,那取后几位存储 H(key)=key%100000
  • 平方取中法
    • 先求关键字的平方值,通过平方扩大差异,而后取中间数位作为最终存储地址 key=1234 1234^2=1522756 取227作hash地址
  • 折叠法:
    • 数字的位数很多,可以将数字分割为几个部分,取他们的叠加和作为hash地址
  • 除留余数法
    • H(key)=key MOD p (p<=m m为表长)很明显,如何选取p是个关键问题
    • 比如我们存储3 6 9,那么p就不能取3 3 MOD 3 == 6 MOD 3 == 9 MOD 3
    • p应为不大于m的质数或是不含20以下的质因子的合数,这样可以减少地址的重复(冲突)

哈希冲突

  • H(key1)=H(key2)
  • 处理方法
    • 开放寻址法(ThreadLocal):查看下一个位置是否可用,直到找到空位置

      • 扩容:占据总容量的百分之七十五,总容量扩大到原来的2倍,并使用新的Hush函数(以HashMap举例)
    • 拉链法:存放在对应链表的下一个节点(以HashMap举例)
      • 链表长度大于等于8的话,链表就会转换成树结构,小于等于6,维持原链表,7作为一个差值,来避免频繁转换影响性能
    • 公共溢出区法
      • 建立一个特殊存储空间,专门存放冲突的数据。此种方法适用于数据和冲突较少的情况
    • 再散列法
      • 准备若干个hash函数,如果使用第一个hash函数发生了冲突,就使用第二个hash函数

哈希表原理,Hashtable(Hushmap)原理相关推荐

  1. 关于哈希表(Hashtable)个人学习理解

    数据结构–哈希表(Hashtable.又称散列表) 最近做了一个题目:想要查看集合中的某个指定元素,但是不知道具体的位置. 一般情况下是遍历这个数组的全部,然后去找到这个元素.若此时元素基数不是很大的 ...

  2. 【Python算法】哈希存储、哈希表、散列表原理

    哈希表的定义: 哈希存储的基本思想是以关键字Key为自变量,通过一定的函数关系(散列函数或哈希函数),计算出对应的函数值(哈希地址),以这个值作为数据元素的地址,并将数据元素存入到相应地址的存储单元中 ...

  3. 哈希算法、哈希表的作用与原理

    闲谈Hash 由于以前对hash的理解就不是很透彻,与是在工作不忙的时候,回首掏了一波hash,并记录一下自己的心得体会. 哈希算法和哈希表都不是自然产生的,都是人为的产物,既然是人为了的,那么就可以 ...

  4. 哈希表(HASHTABLE)

    原文地址:http://www.cnblogs.com/abatei/archive/2009/06/23/1509790.html C#中实现了哈希表数据结构的集合类有: (1) System.Co ...

  5. 哈希表(HashTable),哈希冲突的避免、解决

    文章目录 什么是哈希表 哈希表概念 哈希冲突 哈希冲突概念 解决冲突 闭散列 闭散列平均查找次数的问题 开散列/哈希桶 冲突严重时的解决办法 避免冲突 哈希函数设计 常见的哈希函数 负载因子调节 什么 ...

  6. C# 哈希表(Hashtable)用法笔记

    一.什么是Hashtable? Hashtable 类代表了一系列基于键的哈希代码组织起来的键/值对.它使用键来访问集合中的元素. 当您使用键访问元素时,则使用哈希表,而且您可以识别一个有用的键值.哈 ...

  7. 哈希表(HashTable)探究(转)

    HashTable 通常称为哈希表,它表示键(key)/值(value)对的集合. 1.HashTable 的构造函数: HashTable()              //初始化为0个元素的空实例 ...

  8. java hashtable 数据结构_java数据结构——哈希表(HashTable)

    哈希表提供了快速的插入操作和查找操作,每一个元素是一个key-value对,其基于数组来实现. 一.Java中HashMap与Hashtable的区别: HashMap可以接受null键值和值,而Ha ...

  9. PHP哈希表碰撞攻击原理

    哈希表碰撞攻击(Hashtable collisions as DOS attack)的话题不断被提起,各种语言纷纷中招.本文结合PHP内核源码,聊一聊这种攻击的原理及实现. 哈希表碰撞攻击的基本原理 ...

  10. 哈希表(Hash Table)原理及其实现

    原理 介绍 哈希函数构造 冲突处理 举例 拉链法 hash索引跟B树索引的区别 实现 原理 介绍 哈希表(Hash table,也叫散列表), 是根据关键码值(Key value)而直接进行访问的数据 ...

最新文章

  1. mysql的dml全,MySQL数据管理----DML语言(全记住)(示例代码)
  2. torch.flatten()函数
  3. CVPR 2020 | CMU HKUST提出binary网络自动化搜索,同时实现超高压缩与高精度
  4. sql server management studio 快速折叠object explorer中的instance
  5. 实践与反思_在行动中反思的实践
  6. 避免延迟的JPA集合
  7. SpringCloud微框架系列整体模块梳理
  8. python 运行pyc_Pyc文件编译和运行
  9. neo4j 约束(CONSTRAINT)
  10. c语言实现 网络嗅探程序代码,一个简易网络嗅探器的实现源代码.doc
  11. Winform开发全套31个UI组件开源共享
  12. 使用微软Monaco Editor 编写代码比对工具
  13. 约瑟夫问题c语言链表41人,约瑟夫问题 C语言链表实现
  14. 基于51单片机的智能窗口控制系统(protues仿真+程序+论文+PPT+PCB)
  15. 设计灵感:12个App的登录注册界面案例参考
  16. 会议室管理系统jsp和mysql_基于jsp+mysql+servlet的JSP会议-会议室管理系统
  17. 外观模式-简化子系统的复杂性
  18. 宏#define边缘效应(边际效应)
  19. 手机音视频流媒体开发一些有用资料(2010.03.09更新)
  20. with open() as f:

热门文章

  1. 对于ssd对小目标检测效果的思考
  2. 解决MySQL报错:LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.
  3. 华为占据折叠手机市场半数份额,证明它在高端市场的地位无可替代
  4. 只需两步获取任何小程序源码
  5. [root@localhost ~]#每个字符的意思
  6. 管理学书籍排行榜,这些书管理者必看
  7. FTP(21) 文件传输协议
  8. 给你的UIView添加个炫彩边框
  9. http://blog.csdn.net/guolin_blog/article/details/17482095/
  10. p2p登录模块功能实现