R樹是樹的數據結構用於空間的訪問方法,即索引多維信息等地理座標,矩形或多邊形。R樹是由安東寧Guttman提出的在1984[ 1 ]已
發現在理論和應用的環境中大量使用。[ 2 ]一個樹常見的實際使用情況可能是存儲空間的物體如餐館的位置,或者說典型的地圖是
由多邊形:街道,建築,湖泊,海岸線的輪廓,並找到答案,快速查詢如“找到所有的博物館在我的當前位置”2公里,“在我的2
公里位置檢索所有路段”(在顯示他們導航系統)或“找到最近的加油站”(雖然不是以道路考慮)。樹還可以加速最近鄰索[ 3 ]
R樹的想法
數據結構的關鍵是組附近的物體和代表他們最小邊界矩形在樹下一個更高的水平;“R”的樹是矩形。因爲所有的對象都在這個邊框,一個查詢,不相
交的矩形也不能相交的任何包含的對象。在葉級,每個矩形都描述了一個對象;在較高的水平,越來越多的對象的聚合。這也可以看作是數據集越來越
粗近似。類似於B-樹,R樹是一個平衡搜索樹(因此所有的葉子節點都在同一高度),組織頁面中的數據,並用於存儲磁盤上(如用在數據庫)。每一
頁所包含的項的最大數目,通常表示爲 。這也保證了最小填充(除了根節點),但是最好的性能已經與最小填充30%–40%的最大個數(B-樹保證
50%頁填寫的經歷,和B *樹即使是66%)。這是空間數據與存儲在B樹的線性數據需要更復雜的平衡。與大多數樹的搜索算法(如,交叉,遏制,最近鄰
搜索)是相當簡單的。關鍵的想法是使用包圍盒來決定是否在子樹搜索。這樣,在樹上大部分的節點不在尋讀。像樹,使得樹適合大數據集數據庫,其
中節點可分頁內存需要時,整個樹不能被保存在內存中。R樹的關鍵難點是建立,一方面是一種有效的平衡樹(這樣的葉子節點都在同一高度)另一方
面,矩形不包括太多的空間,不要重疊太多(這樣在搜索過程中,較少的子樹需要處理)。例如,插入元素獲得一個高效的樹的本意是要插入子樹,需
要至少擴大其包圍盒。一旦頁面全是,數據被分成兩個集應該覆蓋的最小面積每。大部分的研究和改進R-Tree的旨在提高樹的建立可以分爲兩個目標的
方法:從頭開始建立一個高效的樹(稱爲散裝)和表演的變化對現有的樹(插入和刪除)。樹不保證好最壞情況特性,但一般表現良好,與現實世界的
數據。[ 5 ]而更多的理論興趣,(整裝)優先樹R-樹的變體是最壞情況下的最優,[ 6 ]但是,由於增加了複雜性,並沒有在實際應用中至今備受關
注。當數據被組織在一個樹,這K近鄰(任何lP範數)所有的點可以有效地利用空間連接計算。[ 7 ]這有利於基於K近鄰算法很多,例如局部異常因子。
德利-俱樂部,[ 8 ]密度聚類是一個鏈接聚類分析算法使用的R-樹結構類似的一種空間連接能夠有效地計算光學聚類。
數據佈局
數據樹中的組織頁面,可以有一項變量數(一些預先定義的最大值,通常高於最低填寫)。在一個非每個條目—葉節點店鋪兩部分數據:識別方法一子
節點,和包圍盒這孩子節點內的所有條目。葉節點存儲每個孩子所需的數據,往往是一個點或邊界框代表孩子和外部標識符的孩子。點數據,葉條目可
以只點自己。多邊形數據(通常需要大量的多邊形存儲)共同設置只存儲MBR(最小外接矩形)的多邊形隨着樹的唯一標識符。
搜索
輸入的是一個矩形(搜索查詢框)。搜索是搜索的一個非常相似的B樹。搜索開始從樹的根節點。每個內部節點包含一組矩形和指針對應的子節點,每個
葉節點包含空間對象的矩形(一些空間對象的指針可以有)。在每一個節點的矩形,它必須決定是否重疊搜索矩形或不。如果是,相應的子節點已經被
搜查也。尋找這樣一個遞歸的方式直到所有重疊節點已走過。當一個葉子節點的達成,所含的包圍盒(長方形)測試對搜索矩形和它們的對象(如果有)
放入結果集,如果他們在搜索矩形內。
優先搜索等最近鄰搜索,查詢由一個點或矩形。根節點插入優先隊列。直到隊列爲空或所需的結果數已返回繼續搜索隊列中最近的輸入處理。樹節點的
擴展和孩子重新。葉項回來時遇到的隊列。[ 9 ]這種方法可用於不同的距離度量,包括大圓距離地理數據。[ 4 ]
插入
插入一個對象,樹的遍歷從根節點遞歸。在每一個步驟,在當前目錄下的所有矩形的節點進行檢查,和候選人使用啓發式如選擇矩形需要至少擴大。搜
索然後降臨到這個頁面,直到到達一個葉子節點。如果葉子結點是滿的,它必須分裂之前插入了。再次,由於窮舉搜索是太貴了,一個啓發式算法把節
點分爲兩種。添加新創建的節點之前的水平,這個水平可以再次溢出,這些溢出可以傳播到根節點當節點也溢出,新的根節點創建和樹增加了高度。
選擇插入子樹
在每一個級別,該算法需要決定在哪個子樹插入新的數據對象。當一個數據對象完全包含在一個單一的矩形,選擇是明確的。當有需要擴大多個選項或
矩形,可以有選擇的樹的性能有顯著的影響。
在經典的基於對象插入最少需要擴大的子樹。在更先進的R*樹,混合啓發式算法。葉的水平,它試圖儘量減少重疊(如關係,寧願至少擴大然後最小面
積);在更高的層次,它的行爲類似於樹,但關係又喜歡子樹面積較小。減少重疊的矩形在R*樹比傳統的R樹的主要好處之一(這也是另一個使用啓發
式,結果不僅子樹的選擇)。
溢出的節點分裂
由於重新分配一個節點的所有對象分爲兩節點的選擇指數,啓發式需要找到最佳的分割。在經典的R-樹,Guttman提出兩個啓發式算法,稱爲quadraticsplit
和linearsplit。在二次分裂,爲長方形,有在同一個節點的最不利組合的配對算法的搜索,並把它們作爲初始對象分爲兩個新組。然後搜索入口爲一組
最強的偏好(面積增加)和指定對象本組直到所有對象賦值(滿足最小填土)。
還有其他的分裂策略,如格林尼的分裂,[ 10 ]這個R*樹分割啓發[ 11 ](這再次試圖最小化重疊,但也喜歡二次頁)或線性分割算法和褐色了[ 12 ](但
可以產生非常不規則的矩形,不表現爲許多現實世界的範圍和窗口查詢)。除了擁有更先進的啓發式的分裂,R*樹還試圖避免將一些成員節點分裂的一個
節點,這是類似的方式B-樹平衡節點溢出。這表明,減少重疊和提高樹的性能。
最後,該採油樹[ 13 ]可以被看作是一個R*樹的變種,也可以決定不分裂的一個節點,但構建含所有額外的條目,一個所謂的超級節點,當它沒有找到
一個好的分裂(特別是高維數據)。