R 樹相關技術

2021-12-29 19:59:09 字數 3915 閱讀 8587

空間索引是對儲存在介質上的資料位置資訊的描述,用來提高系統對資料獲取的效率。gis涉及的各種海量複雜資料儲存於外存,如果對磁碟上的資料的位置不加以記錄和組織,每查詢乙個資料項都要掃瞄整個資料檔案,則這種訪問磁碟的代價將嚴重影響系統的效率。因此索引的建立與處理至關重要。此外gis所表現的地理資料多維性使得傳統的b樹索引不再適合,因為b樹所針對的字元、數字等傳統資料型別是在乙個良序集之中,即都是在乙個維度上,集合中任給兩個元素,都可以在這個維度上確定其關係只可能是大於、小於、等於三種,若對多個字段進行索引,必須指定各個欄位的優先順序形成乙個組合字段,而地理資料的多維性,在任何方向上並不存在優先順序問題,因此b樹並不能對地理資料進行有效的索引,所以需要研究特殊的能適應多維特性的空間索引方式。

2023年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(entrye):從r-tree中刪除項e

d1:呼叫findleaf來尋找存放e的葉子結點l;若沒有找到則停止;

d2:從l中刪去e;

d3:呼叫condensetree,傳遞引數l:

d4::若根結點只有乙個孩子,則讓該孩子結點成為新根節點。

演算法findleaf(nodet,entrye)

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於2023年提出,其後,人們在此基礎上針對不同的空間操作需求提出了各種改進方案。經過二十多年的發展,不斷產生的r樹變體逐漸形成了乙個枝繁葉茂的空間索引r樹家族。

1r+樹[2]

在guttman的工作的基礎上,許多r樹的變種被開發出來,sellis等提出了r+樹[10],r+樹與r樹類似,主要區別在於r+樹中兄弟結點對應的空間區域無重疊,這樣劃分空間消除了r樹因允許結點間的重疊而產生的「死區域」(乙個結點內不含本結點資料的空白區域),減少了無效查詢數,從而大大提高空間索引的效率,但對於插入、刪除空間物件的操作,則由於操作要保證空間區域無重疊而效率降低。同時r+樹對跨區域的空間物體的資料的儲存是有冗餘的,而且隨著資料庫中資料的增多,冗餘資訊會不斷增長。

2r*樹[3]

在2023年,beckman和kriegel提出了最佳動態r樹的變種——r*樹[11]。r*樹和r樹一樣允許矩形的重疊,但在構造演算法r*樹不僅考慮了索引空間的「面積」,而且還考慮了索引空間的重疊。該方法對結點的插入、**演算法進行了改進,並採用「強制重新插入」的方法使樹的結構得到優化。但r*樹演算法仍然不能有效地降低空間的重疊程度,尤其是在資料量較大、空間維數增加時表現的更為明顯。r*樹無法處理維數高於20的情況。

R 樹相關技術

空間索引是對儲存在介質上的資料位置資訊的描述,用來提高系統對資料獲取的效率。gis涉及的各種海量複雜資料儲存於外存,如果對磁碟上的資料的位置不加以記錄和組織,每查詢乙個資料項都要掃瞄整個資料檔案,則這種訪問磁碟的代價將嚴重影響系統的效率。因此索引的建立與處理至關重要。此外gis所表現的地理資料多維性...

R相關分析

函式 cor 檢測 cor.test 例如 li iris which iris species setosa 1 2 plot li 一元線性回歸 h c 171,175,159,155,152,158,154,164,168,166,159,164 w c 57,64,61,38,35,44,4...

R語言相關

最近在看資料探勘 生物醫學 的 其中用到了r source source analysis.r 執行analysis.r檔案mecars ls 取出mecars資料中ls這一列c的作用 x c 1,2,3 在r語言中 賦矩陣給x時需要 在矩陣前面加cgrep 搜尋函式,搜尋a中第一列存在 rna s...