最近在看R*树,头疼的一笔。小小总结一下,希望对研究这方面的人有帮助(有些东西是参考了网上其他人的文章)。
说道R*树不得不提到R树,因为它是R树的变种(variant)。R树是1984年由Guttman等人提出来的,他们在sigmod上发表了一篇名叫“R-trees a dynamic index structure for special searching”。R树是一种高度平衡树。它由叶子节点和非叶子节点组成,实际数据对象的最小外界矩形存储在叶节点中,中间节点通过聚集其底层节点的外界矩形形成,包含所有这些外界矩形。其后,人们在此基础上针对不同空间运算提出了不同改进,才形成了一个繁荣的索引树族,是目前最流行的空间索引。
R树是一个采用空间对象界定技术的高度平衡树,它将空间对象按范围划分,每个节点对应一个区域和一个磁盘页。非叶结点的磁盘页中存储其所有子结点的区域范围,非叶结点的所有子结点的区域都落在它的区域范围之内;叶结点的磁盘页中存储其区域范围之内的所有空间对象的外接矩形。每个结点所能拥有的子结点数目有上、下限,下限保证对磁盘空间的有效利用,上限保证每个结点对应一个磁盘页,当插入新的结点导致某结点要求的空间大于一个磁盘页时,该结点一分为二。R树是一种动态索引结构,即:它的查询可与插入或删除同时进行,而且不需要定期地对树结构进行重新组织。
R树的索引结构如下:
(1)R-Tree是n叉树,n称为R-Tree的扇(fan)。
(2)每个结点对应一个矩形。
(3)叶子结点上包含了小于等于n的对象,其对应的矩为所有对象的外包矩形。
(4)非叶结点的矩形为所有子结点矩形的外包矩形。
(1)除根节点外,每个节点的项数介于最小项数m和最大项数M之间;
(2)根节点至少有两个孩子,除非它是叶子节点;
(3)所有叶子节点位于同一层; 每一个结点由若干个索引项构成。
对于叶子结点,索引项形如(I,tuple-identifier)。
I表示包围空间数据对象的最小外接矩形MBR,
tuple-identifier标识一个空间数据对象。
对于一个非叶子结点,它的索引项形如(I,Child_Pointer)。
Child_Pointer指向该结点的子结点。
I仍指一个矩形区域,该矩形区域包围了子结点上所有索引项MBR的最小矩形区域。
R树的一些性质:
(1)除根节点外,每个节点的项数介于最小项数m和最大项数M之间;
(2)根节点至少有两个孩子,除非它是叶子节点;
(3)所有叶子节点位于同一层;