RTree算法及介绍
空間索引是對存儲在介質上的數據位置信息的描述,用來提高系統對數據獲取的效率。GIS涉及的各種海量復雜數據存儲于外存,如果對磁盤上的數據的位置不加以記錄和組織,每查詢一個數據項都要掃描整個數據文件,則這種訪問磁盤的代價將嚴重影響系統的效率。因此索引的建立與處理至關重要。此外GIS所表現的地理數據多維性使得傳統的B樹索引不再適合,因為B樹所針對的字符、數字等傳統數據類型是在一個良序集之中,即都是在一個維度上,集合中任給兩個元素,都可以在這個維度上確定其關系只可能是大于、小于、等于三種,若對多個字段進行索引,必須指定各個字段的優先級形成一個組合字段,而地理數據的多維性,在任何方向上并不存在優先級問題,因此B樹并不能對地理數據進行有效的索引,所以需要研究特殊的能適應多維特性的空間索引方式。
1984年Guttman發表了《R樹:一種空間查詢的動態索引結構》[1]一種高度平衡樹,由中間節點和葉節點組成,實際數據對象的最小外接矩形存儲在葉節點中,中間節點通過聚集其低層節點的外接矩形形成,包含所有這些外接矩形。其后,人們在此基礎上針對不同空間運算提出了不同改進,才形成了一個繁榮的索引樹族,是目前流行的空間索引。
R樹是一種采用對象界定技術的高度平衡樹,是B?樹在?k?維空間上的自然擴展,它將空間對象按范圍劃分,每個結點都對應一個區域和一個磁盤頁,非葉結點的磁盤頁中存儲其所有子結點的區域范圍,非葉結點的所有子結點的區域都落在它的區域范圍之內;葉結點的磁盤頁中存儲其區域范圍之內的所有空間對象的外接矩形。每個結點所能擁有的子結點數目有上、下限,下限保證對磁盤空間的有效利用,上限保證每個結點對應一個磁盤頁,當插入新的結點導致某結點要求的空間大于一個磁盤頁時,該結點一分為二。R樹是一種動態索引結構,即:它的查詢可與插入或刪除同時進行,而且不需要定期地對樹結構進行重新組織。
R-Tree數據結構
(1)R-Tree是n叉樹,n稱為R-Tree的扇(fan)。
(2)每個結點對應一個矩形。
(3)葉子結點上包含了小于等于n的對象,其對應的矩為所有對象的外包矩形。
(4)非葉結點的矩形為所有子結點矩形的外包矩形。
R-tree具有以下性質:
(1)除根節點外,每個節點的項數介于最小項數m和最大項數M之間;
(2)根節點至少有兩個孩子,除非它是葉子節點;
(3)所有葉子節點位于同一層;
(4)同一節點中項,其排列沒有順序要求
R-Tree的的評價標準為:
(1)位置上相鄰的結點盡量在樹中聚集為一個父結點。
(2)同一層中各兄弟結點相交部分比例盡量小。
R樹是一種用于處理多維數據的數據結構,用來訪問二維或者更高維區域對象組成的空間數據.R樹是一棵平衡樹。樹上有兩類結點:葉子結點和非葉子結點。每一個結點由若干個索引項構成。對于葉子結點,索引項形如(Index,Obj_ID)。其中,Index表示包圍空間數據對象的最小外接矩形MBR,Obj_ID標識一個空間數據對象。對于一個非葉子結點,它的索引項形如(Index,Child_Pointer)。?Child_Pointer指向該結點的子結點。Index仍指一個矩形區域,該矩形區域包圍了子結點上所有索引項MBR的最小矩形區域。一棵R樹的如圖1所示。
R-Tree算法描述
(I)插入算法
?????基本思想:找到合適的葉子節點,插入之,若需分裂,則由下至上調整MBR值。算法如下:
?????I1:?調用ChooseLeaf來選擇一個合適的葉子節點L以容納需插入項E
?????I2:?若L中還能容納E,則加入之;否則調用SplitNode來獲取兩個節點L和LL,它們包含E和L中原有的所有項
?????I3:?調用AdjustTree,傳遞參數L,LL(若產生了分裂)
?????I4:?若節點分裂向上傳播導致根節點的分裂,則生成新的根節點。
算法ChooseLeaf:?選擇一個合適的葉子節點以放置新項E。合適的評價標準是插入E后的節點MBR面積增加度最少。
?????C1:?設N指向根結點root
?????C2:?若N是葉子節點,返回N??
?????C3:?若N不是葉子節點,讓F表示N中的一項,該項F容納E后,則N在面積上只需作面積最小擴展
?????C4:?設N指向葉子節點,則返回C2.
算法AdjustTree:?從葉子節點向根節點進行調整
?????A1:?設N=L,若L進行了分裂,則設NN=LL
?????A2:?若N為根節點,則返回
?????A3:?設P為N的雙親節點,EN為節點P中指向N的項,調整項EN的MBR
?????A4:?若NN存在,創建一個新項ENN,使其指向NN,同時計算出ENN的MBR.將ENN加入P,若不能容納則調用SplitNode產生節點P和PP,包含ENN和原來P中所有項
?????A5:?設N=P,?NN=PP,?轉至A2.
算法SplitNode:?將M+1項分成兩組,將它們加入到兩個新節點。
判斷節點分裂好壞的一個標準為:分裂后,兩個新節點對應的MBR的面積之和最小。下圖展示了節點分裂的一個例子。
一個時間復雜度為二次(Quadratic)的分裂算法如下:
??????S1:?調用PickSeeds選出兩項,將它們分別作為兩組的第一個元素;
??????S2:?若所有項都已分配完,則返回;若一組中的項如此之少,以至于將剩下的所有項添至其中才能滿足項數達到m的要求,則進行分配且返回;
??????S3:?調用PickNext選擇下一項,將其分配到某組中,該組在容納該項后,MBR只需作最小面積擴展,轉至S2.
算法PickSeeds:
??????PS1:?對每一項E1和E2,計算d=area(E1和E2合并之后的MBR)?–?area(E1)?–?area(E2);
??????PS2:選擇d值最大的一對項。
算法PickNext:
??????PN1:對每一項E,計算d1=<將E加入組1后MBR增加的面積>,同理計算d2;
??????PN2:選出d1和d2值差距最大的項。
(2)R-tree刪除算法
算法Delete(Entry?E):從R-tree中刪除項E
D1:調用FindLeaf來尋找存放E的葉子結點L?;若沒有找到則停止;
D2:從L中刪去E;
D3:調用CondenseTree,傳遞參數L?:
D4::若根結點只有一個孩子,則讓該孩子結點成為新根節點。
算法FindLeaf?(NODE??T,??Entry??E?)
FL1:若T不是葉子結點,則對于T中每一個與E相重疊的項,將該項所指的結點作參數,遞歸調用FindLeaf
FL2:若T是葉子結點,則檢查T中是否有與E相等的項,若有,則返回T
算法CondenseTree?:傳遞參數結點L?,該結點進行了刪除項的操作
CT1:設N=L?,將存儲被刪結點的集合Q置為空;
CT2:若N是根,轉至CT6;否則,設P為N的父節點,EN為P中指向N的項;
CT3:若N中的項數小于m,在P中刪除EN,并把N加入到集合Q中;
CT4:若N沒有被刪除,調整EN的MBR;
CT5:設N=P,轉向CT2;
CT6:重新插入集合Q中所有節點中的所有項,對于葉子節點中的項仍插入到葉子節點
中,但對于中間節點的項需要插入到其原來所在的那一層。
R樹主要變體
R樹最初由Guttman于1984年提出,其后,人們在此基礎上針對不同的空間操作需求提出了各種改進方案。經過二十多年的發展,不斷產生的R樹變體逐漸形成了一個枝繁葉茂的空間索引R樹家族。
1?R+樹[2]
在Guttman的工作的基礎上,許多R樹的變種被開發出來,?Sellis等提出了R+樹[10],R+樹與R樹類似,主要區別在于R+樹中兄弟結點對應的空間區域無重疊,這樣劃分空間消除了R樹因允許結點間的重疊而產生的“死區域”(一個結點內不含本結點數據的空白區域),減少了無效查詢數,從而大大提高空間索引的效率,但對于插入、刪除空間對象的操作,則由于操作要保證空間區域無重疊而效率降低。同時R+樹對跨區域的空間物體的數據的存儲是有冗余的,而且隨著數據庫中數據的增多,冗余信息會不斷增長。
2?R*樹[3]
在1990年,Beckman和Kriegel提出了最佳動態R樹的變種——R*樹[11]。R*樹和R樹一樣允許矩形的重疊,但在構造算法R*樹不僅考慮了索引空間的“面積”,而且還考慮了索引空間的重疊。該方法對結點的插入、分裂算法進行了改進,并采用“強制重新插入”的方法使樹的結構得到優化。但R*樹算法仍然不能有效地降低空間的重疊程度,尤其是在數據量較大、空間維數增加時表現的更為明顯。R*樹無法處理維數高于20的情況。
3?QR樹
QR樹利用四叉樹將空間劃分成一些子空間,在各子空間內使用許多R樹索引,從而改良索引空間的重疊。QR樹結合了四叉樹與R樹的優勢,是二者的綜合應用。實驗證明:與R樹相比,QR樹以略大(有時甚至略小)的空間開銷代價,換取了更高的性能,且索引目標數越多,QR樹的整體性能越好。
4?SS樹
SS樹對R*樹進行了改進,通過以下措施提高了最鄰近查詢的性能:用最小邊界圓代替最小邊界矩形表示區域的形狀,增強了最鄰近查詢的性能,減少將近一半存儲空間;SS樹改進了R*樹的強制重插機制。當維數增加到5是,R樹及其變種中的邊界矩形的重疊將達到90%,因此在高維情況(≧5)下,其性能將變的很差,甚至不如順序掃描。
5?X樹
X樹是線性數組和層狀的R樹的雜合體,通過引入超級結點,大大地減少了最小邊界矩形之間的重疊,提高了查詢效率。X樹用邊界圓進行索引,邊界矩形的直徑(對角線)比邊界圓大,SS樹將點分到小直徑區域。由于區域的直徑對最鄰近查詢性能的影響較大,因此SS樹的最鄰近查詢性能優于R*樹;邊界矩形的平均容積比邊界圓小,R*樹將點分到小容積區域;由于大的容積會產生較多的覆蓋,因此邊界矩形在容積方面要優于邊界圓。SR樹既采用了最小邊界圓(MBS),也采用了最小邊界矩形(MBR),相對于SS樹,減小了區域的面積,提高了區域之間的分離性,相對于R*樹,提高了鄰近查詢的性能。
參考文獻
[1]?A.?Guttman.?R-Trees:?a?dynamic?index?structure?for?spatial?searching.?In?SIGMOD?Conference,?1984.
[2]Sellis?T.?K.?,Roussopoulos?N.?,?Faloutsos?C.?.?The?R+-tree:?A?dynamic?index?for?multidimensional?objects.?In?Proceedings?of?the?13th?VLDB,?Brighton,?England,?1987,??507~?518.
[3]Beckmann?N.?,?Kriegel?H.?P.?,?Schneider?R.?,?Seeger?B.?.?The?R*-tree:?An?efficient?and?robust?access?method?for?points?and?rectangle.?In:?Proceedings?of?SIGMOD,?Atlantic?City,?New?Jersey,?1990,?322~331.
http://blog.csdn.net/jiqiren007/archive/2010/03/14/5377750.aspx
?
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的RTree算法及介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设置vs2008代码区的背景色
- 下一篇: exit(0)与exit(1)、retu