演算法5 6 Kd樹

2021-12-29 22:20:27 字數 1268 閱讀 4065

給定一系列的點,和乙個矩形。求矩形中包含的點的數量。

這個問題可以通過建立矩陣來進行求解。首先將乙個空間分割成矩陣,將點放置在對應的格仔中,再計算矩形覆蓋的格仔,再判斷格仔中的點是否包含在矩形中

這種方法的問題是,可能這些點全都集中在乙個格仔中。這種情況下演算法的效率比較低。

這種問題在地圖的應用中非常常見。

因此需要引入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庫當中,最常用的輪子之一,處理點雲速度非常快。另外,...