HASH表

第一章 基本原理


1.1 概述

散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。


1.2 基本概念


1.2.1简介

如图1-1,直接寻址存在一个技术问题:如果域U很大,在一台典型计算机的可用内存容量限制下,要在机器中存储大小为|U|的一张表F就不实际。

但实际储存的关键字集合K比所有可能的关键字域小,因此可以使用比F小的表T来存储数据,并将关键值集合使用散列函数映射到表T’中的槽存放。



图1-1


1.2.2哈希函数

给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希(Hash) 函数。

哈希函数也可叫散列函数,一个好的散列函数应该满足简单一致散列的假设:所有元素通过散列函数处理后都被散列到任意一个槽。

1. 直接寻址法:取关键字或关键字的某个线性函数值为散列地址。即H(key)=keyH(key) = a•key + b,其中ab为常数(这种散列函数叫做自身函数)


2. 数字分析法:分析一组数据,比如一组员工的出生年月日,这时我们发现出生年月日的前几位数字大体相同,这样的话,出现冲突的几率就会很大,但是我们发现年月日的后几位表示月份和具体日期的数字差别很大,如果用后面的数字来构成散列地址,则冲突的几率会明显降低。因此数字分析法就是找出数字的规律,尽可能利用这些数据来构造冲突几率较低的散列地址。


3. 平方取中法:取关键字平方后的中间几位作为散列地址。


4. 折叠法:将关键字分割成位数相同的几部分,最后一部分位数可以不同,然后取这几部分的叠加和(去除进位)作为散列地址。


5. 随机数法:选择一随机函数,取关键字的随机值作为散列地址,通常用于关键字长度不同的场合。


6. 除法散列法: h(k) = k mod m

    需要注意的是m= 2^p 时是糟糕的取值时,h(k)的值将会是k中的p个最低位数字.


7. 乘法散列法


1.2.3碰撞冲突

 但因为两个不同的键可能被散列函数映射到表T中同一个位置因此就会出现碰撞冲突。


1.2.4装载因子

   给定一个存放n个元素,具有m个槽位的散列表,定义T的装载因子(load factor) a n/m, 即一个槽中存放的元素个数。


第二章 参考资料


2.1书籍

introduction to algorithm

《从头到尾彻底理解hash


2.2网址

http://blog.csdn.net/zxycode007/article/details/6999984




MORE : IN BUILDING ...................

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值