对傻瓜进行计算

时间:2016-11-14 04:59:25

标签: java algorithm r-tree

我想完全理解Java上的二维RTree,但我在解释中迷失了方向,我希望有人能告诉我它们是如何工作的。

我得到的是这个:

首先是一个具有最大被告数M的节点列表,当你试图再获得一个你需要分割这个节点的值时,我必须保留一个有两个叶子的根节点。我不想讨论最好的分割方法,我们正在考虑一个简单的简单RTree。

现在我要编写一个基本代码,说明我认为它的工作原理:

class RTree<E> {

     //I need a root which is a list of nodes.
     public NodeList root;

     //From data we create rectangles that contain values
     class Rectangle {
          public double x;
          public double y;
     }

     class Node {
          public E valor;
          public Rectangle rect;
     }

     class ListNodo {
          public Node node;
          public NodeList next;
     }
}

我没有得到(对不起,如果这是基本的):

我是否必须要求用户在坐标中输入值?

如何处理基本情况的插入方法,我会询问哪些参数?

我错了吗?

2 个答案:

答案 0 :(得分:1)

作为我对这个问题失效的研究的一部分,我发现了这篇文章,它解释了R树的基本算法。如果其他人想要更深入了解R树,以补充@Antonin的答案,请看看:http://www.bowdoin.edu/~ltoma/teaching/cs340/spring08/Papers/Rtree-chap1.pdf

答案 1 :(得分:0)

二维R树中的矩形是边界框。他们需要四个坐标,例如OleV所说的左,右,顶部和底部,而不仅仅是x和y。

树中的非叶子节点包含许多条目,每个条目都有一个边界框和一个到下一级别的另一个树节点的链接。条目的边界框包含下面节点中所有条目的边界框。

叶节点类似,但每个条目都有一个边界框和一个指向数据对象的链接,该数据对象不是树的一部分。边界框包含数据对象。

我们必须找到一个对象的边界框。要插入对象,请找出其边界框并组成一个叶子条目。然后,从根部开始向下走向树叶。在叶子上方的每个级别,通过将其边界框与条目的边界框进行比较,为新对象选择子树。选择其数据项接近新对象的子树。

到达叶级别时,将新条目添加到该节点。如果条目太多,您可能必须拆分节点。

在向下的过程中,您可能需要放大非叶条目中的边界框以包含新条目。