給定一系列的點,和乙個矩形。求矩形中包含的點的數量。
這個問題可以通過建立矩陣來進行求解。首先將乙個空間分割成矩陣,將點放置在對應的格仔中,再計算矩形覆蓋的格仔,再判斷格仔中的點是否包含在矩形中
這種方法的問題是,可能這些點全都集中在乙個格仔中。這種情況下演算法的效率比較低。
這種問題在地圖的應用中非常常見。
因此需要引入2d樹的概念,使得矩陣的分解會根據點的密度自動適應。
下圖展示了2d樹的樣子。
每次加入乙個點時,將平面分成兩半。
加入第二個點時,由於第二個點在第乙個點的右側,因此在第乙個點的右子節點建立乙個新的節點。由於父節點是豎直的,所以子節點需要水平分割。
增加更多的點之後,就會形成如下的二叉樹。
搜尋矩形中包含的點。
搜尋的時候需要從根節點開始。從根節點知道,矩形在節點的左側,因此只需要搜尋左側即可。到了點3,由於矩形覆蓋了兩邊的區域,因此需要搜尋兩邊。一直迭代迴圈,直到節點搜尋完畢為止。
這種演算法的平均複雜度是logn,最壞複雜度是sqrtn。
給定一系列點,和乙個待測點。求與待測點最近的點。
用2d樹的資料結構時,有時可以將搜尋範圍縮小到一半。
kd樹就是2d樹的推廣形式,處理二維以上的資料時非常高效。
n體模擬演算法
關鍵思想就是對於單個質點來說,將距離較遠的那些點看成乙個質點。
具體實現可以參考**
KD樹演算法
學習了kd樹演算法,用來進行最近鄰匹配,其偽 如下 kd樹演算法的偽 節點結構 node 建立kd樹 輸入 點集list 輸出 kd樹根節點 def build tree list if list is none return none 計算所有點在每一維的方差並排序,從方差最大的維度vi維開始建樹...
KNN演算法和KD樹
knn k nearestneighbor 鄰近演算法,或者說k最近鄰分類演算法 是資料探勘分類技術中最簡單的方法之一。所謂k最近鄰,就是k個最近的鄰居的意思,說的是每個樣本都可以用它最接近的k個鄰居來代表。knn演算法的核心思想是如果乙個樣本在特徵空間中的k個最相鄰的樣本中的大多數屬於某乙個類別,...
KNN演算法的KD樹C 實現
kd樹本質上是一種二叉樹,它擁有具備特定排列順序的 節點以便查詢資料,即在二叉排序樹之中,某個 節點左子樹的值均小於 節點的值,而右側均大於 節點的值,如果用中序遍歷這棵樹,它的列印順序將是從小到大遞增的順序。當然剩下的科普就不說了,這也是在pcl庫當中,最常用的輪子之一,處理點雲速度非常快。另外,...