个人博客
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页

20220601数据结构绿皮书读书笔记相关推荐

  1. 20220530数据结构绿皮书读书笔记

    个人博客 https://blog.hylstudio.cn/archives/964 20220530数据结构绿皮书读书笔记 9 表格和信息检索 9.1 简介 第七章我们证明过,仅仅使用比较的方式从 ...

  2. 20220518数据结构绿皮书读书笔记

    个人博客 https://blog.hylstudio.cn/archives/945 为了良好的阅读体验,建议到个人博客或CSDN,QQ空间就是备份用的,tx看起来彻底放弃日志了.... 20220 ...

  3. 20220517数据结构绿皮书读书笔记

    个人博客 https://blog.hylstudio.cn/archives/942 为了良好的阅读体验,建议到个人博客或CSDN,QQ空间就是备份用的,tx看起来彻底放弃日志了.... 20220 ...

  4. 20220527数据结构绿皮书读书笔记书笔记

    个人博客 https://blog.hylstudio.cn/archives/961 20220527数据结构绿皮书读书笔记 8 排序 各种排序算法来咯 插入排序.选择排序.希尔排序.快排.堆排 8 ...

  5. 20220519数据结构绿皮书读书笔记

    个人博客 https://blog.hylstudio.cn/archives/949 20220519数据结构绿皮书读书笔记 2.5.3 优化数据结构的定义 4个层次,1.概念,2.算法,3.编程, ...

  6. 20220513数据结构绿皮书读书笔记

    20220513数据结构绿皮书读书笔记 效率分析 程序运行哪里耗时最长?显然不是输入,因为只有一次,输出一般来说也很快.大量的计算都是在update方法个neighborCount方法的调用上,在每代 ...

  7. 20220512数据结构绿皮书读书笔记

    20220512数据结构绿皮书读书笔记 维护程序的第一步就是review.分析.评估.思考如下几个问题 1.程序是否按需求正确解决了问题? 2.程序在所有条件下都能正常的工作吗 3.程序是否有一个好的 ...

  8. 2012-2-24 《数据结构》读书笔记2 线性表

    "软件只不过是人的思想产物,软件可能是人能造出来的最复杂的实体"这是昨天晚上UML(统一建模语言)老师的一句话,也更加坚定了我学习软件的决心,真的有这么复杂么,其实还是自己不够用心 ...

  9. 《大话数据结构》读书笔记-树

    写在前面:本文仅供个人学习使用.<大话数据结构>通俗易懂,适合整体做笔记输出,构建体系.并且文中很多图片来源于该书,如有侵权,请联系删除. 文章目录 6.2 树的定义 6.2.1 结点分类 ...

最新文章

  1. android 适配
  2. 三星 arm9 linux,基于arm9内核三星s3c2410平台下linux四键按键驱动程序
  3. IOS开发笔记15-自定义类
  4. 'datetime.datetime' object is not callable
  5. Linux系统下MySQL数据库的备份和恢复
  6. 攻破JAVA NIO技术壁垒
  7. mybatis-plus代码生成器使用和代码
  8. 【python】有意思的python小项目GitHub地址汇总
  9. 以太坊代币事件监控_以太坊程序员的常见误解
  10. matlab handle plot
  11. 13.深入分布式缓存:从原理到实践 --- 缓存在社交网络Feed系统中的架构实践
  12. 【科研技巧】在绘图软件中如何插入数学公式,比如Processon、Visio、draw.io
  13. Android播放音乐的代码,android源代码(完整的音乐播放器)
  14. 解决安卓软件提示“解析软件包时出现问题”
  15. java以某个字符串断句_结合 ictclass4j 和 KTDictSeg 写自己的分词器----断句(1)
  16. 杭电考研经验贴———报考计算机专业,慎重!!!
  17. SpringBoot 统一功能处理
  18. layui表头宽度和表格一致_layui表格如何把表头固定
  19. 《深入理解计算机系统》第一章
  20. win7 黑屏之感叹

热门文章

  1. ASP.Net MVC PartialView的应用
  2. 乳胶床垫能用电热毯吗
  3. java程序员一天多少行有效代码,持续更新~
  4. 服装实体店如何突破销售困境
  5. 三伏天,人体内有一个“冰箱”
  6. datetime与smalldatetime之间的区别小结
  7. Brew安装mysql时,最后ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents这句什么意思
  8. ios uri正则表达式_正确匹配URL的正则表达式
  9. 【算法】杨辉三角(贾宪三角)(帕斯卡三角)
  10. innerHTML与innerText的区别