我正在根据Guttman的原始论文编写一个R-Tree的实现。我正在考虑将R-Tree用于我正在编写的程序,该程序涉及屏幕上的许多矩形,可以使用鼠标移动/重新调整大小。
我想有效地只选择特定矩形中的矩形并绘制它们(而不是迭代可能超过100个项目并检查边界是否相交)。我在几次读取Guttman论文后发现的问题是,无法为2D对象维护z顺序。
例如,如果我移动一个对象,它将被删除然后重新插入。当它重新插入时,它插入的节点将无法跟踪正确的顺序。我见过的R-Tree的大多数实现使用数组而只是找到空位。重新插入将基本上破坏任何z次序定位。
因此,当我去绘制与矩形相交的所有矩形时,它们返回的顺序不一定正确。
这个假设我错了吗?我在思考而不是使用数组,我可以使用AVL或Red-Black树并使用比较z-index的Comparer
插入树中。这样,始终保持z顺序(这是最重要的因素)。
我也只是想在归还时对它们进行排序,但这可能会让我更加昂贵。
答案 0 :(得分:2)
R-tree不应该以某种方式订购答案记录。
只需回答答案。这不是太慢。
顺便说一句,我可以把你的r-tree代码邮寄给你。它对我来说很好,但是如果有人检查一下Guttman或Beckman在他们的论文中写的那样会非常有用......空间索引的顺序与严格的顺序基本不同......空间索引与B + -tree之间的区别。
您还可以拥有两个索引并加入它们。 你确实需要索引吗?什么东西很慢?