2010-03-26 53 views
0

嘗試使用KD樹創建KNN搜索。我可以組建KD樹(或者至少我相信我可以!)。我的問題是,我正在尋找最近的2個鄰居到點列表中的每個點。是否可以找到KIN樹中的* IN *節點的KNN?

那麼,有沒有一種方法可以找到使用KD樹的點的K個最近鄰點,即使這個點實際上是在樹中,還是我需要爲每個點構造一個單獨的KD樹,而忽略了我希望搜索的點?

我的實現語言是C++,但我更期待算法或一般幫助,謝謝!

感謝, 斯蒂芬

+0

作爲一個起點,http://en.wikipedia.org/wiki/Kd-tree#Nearest_neighbor_search描述瞭如何執行KNN算法。它看起來基本上是重複NN阿爾格,而跟蹤以前的命中。我知道這是非常普遍的幫助,但我希望它能指出你的方向。 – 2010-03-26 17:02:37

回答

3

如果你想ķ確切您的樹中近鄰,只是查詢樹K + 1鄰居(顯然因爲第一近鄰將是你的查詢)。

+0

+1和附註:如果搜索點位於樹中,搜索無關緊要。所以這種方法可以正常工作,你只需要從結果中篩選出搜索點,這應該很容易(因爲它是最接近的)。 – PeterK 2010-06-24 08:37:45

1

這是不是真的太多的答案,但我不適合我要粘貼到什麼評論。總之,這裏的維基百科中的有關內容:

該算法可以在 幾個簡單的修改方式進行擴展。 它可以提供k-最近鄰居 通過保持k目前 bests而不是一個。分支 僅當它們不能 具有比當前最好的任何一個更接近的點時才被消除。

它也可以轉換爲 近似算法運行得更快。 例如,近似最近 鄰近搜索可以通過 可以實現簡單地設置在 點數的上限在樹中檢查, 或通過中斷基於實時時鐘(其 可以更搜索過程 適用於硬件 實現)。對於那些樹 已經點近鄰 可以通過不 更新爲 給零距離爲結果節點的細化來實現,這 具有不唯一丟棄點 的缺點,但 合作 - 位於原始搜索 點。

近似最近的鄰居是有用 實時應用,如 機器人由於沒有搜索 的最佳點獲得詳盡的顯著速度 增加。其中一個是 ,其實現是Best Bin First。

0

我建議考慮看看ANN的實施細則http://www.cs.umd.edu/~mount/ANN/

它被設計爲近似最近鄰搜索,但還可以做精確的近鄰查詢。這也是我找到的最清晰,最好的代碼,即使你想自己實現,也應該給你一些洞見。

相關問題