读《Java数据结构和算法》(第十章)

一、第十章简介

1、多叉树
(1)在二叉树中,每个节点有一个数据项,最多有两个子节点
(2)多叉树中,每个节点可以有更多的数据项和更多的子节点
(3)多叉树的每个节点最多有四个子节点和三个数据项

2、B-树
(1)多叉树
(2)专门用在外部存储中来组织数据(外部的意思是主存储的外部,通常是指磁盘驱动器)
(3)节点可以有几十或几百个子节点

二、第十章 10.1

1、2-3-4树
(1)名字中的2、3和4的含义是指一个节点可能含有的子节点的个数
(2)对非叶节点有三种可能的情况

有一个数据项的节点总有两个子节点
有两个数据项的节点总是有三个子节点
有三个数据项的节点总是有四个子节点

(3)非叶节点的子节点数总是比它含有的数据项多1

2、搜索2-3-4数树
(1)从根开始,除非查找的关键字值就是根,否则选择关键字所在的合适范围,转向那个方向,直到查找到为止
(2)节点分裂
如果往下寻找要插入位置的路途中,节点已经满了,扎入就变得复杂,此时必须分裂split,正是分裂过程保证了树的平衡

3、容量
(1)树为4层的话,限制每层1、4、16、64等

三、第十章 10.2

1、红黑树和2-3-4树
(1)可以通过应用一些简单的规则变成另一个,而且保持平衡的操作也是一样的,可以称为同构

2、2-3树
(1)2-3树的节点比2-3-4树少存一个数据项和少一个子节点
(2)一种多叉树,节点可以保存1个或2个数据项,可以有0个、1个、2个或者3个子节点

3、外部存储
(1)RAM:数据存储在主存中,随机访问存储器
(2)计算机的主存按电子的方式工作,几微秒就可以访问一个字节
(3)移动每块都需要存取两次磁盘:一次读和一次写
(4)找到插入点时,把包含插入点的数据块读入到存储缓冲区中,块中最后一条记录保存住,移动适当数目的记录为要插入的新纪录腾地方,之后就把缓冲区的内容写回到磁盘中

4、B-树
(1)多叉树,每个节点有更多的数据项
(2)将一块数据作为树的节点,一次读或写一块内的数据时效率最高
(3)索引
用顺序有序排列存储记录但用文件索引连接数据加快文件访问速度
(4)文件索引是由关键字-块对组成的列表,按关键字排序

5、外部文件排序
(1)归并排序是外部数据排序的首选方法
(2)相比于其他排序方法,磁盘访问更多的涉及临近的记录而不是文件中随机的部分
(3)读取一块,记录在内部排序,然后把排完序的块写回到磁盘中,下一块也是,直到所有块内部都有序为止
(4)读取两个有序的块,合并成一个两块的有序的排序,再把它们写回到磁盘

四、小结

1、多叉树
(1)多叉树比二叉树有更多的关键字和子节点
(2)2-3-4树是多叉树,每个节点最多有三个关键字和四个子节点
(3)多叉树中,节点中数据按关键字升序排列
(4)2-3-4树中,所有的插入都在叶节点上,所有的叶节点在同一层上

2、2-3-4树
(1)在2-3-4树中有三种可能的节点:2-节点有1个关键字和2个子节点,3-节点有2个关键字和3个子节点,4-节点有3个关键字和4个子节点
(2)分裂根要创建两个新节点:分裂出另一个节点,创建一个新节点
(3)只有分裂根时2-3-4树的高度才会增长
(4)要把2-3-4树转化成红黑树,需要把每个2-节点变成黑色节点,把每个3-节点变成一个黑色的父节点和一个红色的就字节的,把每个4-节点变成一个黑色父节点和两个红色子节点
(5)2-3-4树高度log2N,浪费空间,因为很多节点还不满一半
(6)在2-3树插入需要找到合适的叶节点,然后从叶节点开始向上分裂,直到找到不满的节点

3、外部存储
(1)外部存储器比主存大,便宜(每字节),但慢
(2)外部存储器中的数据通常需要在主存间来回传送,一次传送一块
(3)在外部存储器里的数据可以按照关键字顺序有序排序,查找快,但是插入或者删除很慢

4、B-树
(1)多叉树,每个节点可以有几十或者上百个关键字和子节点
(2)子节点的个数总是比关键字的个数多1
(3)为达到最好的性能,B-树通常在一个节点中保存一块的数据
(4)如果查找条件涉及多个关键字,在文件所有的记录中顺序查找可能是最实用的方法