利用kd樹實現最近鄰搜尋

2021-08-20 14:08:55 字數 479 閱讀 6871

輸入:已經構造的kd樹,目標點x;

輸出:x的最近鄰

1在kd樹中找出包含目標點x的葉節點:從根結點出發,遞迴地向下訪問kd樹。若目標點x當前維的座標小於切分點的座標,則移動到左葉子結點,否則移動到右葉子結點。直到子節點為葉節點為止。

2以此葉節點為「當前最近點」

3遞迴地向上回退,在每個結點進行以下操作:

a.如果該結點儲存的例項點比當前最近點距離目標點更近,則以該例項點為「當前最近點」

b.當前最近點一定存在於該結點乙個子結點對應的區域。檢查該子結點的父結點的另一子結點對應的區域是否有更近的點。具體來說,檢查另一子結點對應的區域是否與以目標點為球心,以目標點與「當前最近點」間的距離為半徑的超球體相交。

如果相交,可能在另一子結點對應的區域內存在距離目標點更近的點,移動到另乙個子結點。接著,遞迴地進行最近鄰搜尋;

如果不相交,向上回退。

4當回退到根結點使,搜尋結束,最後的「當前最近點」即為x的最近鄰點。

最近鄰查詢最優演算法 k d樹的最近鄰搜尋演算法

在k d tree樹中進行資料的k近鄰搜尋是特徵匹配的重要環節,其目的是檢索在k d tree中與待查詢點距離最近的k個資料點。最近鄰搜尋是k近鄰的特例,也就是1近鄰。將1近鄰改擴充套件到k近鄰非常容易。下面介紹最簡單的k d tree最近鄰搜尋演算法。基本的思路很簡單 首先通過二叉樹搜尋 比較待查...

統計學習方法 KD樹最近鄰搜尋

李航老師書上的的演算法說明沒怎麼看懂,看了網上的部落格,悟出一套迴圈 建立好kd樹以後的最近鄰搜尋 我想應該是這樣的 例子是李航 統計學習演算法 第三章56頁 例3.3 步驟結點查詢標記 棧內元素 本次迴圈結束後 最近點最近距離說明a bcde fg初始化000 0000 0abd m 空mdis ...

最近鄰搜尋和近似最近鄰搜尋(NN和ANN)和庫

這樣查詢返回的前k個向量並不一定是最相似的k個向量,衡量ann演算法好不好的乙個依據是召回,每次ann請求返回的k個結果與使用暴力查詢的k個結果去比較,如果完全一致,說明是最好的。因為省了搜尋時間卻沒有影響效果。目前的ann演算法有基於圖 hnswlib 的,基於樹 pysparnn 的,基於雜湊 ...