不足結語
參考是最重要的。
首先應該看的就是r樹的**
a. guttman. r-trees: a dynamic index structure for spatial searching. in sigmod conference, 1984.
**中介紹的節點組織結構、不同的**演算法、效率分析,是很多部落格上被省略了的。
rtree研究學習~
都是可以參考的。但僅僅是參考叭,不建議看。
為什麼不建議?內容錯倒是沒有錯,但是沒有思想、沒有靈魂。看**就有種順其自然的感覺,等你實現完之後看**,就會恍然大悟,理解得透徹
最後看到了乙個比較詳細的。不過在r樹部分,沒有介紹節點**方法
從b樹、b+樹、b*樹談到r 樹
**上傳到了github上
rtreeindex.cpp
首先最重要的就是結構。如何去定義類,怎麼去組織類與類之間的關係。
這次寫了這麼長時間,組織類的關係是花的時間最長的。
**中把葉子節點和非葉子節點分為了兩類進行討論。
葉子節點指向儲存實體,非葉子節點指向節點。
所以實現的時候,分為leafnode與branchnode。
其次,什麼方法應該在父類中實現,什麼方法應該作為抽象方法在子類中實現。
思考這些問題,感覺還是很能鍛鍊對類的理解的。
再乙個需要注意的問題就是什麼時候用指標、什麼時候用引用。
當然可以啥都不用,讓物件一直拷貝、複製。不過效率不高,也不符合設計原則
如何在組織的類結構中,獲取mbr。因為葉節點和分支節點的指向的型別不同,所以對其進行組織的時候,也是花了些腦筋。
總的來說,新增節點分三種情況
葉節點有位置,成功新增。adjusttree不帶參方法
葉節點位置不夠,發生**。**後的新節點新增到父節點中(父節點位置夠)。adjusttree帶參方法,不**parent
父節點位置不夠,父節點發生**。adjusttree帶參方法,**parent,遞迴呼叫adjusttree帶參方法處理父節點**
所以要注意的是adjusttree方法,涉及的是**節點和父節點之間的關係。呼叫者是被**節點
其實**是不涉及遞迴的,就只是單純地把乙個節點變成兩個節點,並調整與子節點之間的引用關係。單獨來看很簡單
注意的是,**的新節點唯一缺少的是,它的父節點對它的引用。
所以adjusttree處理的問題是,讓**產生新節點的父節點,具有對它(新節點)的引用
而讓**節點的父節點持有對新節點的引用時,可能發生**。這就是adjusttree裡面主要處理的問題
首先沒有使用模版類。在設計的時候也考慮到了,不過因為時間問題,沒有換成模版類。命名的時候考慮到了這個問題,所以leafnode中指向實體的命名是values而不是features。
其次,如果使用模板類,需要給儲存物件提供最小外接矩形介面。實現了這個介面的物件能夠通過相應方法獲取對應mbr。模版中的型別也應該是這個介面的子類。
最後,還是結構的問題。
對於分支節點和葉結點來說,他們指向的實體是有共性的:都具有最小外接矩形,都是使用的qvector進行儲存。
因此是可以進一步抽離出父類的。抽離之後,可以減少分支節點和葉結點中一些重複的**。
不過問題是,這樣抽離,從某種程度上來說也增加了複雜度,是不是有些過度了呢?
就是這樣一些的問題一直伴隨著整個實現過程,導致寫一下就要思考一下,就很慢。
想了想,其實實現起來只遇到了乙個問題。就是**節點的時候,**得到的新節點,在branchnode中直接複製了leafnode的**,導致子節點的父指標沒改,新的**節點的指標也複製掉了。導致出了一些問題。其他的都是一遍過。最後跑起來的時候,只有這個地方有問題。
剩下的時間都是花在類的組織上了。
只要弄清楚了上面幾個問題,跟著**、或者中文博文,實現起來是沒什麼太大問題的。
如果不考慮類結構什麼的話,直接乙個類,全放一起,當然也是可以實現的,應該要實現得更快。不過結構可能就不夠清晰了。
分類演算法 決策樹演算法及其R實現
以鳶尾花為例子來說明 觀察上圖,判決鳶尾花的思考過程可以這麼來描述 花瓣的長度小於2.4cm的是setosa 圖中綠色的分類 長度大於2.4cm的呢?可以通過寬度來判別,寬度小於1.8cm的是versicolor 圖中紅色的分類 其餘的就是virginica 圖中黑色的分類 用圖形來形象的展示上述思...
演算法 R樹的研究及實現(1)
從b樹 b 樹 b 樹談到r 樹 r樹的理論比較容易看明白,但是博主並沒有給出幾個核心演算法實現,譬如 節點 節點 包含兩個情況的 葉子節點關鍵字大於m,需要將座標點按照幾何 非葉子節點子樹數量大於m,需要將子樹代表的矩形按照幾何進行 這兩個演算法是核心演算法,我搜尋了部分資料,並且貼出來 請注意 ...
R分類演算法 決策樹演算法
它通過對訓練樣本的學習,並建立分類規則,然後依據分類規則,對新樣本資料進行分類 屬於有監督學習。優點 決策樹有易於理解和實現 決策樹可處理數值型和非數值型資料 基於條件的決策樹在party包裡 install.packages party ctree formula,data predic資料 pr...