- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[数学]数据结构第8章
2) 除留余数法 这种方法是用模运算(%)得到的。设给出的关键字值为K,存储区单元数为m,则用一个小于m的质数P去除K,得到的余数为R,即:R=K%P。如果R落在存储区地址范围内,则R就取为哈希函数值(散列地址);否则,再用一个线性数求出哈希函数值。 例如:有一组关键字从000001到859999,指定的存储区地址为1000000~1005999,即m=6000,可选P=599,若要转换关键字K=172148,则有 R=172148 % 599=4176 2) 插入 在B-树中,插入一个关键字的方法很简单。对于叶结点处于第L+1层的B-树,插入的关键字总是进入第L层的结点。 若在一个包含j<m-1个关键字的结点中插入一个新的关键字,则插入过程将局限于该结点,把新关键字直接插入该结点即可。例如,在图8.7的B-树中,若插入关键字137,则只需改变一个结点,改变的结点如图8.8所示。 图8.8 关键字个数小于m-1的结点中插入示例 若把一个新的关键字插入一个已有m-1(m为B-树的阶)个关键字的结点中,则将引起结点的分裂。例如,在图8.7的6阶B-树中插入关键字460,因为要插入的这个结点是满的(已包含5个关键字),不能再往里插了。在这种情况下,这个结点将分裂为两个,并把中间的一个关键字拿出来,插到该结点的双亲结点里去。如果双亲结点也是满的,则需要再分裂,然后往里插。最坏的情况是这个过程可能一直传到根,而不能插入。由于根是没有双亲的,若需要分裂根,就要建立一个新的根结点,则整个B-树增加了一层。在图8.7的6阶B-树中插入关键字460后,树中有关结点的变化如图8.9所示。 图8.9 插入关键字460后6阶B-树的变化 3) 删除 如果删除的关键字不在第L层,则先把此关键字与它在B-树中的后继关键字的位置对换,然后再删除该关键字。例如,在图8.7的B-树中要删除关键字045,则先找到045的后继关键字052,把045和052的位置对换,然后再删除045,如图8.10(a)所示。 如果删除的关键字在第L层,则把它从所在的结点里去掉,这样可能导致此结点所包含关键字的个数小于「m/2」-1。这种情况下,应该考察该结点的左或右兄弟结点,然后从兄弟结点中移若干个关键字到该结点中来(这也涉及到它们双亲结点中的一个关键字要做相应变化),使两个结点所含关键字的个数基本相同。那么,当兄弟结点中关键字个数很少,并刚好等于「m/2」-1时,这种移动不能进行。此时,要把删除了关键字的结点、它的兄弟结点和它们的双亲结点中一个关键字合并为一个结点。 例如,从如图8.10(a)所示的B-树中删除045,这样一来原包含关键字045的结点,只剩下一个关键字,即小于m/2-1=6/2-1=3-1=2。于是,需从右边兄弟结点移一个关键字135到该结点来,但因为涉及到它们双亲结点中的关键字112要作相应变化,所以实际上是关键字135移到双亲结点,而把关键字112移入原来包含045的结点,如图8.10(b)所示。 如果在图8.10(b)中再删除112,则删除112后,原包含112的结点只剩下一个关键字110了,并且它的左、右兄弟结点包含的关键字也很少,刚好等于m/2-1=6/2-1=3-1=2,于是把原包含112的结点、它的右兄弟结点及它们双亲结点中的关键字135合并成一个新结点,如图8.10(c)所示。从双亲结点中这样拿出一个关键字,有时也可能导致进一步的合并,甚至这种合并一直传到根结点。在根结点只包含一个关键字情况下,此时发生直到根结点的合并,将使根结点和它的两个孩子进行合并,形成新的根结点,从而使整个树减少了一层。 图8.10 B-树的删除操作 最后,我们来估计一下B-树的查找率。若一棵L+1层的m阶B-树包含n个关键字,查找失败的关键字会有n+1种情况,而B-树叶结点表示树中并不存在的外部结点,正好对应n+1种查找失败的情况。因此,B-树有n+1个树叶,树叶都在第L+1层。第一层为根,至少一个结点,根至少有两个孩子,即第二层至少有两个结点。 除根和树叶外,其他结点至少有「m/2」个孩子。因此,第三层至少有2×「m/2」个结点,第四层至少有2×(「m/2」)2个结点……第L+1层至少有2×(「m/2」)L-1个结点,于是有: n+1≥2×(「m/2」)L-1 在含有n个关键字的B-树上进行查找时,从根结点到关键字所在结点的路径上,涉及的结点数不超过L层次数。即: 这意味着若n=1、999、998,m=199,则L至多等于4,而一次查找最多进行L次存取。因此,这个公式保证了B-树的查找效率是相当高的
您可能关注的文档
最近下载
- 河南能源集团网络安全攻防知识培训(分享版)(1).pptx
- 2025年党员考试试题及答案.doc VIP
- 湖南公务员考试真题2024.docx VIP
- mPGES-2作为吸入全身麻醉药物异氟醚作用靶点的应用.pdf VIP
- 案例研究-案例研究:设计与方法.pdf VIP
- 2024届高考物理一轮复习热点题型归类训练专题13动力学和能量观点的综合应用(原卷版+解析).docx VIP
- 烟草质量检验竞赛通用知识题库-上(单选、多选题库).docx VIP
- 德育常规工作培训(1).pptx
- OMRON欧姆龙安全产品F3SG-SR PG系列安全光幕 多光束安全传感器F3SG-SR PG 系列 F3SG-□SR□系列安全光幕 用户手册.pdf
- 保险的培训资料1—开拓准客户.ppt VIP
文档评论(0)