数据结构 第八章 高级搜索树(伸展树 B-树 红黑树)

数据结构 第八章 高级搜索树

  • 伸展树
  • B-树
    • B-树 查找
    • B-树 插入(上溢)
    • B-树 删除(下溢)
  • 红黑树
    • 红黑树 插入(双红缺陷)
    • 红黑树 删除(双黑缺陷)

伸展树

二叉搜索树数据访问局部特性:
1.刚刚被访问的结点,极有可能在不久之后再次被访问
2.将被访问的下一结点,极有可能就处在不久之前被访问的某个结点附近

伸展树:将二叉树刚刚被访问的结点“转移”到树根,即可加速访问操作
双层伸展:
1.子孙异侧:zig-zag或者zag-zig,子结点和孙结点分别为左右孩子,类似于AVL树的双旋调整
数据结构 第八章 高级搜索树(伸展树 B-树 红黑树)_第1张图片
2.子孙同侧:zig-zig或zag-zag,子结点和孙结点同为左节点或者右节点,此时旋转顺序应该为祖结点g->父节点p->孙结点v
1.伸展树在查找操作后需要将查找点或者hot点伸展为根结点,这使得伸展树的查找操作不再为静态操作
2.无需记录结点的高度和平衡因子
3.分摊复杂度为log(n),与AVL树相当
4.对单次效率十分敏感的不能采用伸展树结构,如自动手术程序

B-树

多级存储系统中使用B-树,可针对外部查找,大大减少I/O的数目
m阶B-树,即m路平衡搜索树,所有叶节点深度统一,所有外部结点(叶节点不存在的孩子)深度统一
将多代结点合并成为一个大节点,形成B-树
数据结构 第八章 高级搜索树(伸展树 B-树 红黑树)_第2张图片

B-树 查找

只需要将必须的结点载入内存,减少I/O的次数。例如查找49,先把根结点载入内存,查找失败,则顺着左引用将[19,36]结点载入内存并查找,再顺着右分支查找[38,4,49,51]结点
数据结构 第八章 高级搜索树(伸展树 B-树 红黑树)_第3张图片
对于有N个关键码的m阶B-树的每次查找操作,耗时不超过O(logmN)

B-树 插入(上溢)

B-树每个结点至少2个关键字,至多m-1个关键字,插入结点可能会造成上溢,此时需要分裂
发生上溢时,把发生上溢的结点的中位关键码插入到其父节点中,并将以该中位关键码为分界的两端作为插入到父节点的两个孩子;若父节点依然发生上溢,则父节点继续分裂,若一直分裂到根结点,则提取中位关键码作为新的根结点,树的高度+1
数据结构 第八章 高级搜索树(伸展树 B-树 红黑树)_第4张图片

B-树 删除(下溢)

B-树每个结点至少2个关键字,删除结点可能会造成下溢,两种方法解决下溢问题
1.旋转:先向父节点借一个关键码,再将兄弟结点的关键码移给父节点
2.合并:当发生下溢结点的兄弟结点不可借出,则将父节点的关键码下移,再将两个子节点合并

数据结构 第八章 高级搜索树(伸展树 B-树 红黑树)_第5张图片
总结:
B-树水平方向对应结点内部搜索,是在内存中进行,速度非常快;垂直方向是在磁盘中进行,树中每下降一层都需要进行一次I/O操作,B-树形态为矮且宽,用于达到最优速度。

红黑树

任何操作(插入或删除)引发的结构变化量不超过O(1)
红黑树需要统一增设外部结点NULL,使之称为真二叉树(所有结点度数要么为2要么为0)
1.树根必须为黑色
2.外部结点均为黑色
3.其余节点:若为红,则只能为黑孩子(红结点的孩子和父亲都必须是黑的,不可能有父子同为红)
4.外部结点到根:途中黑结点数目相等

(2,4)-树等价于红黑树,(2,4)意思是每个结点至少有两个子节点,至多有四个子节点
提升红黑树的红结点使之与其黑父结点等高,于是每棵红黑树都对应于(2,4)-树

红黑树 插入(双红缺陷)

理解红黑树时要当做一棵B-树来理解
双红缺陷:新插入的X结点和其父节点P均为红色,此时根据X的叔结点u,分两种颜色分别处理
数据结构 第八章 高级搜索树(伸展树 B-树 红黑树)_第6张图片
1.当X的叔结点u为黑色
S1:参照AVL树算法,做局部3+4重构
S2:染色:中间结点b转黑,a或c转红,这是因为红黑树超级结点中的中间点必须为黑色,因为该结点等价于B-树中的父节点,不能出现父子同红

数据结构 第八章 高级搜索树(伸展树 B-树 红黑树)_第7张图片
2.当X的叔结点u为红色
此时,在等价的B-树中相当于发生了上溢
数据结构 第八章 高级搜索树(伸展树 B-树 红黑树)_第8张图片
S1:把中位关键码g上移为父节点,并以g为界分裂结点
S2:将g染红,将p和u染黑

双红修复:
1.最多O(logn)次结点染色
2.一次3+4重构

红黑树 删除(双黑缺陷)

双黑缺陷:当删除点X和其替代者r均为黑色,此时需考察X的父亲结点p和兄弟结点s
1.s为黑,且至少有一个红孩子t:
进行3+4重构,r保持黑,a,c染黑,b继承p的原色(此时等效于B-树发生下溢时采取的旋转操作)
数据结构 第八章 高级搜索树(伸展树 B-树 红黑树)_第9张图片
2.s为黑,s的两个孩子都为黑,p为红:
r保持黑;s转红,p转黑(此时等效于B-树发生下溢时采取的合并操作)
数据结构 第八章 高级搜索树(伸展树 B-树 红黑树)_第10张图片
3.s为黑,s的两个孩子都为黑,p为黑:(此时等效于B-树发生下溢时采取的合并操作)
s转红,r与p保持黑
数据结构 第八章 高级搜索树(伸展树 B-树 红黑树)_第11张图片
4.s为红
zag§或zig§,红s转黑,黑p转红,则可转化为之前的三种情况再做处理
数据结构 第八章 高级搜索树(伸展树 B-树 红黑树)_第12张图片

你可能感兴趣的:(数据结构 第八章 高级搜索树(伸展树 B-树 红黑树))