哈希表原理,Hashtable(Hushmap)原理
哈希表 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函数
- 开放寻址法(ThreadLocal):查看下一个位置是否可用,直到找到空位置
哈希表原理,Hashtable(Hushmap)原理相关推荐
- 关于哈希表(Hashtable)个人学习理解
数据结构–哈希表(Hashtable.又称散列表) 最近做了一个题目:想要查看集合中的某个指定元素,但是不知道具体的位置. 一般情况下是遍历这个数组的全部,然后去找到这个元素.若此时元素基数不是很大的 ...
- 【Python算法】哈希存储、哈希表、散列表原理
哈希表的定义: 哈希存储的基本思想是以关键字Key为自变量,通过一定的函数关系(散列函数或哈希函数),计算出对应的函数值(哈希地址),以这个值作为数据元素的地址,并将数据元素存入到相应地址的存储单元中 ...
- 哈希算法、哈希表的作用与原理
闲谈Hash 由于以前对hash的理解就不是很透彻,与是在工作不忙的时候,回首掏了一波hash,并记录一下自己的心得体会. 哈希算法和哈希表都不是自然产生的,都是人为的产物,既然是人为了的,那么就可以 ...
- 哈希表(HASHTABLE)
原文地址:http://www.cnblogs.com/abatei/archive/2009/06/23/1509790.html C#中实现了哈希表数据结构的集合类有: (1) System.Co ...
- 哈希表(HashTable),哈希冲突的避免、解决
文章目录 什么是哈希表 哈希表概念 哈希冲突 哈希冲突概念 解决冲突 闭散列 闭散列平均查找次数的问题 开散列/哈希桶 冲突严重时的解决办法 避免冲突 哈希函数设计 常见的哈希函数 负载因子调节 什么 ...
- C# 哈希表(Hashtable)用法笔记
一.什么是Hashtable? Hashtable 类代表了一系列基于键的哈希代码组织起来的键/值对.它使用键来访问集合中的元素. 当您使用键访问元素时,则使用哈希表,而且您可以识别一个有用的键值.哈 ...
- 哈希表(HashTable)探究(转)
HashTable 通常称为哈希表,它表示键(key)/值(value)对的集合. 1.HashTable 的构造函数: HashTable() //初始化为0个元素的空实例 ...
- java hashtable 数据结构_java数据结构——哈希表(HashTable)
哈希表提供了快速的插入操作和查找操作,每一个元素是一个key-value对,其基于数组来实现. 一.Java中HashMap与Hashtable的区别: HashMap可以接受null键值和值,而Ha ...
- PHP哈希表碰撞攻击原理
哈希表碰撞攻击(Hashtable collisions as DOS attack)的话题不断被提起,各种语言纷纷中招.本文结合PHP内核源码,聊一聊这种攻击的原理及实现. 哈希表碰撞攻击的基本原理 ...
- 哈希表(Hash Table)原理及其实现
原理 介绍 哈希函数构造 冲突处理 举例 拉链法 hash索引跟B树索引的区别 实现 原理 介绍 哈希表(Hash table,也叫散列表), 是根据关键码值(Key value)而直接进行访问的数据 ...
最新文章
- mysql的dml全,MySQL数据管理----DML语言(全记住)(示例代码)
- torch.flatten()函数
- CVPR 2020 | CMU HKUST提出binary网络自动化搜索,同时实现超高压缩与高精度
- sql server management studio 快速折叠object explorer中的instance
- 实践与反思_在行动中反思的实践
- 避免延迟的JPA集合
- SpringCloud微框架系列整体模块梳理
- python 运行pyc_Pyc文件编译和运行
- neo4j 约束(CONSTRAINT)
- c语言实现 网络嗅探程序代码,一个简易网络嗅探器的实现源代码.doc
- Winform开发全套31个UI组件开源共享
- 使用微软Monaco Editor 编写代码比对工具
- 约瑟夫问题c语言链表41人,约瑟夫问题 C语言链表实现
- 基于51单片机的智能窗口控制系统(protues仿真+程序+论文+PPT+PCB)
- 设计灵感:12个App的登录注册界面案例参考
- 会议室管理系统jsp和mysql_基于jsp+mysql+servlet的JSP会议-会议室管理系统
- 外观模式-简化子系统的复杂性
- 宏#define边缘效应(边际效应)
- 手机音视频流媒体开发一些有用资料(2010.03.09更新)
- with open() as f:
热门文章
- 对于ssd对小目标检测效果的思考
- 解决MySQL报错:LOAD DATA LOCAL INFILE file request rejected due to restrictions on access.
- 华为占据折叠手机市场半数份额,证明它在高端市场的地位无可替代
- 只需两步获取任何小程序源码
- [root@localhost ~]#每个字符的意思
- 管理学书籍排行榜,这些书管理者必看
- FTP(21) 文件传输协议
- 给你的UIView添加个炫彩边框
- http://blog.csdn.net/guolin_blog/article/details/17482095/
- p2p登录模块功能实现