hash表及其应用.ppt

hash表及其应用.ppt

ID:48735677

大小:379.00 KB

页数:33页

时间:2020-01-20

hash表及其应用.ppt_第1页
hash表及其应用.ppt_第2页
hash表及其应用.ppt_第3页
hash表及其应用.ppt_第4页
hash表及其应用.ppt_第5页
资源描述:

《hash表及其应用.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、HASH函数及其应用雅礼朱全民问题一读入n个正整数,每个数小于109查询某个数是否在这n个数中出现一共查询m次n<=100000m<=100000in.txt5-----5个数816353-----询问3次369out.txtYESYESNO分析这题可以先对n个数进行快速排序,然后对于每次询问,用二分查找解决。有没有更快的做法?什么是HASH?哈希表是一种高效的数据结构。散列方法是使用函数h将U映射到表T[0..m-1]的下标上(m=O(

2、U

3、))。这样以U中关键字为自变量,以h为函数的运算结果就是相应结点的存储地址。从而达到在O(1)时间内就可完成查找

4、。一、整数的Hash函数构造方法(1)1.直接取余法关键字k除以m,取余数作为在Hash表中的位置。函数表达式可以写成:h(k)=kmodm一般m选择为素数一、整数的Hash函数构造方法(2)2.乘积取整法关键字k乘以一个在(0,1)中的实数(最好是无理数),得到一个(0,1)之间的实数;取出其小数部分,乘以m,再取整数部分,即得K在Hash表中的位置。函数表达式可以写成:例如就是一个好的选择。一、整数的Hash函数构造方法(3)3.平方取中法把关键字K平方,然后取中间的位作为Hash函数值返回。由于K的每一位都会对其平方中间的若干位产生影响,因此这个方

5、法的效果也是不错的。但是对于比较小的K值效果并不是很理想,实现起来也比较繁琐。为了充分利用Hash表的空间,M最好取2的整数次幂。例如,表容量M=24=16,,关键值K=100,那么h(k)=8回到问题一n最多为100000flag数组不开到109,但可以开flag[1..300000]可用取余法解决冲突将数组改为链表问题二问题一中的正整数改称字符串(每个字符串的长度不超过20)还是输入n个字符串,一共m次询问in.txt4-----5个字符串catbananaappledog3-----询问3次bananafruitpetout.txtYESNONO二

6、、字符串的Hash函数构造方法字符串本身就可以看成一个256进制(ANSI字符串为128进制)的大整数,因此我们可以利用直接取余法,在线性时间内直接算出Hash函数值。为了保证效果,仍然不能选择太接近2n的数;尤其是当我们把字符串看成一个2p进制数的时候,选择m=2p-1会使得该字符串的任意一个排列的Hash函数值都相同。排列的Hash函数让排列与数1--A(m,n)之间建立一一对应的关系。引理从0到n!-1的任何自然数可唯一地表示为全排列与自然数之一一对应不妨设n个元素为1,2,..,n。对应的规则如下:设序列(an-1,…,a1)对应的某一排列,其中

7、ai可以看做是排列p中数i+1所在位置右边比i+1小的数的个数。以排列4132为例,它是元素1,2,3,4的一个排列。4的右边比4小的数的数目为3,所以a3=3。3右边比3小的数的数目为0,即a2=0。同理a1=1。所以排列4213对应于变进制的301,也就是十进制的19;反过来也可以从19反推到301,再反推到排列4213。Hash函数的冲突冲突     两个不同的关键字,由于散列函数值相同,因而被映射到同一表位置上。该现象称为冲突(Collision)或碰撞。安全避免冲突的条件 最理想的解决冲突的方法是安全避免冲突。要做到这一点必须满足两个条件: ①

8、其一是

9、U

10、≤m ②其二是选择合适的散列函数。     这只适用于

11、U

12、较小,且关键字均事先已知的情况,此时经过精心设计散列函数h有可能完全避免冲突。影响冲突的因素     冲突的频繁程度除了与h相关外,还与表的填满程度相关。     设m和n分别表示表长和表中填人的结点数,则将α=n/m定义为散列表的装填因子(LoadFactor)。α越大,表越满,冲突的机会也越大。通常取α≤1。解决冲突的方法开散列方法(openhashing,也称为拉链法,separatechaining)闭散列方法(closedhashing,也称为开地址方法,openaddre

13、ssing)。这两种方法的不同之处在于:开散列法把发生冲突的关键码存储在散列表主表之外,而闭散列法把发生冲突的关键码存储在表中另一个槽内。拉链法开散列方法的一种简单形式是把散列表中的每个槽定义为一个链表的表头。散列到一个特定槽的所有记录都放到这个槽的链表中。线性探查法(LinearProbing)将散列表T[0..m-1]看成是一个循环向量,若初始探查的地址为d(即h(key)=d),则最长的探查序列为:d,d+l,d+2,…,m-1,0,1,…,d-1.即:探查时从地址d开始,首先探查T[d],然后依次探查T[d+1],…,直到T[m-1],此后又循环

14、到T[0],T[1],…,直到探查到T[d-1]为止。探查过程终止于三种情况:(

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。