我试图理解r-tree是如何工作的,并且看到有两种类型的分裂:二次和线性。
线性和二次之间究竟有什么区别?在哪种情况下,一个优先于另一个?
答案 0 :(得分:2)
两者都是寻找小区域分裂的启发式方法。
在二次方中,您可以选择两个尽可能多地创建空白空间的对象。在线性中,您可以选择两个相距最远的对象。
Quadratic提供更好的分割质量。然而,对于许多实际目的,线性与二次方一样简单,快速和良好。
答案 1 :(得分:2)
原始的R-Tree论文描述了PickSeeds和LinearPickSeeds在3.5.2和3.5.3节中的区别,第4节中的图表显示了两种算法之间的性能差异。请注意,图4.2使用Y轴的指数刻度。
http://www.cs.bgu.ac.il/~atdb082/wiki.files/paper6.pdf
我个人会将LinearPickSeeds用于R-Tree具有高“流失”且内存使用率不高的情况,而QuadraticPickSeeds用于R-Tree相对静态或在有限的内存环境中的情况。但这只是一个经验法则;我没有基准来支持这一点。
答案 2 :(得分:2)
还有更多变种:穷举搜索,Greenes分裂,Ang Tan分裂和R * -tree分裂。
所有这些都是启发式的,可以在可接受的时间内找到一个好的分裂。
在我的实验中,R * -tree拆分效果最好,因为它产生更多的矩形页面。 Ang-Tan虽然是“线性的”,但它产生的切片对于大多数查询来说实际上是一种痛苦。通常,构造/插入的成本并不太重要,但查询是。