Hash理解
来源:互联网 发布:怎样利用网络挣钱 编辑:程序博客网 时间:2024/04/30 21:48
哈希表(Hash table,也叫散列表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
h = H (M)
h -- 固定长度输出值,即哈希值、散列值;
H () -- 散列函数,即哈希函数;
M -- 任意长度输入值;
哈希函数选择:
1)拉链法:链地址法解决冲突的做法是:如果哈希表空间为 0 ~ m - 1 ,设置一个由 m 个指针分量组成的一维数组 ST[ m ], 凡哈希地址为 i 的数据元素都插入到头指针为 ST[ i ] 的链表中。这种方法有点近似于邻接表的基本思想,且这种方法适合于冲突比较严重的情况。
(1)除法散列法:index = value % 16
(2)平方散列法:index = (value * value)>> 28
(3)斐波那契散列法:index =(value * 2654435769) >> 28
A,对于16位整数而言,这个乘数是40503
B,对于32位整数而言,这个乘数是2654435769
C,对于64位整数而言,这个乘数是11400714819323198485
2)开地址法:当发生地址冲突时,按照某种方法继续探测哈希表中的其他存储单元,直到找到空位置为止。
H i ( key ) = ( H ( key )+ d i ) mod m ( i = 1,2,…… , k ( k ≤ m – 1))
其中: H ( key ) 为关键字 key 的直接哈希地址, m 为哈希表的长度, di 为每次再探测时的地址增量。
采用这种方法时,首先计算出元素的直接哈希地址 H ( key ) ,如果该存储单元已被其他元素占用,则继续查看地址为 H ( key ) + d 2 的存储单元,如此重复直至找到某个存储单元为空时,将关键字为 key 的数据元素存放到该单元。
增量 d 可以有不同的取法,并根据其取法有不同的称呼:
( 1 ) d i = 1 , 2 , 3 , …… 线性探测再散列;
( 2 ) d i = 1^2 ,- 1^2 , 2^2 ,- 2^2 , k^2, -k^2…… 二次探测再散列;
( 3 ) d i = 伪随机序列 伪随机再散列;
- Hash理解
- 理解Blizzard Hash
- 理解Blizzard Hash
- 真正的理解Hash
- 一致性hash算法理解
- 深入理解Hash算法
- Hash一致性算法理解
- 理解Hash表
- hash算法理解
- 一致性hash理解
- Hash函数理解
- hash原理的理解
- 深入理解HashMap,hash函数
- 理解哈希表2(Hash Table)
- Hashcode作用以及hash算法的理解
- 理解php Hash函数,增强密码安全
- 理解哈希函数 hash table (1)
- 对hash table的两种理解
- 字符串处理转换(华为2013校园招聘上机笔试题 )
- windows平台进程CPU占用率的计算
- ../thelib/libthelib.so: undefined reference to `dlopen'
- *PyQt4 精彩实例分析* 实例23 程序启动画面
- JS 毫秒转时间。
- Hash理解
- auto CAD 二次开发 c#.net 之JIG画多段线(polyline)
- 从键盘输入一个字符串,按照字符顺序从小到大进行排序,并要求删除重复的的字符。
- PyQt4 精彩实例分析* 实例24 基本QMainWindow主窗口程序
- ruby inject
- Android如何防止apk程序被反编译
- XSLT知识
- Ruby中的inject
- 员工信息管理 数据以二进制的格式重新保存到:指定路径中;