2016-11-14 21 views
-1

我想完整理解Java上的二維RTrees,但我迷失於解釋中,我希望有人能告訴我他們是如何工作的。RTrees for dubmies

我所得到的關於他們是這樣的:

你開始節點以M entrys的最大數量的列表,當你試圖讓你不得不拆分該節點一個更多的價值,我必須保持有兩片葉子的根節點。我不想討論最好的分裂方法,我們正在考慮一個簡單的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; 
    } 
} 

什麼我不明白(很抱歉,如果是這樣的話基本):

我必須問用戶輸入座標值?

將如何工作插入方法的基本情況下,我會問哪些參數?

我錯了嗎?

+0

我通過https://en.wikipedia.org/wiki/R-tree瀏覽。據我所知,只有你的葉節點包含'E'元素,而不是內部節點。一個矩形應該有左和右(都在X軸上)和頂部和底部。是的,你必須從某處獲得座標,爲什麼不是用戶? –

+0

謝謝@ OleV.V。現在我知道用戶輸入了一個矩形,並且顯示了其中的值。 –

回答

0

二維R-tree中的矩形是邊界框。他們需要四個座標,例如OleV所說的左,右,上和下,而不僅僅是x和y。

樹中的非葉節點包含多個條目,每個條目都有一個邊界框和下一級別的另一個樹節點的鏈接。條目的邊界框包含下面節點中所有條目的邊界框。

葉節點是相似的,但每個條目都有一個邊界框和一個指向數據對象的鏈接,該數據對象不是樹的一部分。邊界框包含數據對象。

我們必須找到一種方法來查找對象的邊界框。要插入一個對象,找出它的邊界框並組成一個葉子條目。然後,從根部開始向下走向葉子。在葉子上方的每個級別,通過比較其邊界框和條目的邊界框,爲新對象選擇一個子樹。選擇數據項接近新對象的子樹。

當您到達葉級別時,將新條目添加到該節點。如果條目太多,您可能必須拆分節點。

在下降的過程中,您可能需要放大非葉條目中的邊界框以包含新條目。

+0

因此,搜索R樹內的對象必須位於用戶使用X和Y min和max設置的邊界框內,並且根據是否爲葉節點將具有大小和對象,同時一個非葉將具有對象。謝謝你@Antonin –