20220601数据结构绿皮书读书笔记

个人博客
https://blog.hylstudio.cn/archives/970

20220601数据结构绿皮书读书笔记

11 多叉树

11.1 定义

数学定义上的树有着广泛的概念,它是任意顶点的集合以及不同顶点对的集合(叫做边,或者树杈)
计算机应用中我们通常不需要这么免费自由的树,为了强调区别称之为free trees
计算机里的树几乎都是有一个特定的根节点,称之为rooted tree

所以其实依照数学定义来说,只要能记录下所有顶点的信息以及顶点之间的关系就能还原一棵树

即便如此同级顶点之间没有左右顺序,所以称之为无序树

因此我们可以定义有序树:有序树是一种子节点被赋予顺序的有根树(rooted tree)

注意二路有序树和二叉树依然是不一样的,如果一个节点只有一个子节点,在二叉树里在左侧或者右侧是不一样的。但这两种分布在二路有序树中是相同的

有序树可以用链表实现,也可以用三元组数组实现。
链表可以同级节点从左到右串联,然后把每个子树的顶点连起来
节点的第一个指针指向first_child,第二个指向next_sibling

11.2 字典树

拆分成26路树来做字母的搜索,重复部分合并到父节点

11.3 外搜B树

前面的都是数据在内存,这里开始考虑磁盘

多路搜索树

二叉搜索树泛化后就是多路搜索树,任意整数m称之为树的阶,每个节点最多有m个孩子。如果孩子的数量k(k ≤ m),那么这个节点则包含k − 1个key并把所有子树节点分割为k个子集,如果子集为空则子节点为空

多路平衡(搜索)树

Balanced Multiway Trees
B-tree就是B树,有的时候被叫做B-树,垃圾的翻译为啥要把英文的连字符也翻译过来啊啊啊啊

目标是设计多路搜索树来最小化文件读取,因此我们希望让树高尽可能的小。
我们可以强制要求如下:
1,除叶子节点外不存在空的子树(因此key的子集分割能尽可能的高效
2.所有叶子节点必须在同层次(因此搜索次数可以保证在同样的次数内结束)
3.每个非叶子节点至少要持有n个子节点,n为最大值的一半(向上取整)以上

树上操作的整体思想就是多级索引,和你翻目录意思是一样的

B+树是B树的变体,加在了
1.子节点的孩子数量从最多是阶数m/2改为等于m
2.所有数据均出现在叶子节点,非叶子节点保留最小值的指针和值

B*树也是B树的变体,变在了
1.子节点的孩子数量从最少是阶数m/2改成了最少(2/3)m
2.插入的时候如果需要可以在兄弟节点中移动数据, 当两个兄弟节点都满了的时候再分割节点

B+ B* 都可以为了方便在同级节点中串联指针方便访问,国内文章说B+是在叶子节点加指针,B*是在B+的基础上给非叶子加指针,这个定义无从考证,不知道是国内哪个版本教材上说的。待考察

11.4 红黑树

在上一节我们使用线性表存储B树内部的节点,因为一个节点通常相对比较小并且是模拟磁盘操作,所以这样做是ok的。实际上这个结构需要顺序存储在磁盘上
然而一般来说我们可以使用任何有序的数据结构才存储B树中的每一个节点(二叉树节点)
小的二叉搜索树是一个不错的选择,我们需要小心的区分这两种连接
1.B树一个节点内部的连接
2.B树内部节点之间的连接
对于1用红色线连接
对于2用黑色线连接

除了根节点外,直连节点线段的颜色赋予这个节点,根节点无父节点,强行定义为黑色

因为树高一致,所以从根到叶子节点经过的B树节点数量一样,这些赋予黑色
因为前面定义的限制,一个4阶的B树 显然B树节点内部的节点的key一定在[2,4]之间,排除黑色节点,也就还剩下[1,3]

定义:
红黑树是一种二叉搜索树,每个节点有红色或黑色区分:条件如下
black condition 1. 从根到空的子树通过的相同数量节点为黑色
red condition 2. 如果父节点存在并且是黑色,则这个节点是红色

后面再找时间总结限制,国内翻译的一堆衍生性质和限制其实没啥必要,可以理解为推论。核心的限制其实非常少,红黑的定义只是为了方便区分这个二叉树节点实际表示的是B树节点的内部还是B树节点之间的分界点

明天继续图
mark 目前是569页 ,pdf是586页

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值