R*树(三)

     在一、二中,我写了R树的一些性质和算法。在此之后呢,在1990年的时候,beckmann对R树进行了改进,提出了R*树。他们在sigmod发表了一篇名叫“The R*-tree:An Efficient and Robust method for points and Rectangles”.R*树和R树在结构上完全相同。由前面的介绍可知,R树的算法描述中,仅仅考虑了面积扩展最小这一点,而beckmann提出的R*树在面积的基础上还引入了overlap-value以及margin-value等因素。

    一是在chooseSubtree算法中,在非叶子结点层子树的选择是沿用Guttman的面积增量作为标准,而在叶子结点层子树采用相互重叠部分增量作为标准。ChooseSubtree算法描述:

       1.设N为树的根节点

       2.若N为叶子节点就返回。否则,如果N指向叶子节点,选择N中的一项,使得该项容纳新项后重叠面积扩展最小

                                                   如果N不指向叶子节点,选择N中的一项,使得该项容纳新项后面积扩展最小

       3.让N指向其叶子节点,返回2。

   二是在分裂算法中,要将M+1个entries分到2个group中。

       基本思想:沿着分裂axis ,先按lower值排序,在按upper值排序,对于每种排序有M-2m+1中分布,例如:第k中分布的情况是这样的:group1包含前面(m-1)+ k个entry,剩下来的分给group2。

三个 标准:         

      Area-value
area[bb(1st group)] + area[bb(2nd group)] 
     Margin-value
margin[bb(1st group)] + margin[bb(2nd group)]
    Overlap-value
area[bb(1st group)]    Ç  area[bb(2nd group)] 

            bb  denotes  bounding box of a set of rectangles

   分裂算法描述:

         1.调用ChooseSplitAxis 决定分裂axis

         2.调用ChooseSplitIndex 选择沿着分裂axis上的最佳分布

         3.根据上面的分布,分裂成2个节点

       ChooseSplitAxis 算法描述:

               1.对于每一个axis,分别按lower值和upper值排序,计算各种可能分布的所有的margin-value值的和S

               2.选择S最小的那个axis作为分裂Axis

       ChooseSplitIndex 算法描述:

               1.根据已选定的axis,计算出各种分布的overlap-value,选出overlap-value值最小的那一个分布作为最终分布

   插入算法描述:

        1.调用ChooseSubtree选择一个叶子节点N来存放新的索引项E

        2.如果N不满,就插入E,否则,调用OverflowTreatment

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值