当使用2维时,R树可以保持z顺序吗?

时间:2010-08-26 17:16:23

标签: c# sorting data-structures r-tree

我正在根据Guttman的原始论文编写一个R-Tree的实现。我正在考虑将R-Tree用于我正在编写的程序,该程序涉及屏幕上的许多矩形,可以使用鼠标移动/重新调整大小。

我想有效地只选择特定矩形中的矩形并绘制它们(而不是迭代可能超过100个项目并检查边界是否相交)。我在几次读取Guttman论文后发现的问题是,无法为2D对象维护z顺序。

例如,如果我移动一个对象,它将被删除然后重新插入。当它重新插入时,它插入的节点将无法跟踪正确的顺序。我见过的R-Tree的大多数实现使用数组而只是找到空位。重新插入将基本上破坏任何z次序定位。

因此,当我去绘制与矩形相交的所有矩形时,它们返回的顺序不一定正确。

这个假设我错了吗?我在思考而不是使用数组,我可以使用AVL或Red-Black树并使用比较z-index的Comparer插入树中。这样,始终保持z顺序(这是最重要的因素)。

我也只是想在归还时对它们进行排序,但这可能会让我更加昂贵。

1 个答案:

答案 0 :(得分:2)

R-tree不应该以某种方式订购答案记录。

只需回答答案。这不是太慢。

顺便说一句,我可以把你的r-tree代码邮寄给你。它对我来说很好,但是如果有人检查一下Guttman或Beckman在他们的论文中写的那样会非常有用......

空间索引的顺序与严格的顺序基本不同......空间索引与B + -tree之间的区别。

您还可以拥有两个索引并加入它们。 你确实需要索引吗?什么东西很慢?