[英]Closest neighbor to any point (other than itself) in a 2D plane
給定一個 2D 平面和 N 個點 (n1=(x1,y1), n2=(x2,y2)..., nN=(xN,yN)),什么是快速(O(n) 或更好)算法將找到任何點的最近鄰居(例如,n1 最近鄰居是 n3,n2 最近鄰居是 n4)。 我正在考慮將它存儲在字典中,其中鍵是點,值是鄰居。
SO上好像有很多類似的問題,但我在Python中找不到任何代碼或不是其他語言的答案。
對於給定的點 P,簡單的解決方案:
第二種解決方案在空間復雜度 (O(n^2)) 和隨時間推移的維護方面會花費更多,但會縮短尋找 K 個最近鄰居的時間:
您選擇的解決方案應針對您要優化的內容
平均而言可以產生比 O(n) 更好結果的簡單解決方案是使用k-d 樹來存儲點。 構建樹的最壞情況復雜度為 O(nlogn)。 之后搜索平均為O(logn) ,最壞情況為 O(n)(通常針對遠離所有其他數據的點)。
此外,您可能對 LSH 或局部敏感哈希感興趣,雖然它是一種近似方法,這意味着您不會總是得到正確的答案,對於高維數據,它提供了重要的加速,其復雜性與所選參數密切相關。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.