第三章 索引与散列.ppt

  1. 1、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第三章 索引和散列 3.1 基本概念 顺序索引(ordered index):基于对值的一种排序 散列索引(hash index):用散列函数将值分布到若干个散列桶中。 3.2 顺序索引 3.3 B+树索引文件 3.3 . 1 B+树的结构 (2)叶结点结构,对于i=1,2, …,n-1。指针Pi 指向具有Ki 的一个文件记录(主索引文件按照码值存放)或指向一个指针桶(辅助索引),桶中每个指针指向具有码值Ki 的一个文件记录。指针Pn 指向下一个叶结点的头指针。这样可以将叶结点按照码值顺序串在一起,以便对文件进行顺序处理。 叶结点中最多有n-1个码值,至少有? (n-1)/2 ?个码值,各叶结点中值地范围互不相交,即若Li 和Lj 是两个叶结点且ij ,那么Li 中的所有码值都小于Lj 中的所有码值。 要使B+树索引成为稠密索引,各码值必须出现在叶结点中。 (3)B+树的非叶结点,形成叶结点上的一个多级(稀疏)索引。对于i=2,3, …,n-1,指针Pi 指向一棵子树,该子树中所有结点的索引码值大于等于Ki-1 且小于Ki ,Pn 指向的子树中所有码值大于等于Kn-1 ,P1 指向子树中的所有码值均小于K1 。 非叶结点中至少有?n/2?个指针,最多有n个,指针个数称为该结点的扇出。 (4)根结点:根结点的指针数可以小于?n/2? 。 除非整棵树只有一个结点,否则,根结点至少有两个指针。完整的B+树。如图: 3.3 . 3 B+树的更新 *插入: 插入例子: 算法: procedure insert(value K ,point P ) 找到应该包含值K的叶结点L if(L所含的有哪些信誉好的足球投注网站码少于n-1个) then insert_in_leaf(L, K, P) else begin/* L已经含有n-1有哪些信誉好的足球投注网站码 ,分裂L*/ 创建结点L’ 把L.P1,…,L.Kn-1复制到可以存储n个(指针,有哪些信誉好的足球投注网站码)对的内存块T insert_in_leaf(T, K, P) 令L’.Pn=L.Pn;令L.Pn=L’ 从L中删除L.P1,…,L.Kn-1 把T.P1,…,T.K?n/2|从T中复制到L中,以 L.P1作为开始 把T. K?n/2|+1 ,…,T. Kn从T中复制到L’中,以 L’.P1作为开始 令K’表示L’中最小有哪些信誉好的足球投注网站码值 insert_in_parent(L, K’, L’) end 插入叶结点 procedure insert_in_leaf(node L,value K ,point P ) if(KL.K1) then 把 P,K 插入L中,紧接在L.P1前面 else begin 令Ki表示L中小于K的最大有哪些信誉好的足球投注网站码值 把 P ,K 插入L中 ,紧接在T.Ki后面 end 插入双亲 procedure insert_in_parent(node N,value K’ ,node N’) if N是树的根结点 then begin 创建新结点R包含N, K’ ,N’ /* N和N’都是指针*/ 令为树的根结点 return end 令P=parent(N) if (P包含的指针小于n个) then 将(K’,N’)插入到P中N后面 else begin/* 分裂P*/ 将P复制到可以存放P以及(K’,N’)的内存块T中 把结点(K’,N’)插入T中紧跟在N后面 删除P中所有项;创建结点P’ 把T.P1,…,T.P?n/2| 复制到P 令K’’= T.K?n/2| 把T. K?n/2|+1 ,…,T. Pn+1复制到P’ insert_in_parent(P,K’’p’) end *删除: 算法: procedure delete(value K,pointer P) 找得包含(V,P)的叶结点L delete_entry(L,K,P) procedure delete_entry(node N,value K,pointer P) 从N中删除(K,P) if(N是

文档评论(0)

82393aa + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档