哈希表
来源:互联网 发布:时时彩源码搭建视频 编辑:程序博客网 时间:2024/06/05 20:34
什么是哈希表?
哈希表就像一本书的目录,章节相当于关键字,通过对应的页码可以直接定位章节的位置。哈希表用一维数组保存关键字的内存地址,数组的长度为哈希表的表长。通过哈希函数求出哈希值定位到数组的下标,从而取出关键字的内存地址进行访问。
优点:查询速度快,O(1)
缺点:哈希表基于数组,不易扩充,而且冲突不可避免。若哈希表填满,性能下降。
构建哈希:
(1)直接寻址法:
关键字直接作为哈希地址
(2)数字分析法
寻找数字的规律,如学号、日期中的某几位
(3)除余法
关键字%m,m为不大于表长的整数,最好为素数
(4)随机数法
取一个随机函数,求关键字的随机值作为哈希地址,适合关键字长度不同的情况
(5)折叠法
将关键字分为长度相等的几个部分,求出这几个部分的和作为哈希地址
(6)平方取中法
求关键字的平方,取平方的某几位作为哈希地址
哈希冲突:
(1)开放地址法:
线性探测:增量d的取值为1、2、3、4……
二次探测:增量d的取值为-1、1、-4、4、-9、9……-k2,k2
随机探测:增量d为随机序列
(2)拉链法:
将冲突的关键字,用单链表连接起来,哈希表中存储的是单链表的头指针。
(3)再哈希法:
当冲突时,用另外一个哈希函数,若还冲突再用另外一个哈希函数
(4)公共溢出区法:
当冲突时,将冲突的关键字存放在另外一个表中(公共溢出区)
负载因子:
设m为关键字的个数,n为表长。
则a = m/n 称为负载因子,负载因子过大,容易冲突。负载因子过小,造成空间的浪费。
哈希表的查找:
根据哈希函数求出关键字的哈希地址,到哈希表中找到关键字的地址,若对应的内容与关键字相同,则查找成功。否则按照解决冲突的规则,进行查找。
0 0
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- .哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- 哈希表
- iOS组件之UILabel
- php xml 转换数组
- VC与Matlab混合编程(在VC中调用DLL)
- windows基础应用程序编程(五):图标和加速键
- JAVA 反射机制剖析
- 哈希表
- PoolManager5 使用
- Memcached 原理和使用详解(PPT/PDF)
- 无意间用到的随机取数程序
- 应用程序商店审查指南
- java String的小结
- Lambda表达式在linq中的应用
- android viewpager 实现左右无限循环
- 东软学习,strut2初级学习的部分截图和笔记(八)-标签学习