R TREE學習借鑑之路

2021-07-25 19:49:08 字數 2693 閱讀 5242

在trajectory中,r tree是基礎,看了**不是特別明白,看下部落格,進一步理解:

1.   比較清楚講解的link然後,在內部裡面,閱讀聯想b tree提到的僅包含key 在non leaf 節點的舉例,前後聯想r tree,融會貫通

2. **實現部分,忘了typedef struct用法,順便複習一下。

typedef struct tagmystruct

mystruct;

3. 

陣列指標(也稱行指標)

定義 int (*p)[n];

()優先順序高,首先說明p是乙個指標,指向乙個整型的一維陣列,這個一維陣列的長度是n,也可以說是p的步長。也就是說執行p+1時,p要跨過n個整型資料的長度。

如要將二維陣列賦給一指標,應這樣賦值:

int a[3][4];

int (*p)[4]; //該語句是定義乙個陣列指標,指向含4個元素的一維陣列。

p=a;        //將該二維陣列的首位址賦給p,也就是a[0]或&a[0][0]

p++;       //該語句執行過後,也就是p=p+1;p跨過行a[0]指向了行a[1]

所以陣列指標也稱指向一維陣列的指標,亦稱行指標。

指標陣列

定義 int *p[n];

優先順序高,先與p結合成為乙個陣列,再由int*說明這是乙個整型指標陣列,它有n個指標型別的陣列元素。這裡執行p+1是錯誤的,這樣賦值也是錯誤的:p=a;因為p是個不可知的表示,只存在p[0]、p[1]、p[2]...p[n-1],而且它們分別是指標變數可以用來存放變數位址。但可以這樣 *p=a; 這裡*p表示指標陣列第乙個元素的值,a的首位址的值。

如要將二維陣列賦給一指標陣列:

int *p[3];

int a[3][4];

for(i=0;i<3;i++)

p[i]=a[i];

這裡int *p[3] 表示乙個一維陣列內存放著三個指標變數,分別是p[0]、p[1]、p[2]

所以要分別賦值。

這樣兩者的區別就豁然開朗了,陣列指標只是乙個指標變數,似乎是c語言裡專門用來指向二維陣列的,它占有記憶體中乙個指標的儲存空間。指標陣列是多個指標變數,以陣列形式存在記憶體當中,占有多個指標的儲存空間。

還需要說明的一點就是,同時用來指向二維陣列時,其引用和用陣列名引用都是一樣的。

比如要表示陣列中i行j列乙個元素:

*(p[i]+j)、*(*(p+i)+j)、(*(p+i))[j]、p[i][j]

優先順序:()>>*

20170106:

接下來繼續看r-tree:自己理解融合

1. b-tree 每個節點的資訊,儲存的是對應的key +value可以攜帶,但是,具體的,要記憶那個圖,多體會。

而在b+ tree裡面,中間部分,儲存的就是,對應的index索引部分。

2. ceil 函式作用:ceil函式的作用是求不小於給定實數的最小整數。

3. 最後b tree定義裡面的葉子節點不含有任何關鍵字等資訊,指的是最後null指標下面所指向的最後節點。

4.看完之後,聯想總結下,自己對於b-tree, b++ tree整體的理解,區別,對比,優勢(b + tree 不帶有任何相關的 real value在中間節點中)

5. tuple identifier在葉子節點中,是n維的矩陣向量相關:

先來**一下葉子結點的結構。葉子結點所儲存的資料形式為:(i, tuple-identifier)。

其中,tuple-identifier表示的是乙個存放於資料庫中的tuple,也就是一條記錄,它是n維的。i是乙個n維空間的矩形,並可以恰好框住這個葉子結點中所有記錄代表的n維空間中的點。i=(i0,i1,…,in-1)。---在這張圖中,

i所代表的就是圖中的矩形,其範圍是

a<=i0

<=b

,c<=i1

<=d

。有兩個

tuple-identifier

,在圖中即表示為那兩個點。--體會其中的變化分析。

6.看完之後,對r-tree b-tree, b+-tree有了全新的理解,這點要注意進行體會。---下面就準備看**,重新梳理結構和yuzheng index建立相關

7。 20170108:看完了guttman對應的r tree文章,有了全新的理解,進一步深化對應的理解運用分析。需要注意幾點:

a.r tree的構造由來,為什麼要構造r tree,理由是什麼,如何從b tree中進行延伸的,注意體會變化分析。

b。基本的元素,tuple child data identifier 這些都要注意,領會。並且,清楚地記憶對應的圖形。

c.在定義完基本的元素之後,就開始定義對應的操作(邏輯非常強烈,注意學習體會,比如insert, delete,choose  leaf, adjust leaf, node split【其中對應有三種演算法,每種方式 都不相同,注意體會其中的變化方式,這點非常的重要。exhaustive, quadratic linear.其中linear 於quadratic 的不同,在於seed select其中的變化,就注意體會了。】)

d. 具體implementation上,有不同的對應方式,有一篇pdf 來自thu的**,後續做具體的implementation可以關注下。

e。思考這篇文章到底在做什麼,到底實現了什麼,有什麼對應的意義,如何進行對應的優化分析,來進一步優化對應的模型,實現performance的提公升,這些都需要思考的。

f。看**注意對應的總結提公升,來進一步的優化求解。

R Tree學習筆記

空間資料物件 spatial data objects 通常是乙個在多維空間中區域,不能僅用座標點位置很好的表示。例如,在地圖應用中,代表乙個國家的空間資料物件,就是乙個在二維空間中的區域。對於空間資料的常用操作就是查詢乙個區域中的所有物件,所以根據空間資料物件所表示的區域範圍,高效的獲取該區域中的...

httpRunner學習之路 問題之路

成長過程中,都會遇到問題,就看如何解決!今天想再次研究該框架。因為前面又碰到了一些問題。而技能有限,又需要再次學習js的各項技能。實在耗不起精力。轉而繼續對自己擅長的python入手。按照教程說,先來嘗試一番。建立工程進行開始第一步吧。用相關命令直接生成對應的專案資料夾。hrun startproj...

C C 學習之路

c c 學習之路 www.firnow.com 有人說c語言已經過時了,學程式設計應該從物件導向語言開始。在這一點上我持保留意見。1 關於c語言的學習 在linux下,大部分的程式還是c語言實現的。win32 api仍然是用c語言實現的。windows平台c 應用廣泛是微軟力推的結果,但是現在win...