我正在尋找一種有效的算法,該算法針對已知高度,寬度和長度的空間,給定固定半徑R和點N的列表,在該空間中的三維座標將找到網格上任意點的固定半徑R內的所有點。這個查詢將用不同的點完成很多次,所以一個昂貴的預處理/排序步驟,以換取快速查詢可能是值得的。這是一個位應用程序的瓶頸工序的我的工作,所以任何時候我可以切斷它是有用的查找圍繞任意座標的半徑爲r的球體中的所有點
事情到目前爲止,我曾嘗試:
-The天真的算法,迭代所有點和計算距離
- 將空間劃分爲長度爲R的立方體的網格,並將這些點放入這些點。這樣,對於每個點,我只需要查詢直接相鄰的桶。這有一個顯着的加速
- 我試過使用曼哈頓距離作爲啓發式。也就是說,在桶內,在計算到任意點的距離之前,使用曼哈頓距離過濾那些不可能在半徑R範圍內的值(即曼哈頓距離爲< = sqrt(3)* R )。我認爲這會提供一個加速,因爲它只需要加法而不是乘法,但它實際上減慢了程序的一點點
編輯:爲了比較距離,我使用平方距離來消除必須使用sqrt函數。
顯然,我可以加快這個速度有一些限制,但我現在可以嘗試使用任何建議。
不,它可能事項算法的水平,但我在C.
'的sqrt()'是一個昂貴的功能。加快你的速度,你應該只是對另一邊進行比較。 – corn3lius
我已經這樣做了。將編輯問題反映,謝謝。 – gms7777
我發現難以解析的問題陳述。你是否試圖在任意點的R中找到點的子集(在你稱爲N的列表中)?什麼是「元素」 - 來自N的點? –