R*树(二)

    在(一)中,介绍了R树的一些结构及其性质,这里我们来学习一下它的算法。

    R-tree search 算法描述:

       基本思想:从根节点开始比较其中的每一个entry,找出所有有重叠部分的entry,然后再到这些entry所指向的叶子节点去做同样的事  情,直到找到叶子节点那一层中所有符合条件的entry。

       判定标准是:搜索区域S与节点有重叠。

       注意:一个节点中与之相重叠的entry可能不止一个,所以搜索算法可能会遍历树的所有路径。

    插入算法描述:

       1.调用ChooseSubtree来选择一个合适的叶子节点L能够容纳插入项E

       2.若L还能容纳E,则加入。否则,调用Splitnode来获取分裂后的来年各个节点L和LL,它们包含E和L中原有的entry。

       3.从下至上调整树:设P为L的双亲节点,ep为指向L的项,调整ep的MBR。创建一个新的项epp指向LL,计算其MBR并将其加入到P中若P也满了则再次分裂,直至根节点,若根节点也满了,则分裂根节点 ,产生一个新的根节点指向分裂后的两个节点。

       基本思想:找到合适的叶子节点将其插入,若需分裂,则之下而上调整MBR。

    ChooseSubtree算法描述:

       1.设N为树的根节点

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

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

        标准是:面积扩张最小,在R树种中强调的最多的。

    splitnode算法描述:

       1.调用pickseeds选出2项,分别作为2组的第一项

       2.调用distributeEntry 直到 所有项已经分配  或者 其中有一组已经有了M-m+1个索引项

       3.若还有多余的,将他们分配到项数叫少的一组使得它的项数达到m

    pickseeds算法描述:

       1.对每一组entry E1和E2,计算d= area(E1 E2合并之后的MBR)-area(E1)-area(E2)

       2.选择d最大的一对

    distributeEntry 算法描述:

       1.调用PickNext选择下一项

       2.将其分配到某组中,该组在容纳该项后,MBR只需作最小面积扩展

    PickNext算法描述:

       1.对于剩下的每一个entry E 计算d1=<加入组1后MBR增加的面积>,同理计算d2

       2.选出d1 和d2差距最大的一项

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值