- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
存储与索引(陈志华)
静态哈希的优缺点 理想情况下查询只需要一次磁盘I/O,且文件的插入和删除操作也只需要两次I/O(读和写)。 静态哈希的桶数固定。如果一个文件缩减太大,会浪费很多空间;如果文件增长很大,将产生较长的溢出链,导致性能下降。 可扩展哈希可解决这一问题 8.3.1.2可扩展哈希 为了理解可扩展的哈希方法,首先考虑静态哈希文件。如果现在需要向一个满的桶中插入一个新的数据项,如果不想增加溢出页,而重新组织文件,把桶数加倍,并且桶集合中重新分配项,很麻烦。一个简单的方法是:使用一个指向桶的指针目录,同时仅仅通过目录加倍和分裂溢出桶来实现桶数的加倍。 可扩展hash表简介:它在静态hash结构中主要增加如下: 引入了一个间接层(目录),它包含一个指向桶的指针数组,每一个指针指向一个桶; 指针数组可以增长,它的长度总是2的倍数; Hash函数h为每个键计算出一个K位二进制序列,该K值足够大,无论何时桶的数目都是使用从序列末尾开始的若干位。 可扩展哈希--实例 目录由4个元素的数值组成,每个元素都是一个指向桶的指针。 要定位一个数据项,首先在查找键上应用哈希函数,然后从它的二进制表达中取后两位得到一个0到3之间的数,根据这个数在目录位置上的指针指向期望的桶。 定位哈希值为5(二进制101)的数据项,查找目录元素01,然后沿着指针找到数据页(桶B)。 可扩展哈希--插入 插入 定位桶,如果桶未满,直接插入; 如果桶满,则需要分裂(分配新的页,重分布)。如有必要,需加倍目录。 插入h(r)=20的目录 插入h(r)=20前(a) 插入h(r)=20时(b) 插入h(r)=20后(c) 要插入数据项20,首先查询目录元素00,并沿着它到达桶A,刚好桶A是满的。于是通过分配一个新桶而分裂桶A,然后在原来的桶和它的分裂印象之间重新分部内容。为了重新分布项,需要考虑h(r)的最后三位。后两位是00,说明该项属于上述两个桶之一,第三位(从尾部算起)则用于区别这两个桶。如,指向桶A目录元素第三位为0,而指向桶A2目录元素第三位为1。此时目录不够用,应该加倍,只有第三位不同的元素被称为是“对应”的。 可扩展哈希法的基本方法 可扩展哈希法的基本技术是使用哈希函数h得到二进制数,然后解释后d位数作为目录的偏移量,这里d依赖于目录的大小。上述示例中,d最初是2,因为只有4个桶。分裂后,d变为3,因此现在有8个桶。当项在原桶和它分裂映像桶间重分布时,应该在第d位的基础上进行。数字d被称为全局深度(GLOBAL DEPTN),并作为文件头的一部分保存起来,在每次需要定位数据项时,都要使用它。 为了确定目录是否需要加倍,需要为每一个桶维护一个局部深度(LOCAL DEPTN)。如果一个桶的局部深度等于全局深度,且需要分裂时,目录必须加倍。如图(c)索引中插入9*时,它属于局部深度为2的B桶,而全局深度为3。尽管桶被分裂但目录不必分裂。另一方面A桶和A2桶的局部深度等于全局深度,如果他们被填满,有需要分裂,目录就必须分裂。 8.3.1.3线性哈希 线性哈希和可扩展哈希一样,是一种动态哈希技术,可以有效地支持插入和删除操作,它不需要目录,能自然的处理冲突并且对桶分裂的时机提供很多灵活性。 线性哈希的数学原理: 假定key = 5 、 9 、13 key % 4 = 1 现在我们对8求余 5 % 8 = 5 9 % 8=1 13 % 8 = 5 由上面的规律可以得出 (任意key) % n = M (任意key) %2n = M或 (任意key) %2n = M + n 线性哈希的具体实现: 我们假设初始化的哈希表如图: 为了方便叙述,我们作出以下假定: 1:为了使哈希表能进行动态的分裂,我们从桶0开始设定一个分裂点。 2:一个桶的容量为listSize = 5,当桶的容量超出后就从分裂点开始进行分裂。 3:hash函数为 h0 = key %4? h1 = key % 8,h1会在分裂时使用。 4:整个表初始化包含了4个桶,桶号为0-3,并已提前插入了部分的数据。 分裂过程如下: 现在插入key = 27 1:进行哈希运算,h0 = 27 % 4 = 3 2:将key = 27插入桶3,但发现桶3已经达到了桶的容量,所以触发哈希分裂 3:由于现在分裂点处于0桶,所以我们对0桶进行分割。这里需要注意虽然这里是3桶满了,但我们并不会直接从3桶进行分割,而是从分割点进行分割。这里为什么这么做,在下面会进一步介绍。 4:对分割点所指向的桶(桶0)所包含的key采用新的hash函数(h1)进行分割。 对所有key进行新哈希函数运算后,将产生如下的哈希表 5:虽然进行了分裂,但桶3并不是分裂点,所以桶3会将多出的key,放于溢出页.,一直等到桶3进行分裂。 6:
您可能关注的文档
最近下载
- 计算机兴趣小组活动计划.docx VIP
- 人民币实际有效汇率波动对天津市贸易收支影响的实证研究的中期报告.docx VIP
- 中国石狮子PPT课件.pptx VIP
- 2025年全国高考(新课标)化学真题卷含答案解析 .pdf VIP
- 新部编小学语文五年级上册看拼音写词语.docx VIP
- 人教版(2025)必修第三册Unit 1 Festivals and celebrations Discovering Useful Structures 课件(共46张PPT)(含音频+视频).pptx VIP
- 年产2500吨高端氟材料项目环评报告表.pdf VIP
- 临床微生物室标准操作程序SOP.pdf VIP
- Boss Roland逻兰RC-600 乐句循环工作站RC-600 中文用户手册 说明书.pdf
- 2025年秋季湖北武汉市华中师范大学校友工作办公室学生助理招聘笔试历年典型考题(历年真题考点)解题思路附带答案详解(5套).docx VIP
文档评论(0)