K D Tree 學習筆記

2022-02-01 23:54:18 字數 771 閱讀 7537

又是乙個不需要證明的東西,複雜度基本玄學。

具體來說 k-d tree 是解決高維問題的乙個資料結構(其實一般是二維)。

k-d tree 本質上是一棵二叉搜尋樹,其的基本思想就是遍歷整個狀態空間加剪枝。

設問題維度是k,其單次查詢的複雜度大概是 \(o(n^})\)。

我們一般採用每次隨機找乙個維度,以這個維度排序,且以這個維度的中位數為根的方法。

這種方法基本上不會被卡。

一般來說我們維度的選擇就是從 1-k 反覆迴圈進行的。

這個就具體問題具體分析了,說幾個經典問題吧。

找距離乙個座標最遠的點。

這個比較簡單,維護每顆子樹裡每一維最大和最小的值,然後一一配對取最大值就可以了。

這個就比較妙了。

我們依舊維護每顆子樹裡每一維最大和最小的值;

然後對於每一維我們找到理想狀態下距離最近的點,加入答案中。

其實本質上是 a*。

算了,給個**實現吧。

int getmin(int rt, int x, int y, int res = 0) 

return res;

}

一般來說 k 不會很大。

這個我們可以開個小根堆,初始時堆裡有 k 個元素。

查詢時每次替換最小的那個就可以了。

主要利用的是替罪羊的思想。

插入的話我們直接向平衡樹那樣插入就可以了。

維護平衡因子,適時推翻重建以維護平衡。

(暫時沒有寫過)

KD tree學習筆記

如上圖 a 我們先對待識別的物體的影象進行sift特徵點的檢測和特徵點的描述,然後得到了sift特徵點集合。接下來生成物體目標描述要做的就是對特徵點集合進行資料組織,形成一種特殊的表示,其作用是為了加速特徵點匹配的過程。所謂的特徵點匹配本質上是乙個通過距離函式 例如歐式距離 在高維向量之間進行相似性...

學習筆記 kd tree

kd tree用來維護n維空間中的點的一種資料結構。支援插入 刪除 查詢k臨近 包括最遠點對和最近點對 kd tree本質是一顆二叉樹。每一層選擇乙個維度,找到當前維度的中點 讓樹盡量平衡 經過這個點,在當前維度切割,分成左右兩個子樹。通常維度的選擇是順次迴圈的,較易實現。更優的方法是找到方差最大的...

KD Tree學習筆記

kdtree是一種用於分割k維資料空間的資料結構,主要應用於多維空間關鍵資料的搜尋。例如 範圍搜尋和最近鄰搜尋 kdtree的每個節點表示k維空間的乙個點 每次空間劃分按照輪轉法劃分,即如果這次選擇了在第i維上劃分,則下一次就在 i 1 k上劃分 int id,n,k,c struct p p ma...