2011-06-07 69 views
3

基本上我有一個用戶當前的位置。然後我有一個座標列表。如何計算從座標列表中給定點的最近座標

我將如何去計算列表中最近一組座標與用戶當前位置的對比。我的應用程序是用Java編寫的HTHE Android平臺

+0

你大概知道有多少合作你將在你的集合中擁有的下屬?這可能會影響蠻力方法是行得通的還是會太慢 – chillysapien 2011-06-07 09:01:03

+0

你好有200個座標來測試當前位置對 – molleman 2011-06-07 09:09:40

+0

對於200座標,不要太擔心。只需測試一切,最有可能比您可以優化的任何東西都更快更簡單。 – LiKao 2011-06-07 10:30:34

回答

0

有一種分而治之算法來尋找在O關閉對點的距離最小距離(nlogn )。雖然它可能對你的數據集的大小是一個過度消耗。更多信息就可以了here

1

如果列表中的點,而均勻分佈在該地區,這應該工作:

將該區域成爲具有一定規模的象限。保留並更新駐留在每個象限中的點列表。給定一個座標x,找到它所屬的象限,只計算同一象限中的點的距離(如果沒有,則從相鄰象限中添加點,直到成功),選擇k個最近點p_i。

檢查圓c(center = x,radius = max(p_i-x))是否跨過任何未檢查的象限,如果有,則計算與這些象限點之間的距離。完全返回最接近的k個點的集合。您可能需要檢查c中包含點的最接近象限,直到找到k個最接近的點p_i,這樣c(x,max(p_i-x))中的所有象限都是空或檢查。 加速從O(n)到O(log n)的最近象限搜索:您需要實現樹形結構:4象限的象限等,它跟蹤每個象限中的點數。當點移動時,更新它(O(log))。無論如何,對於200分這可能是一個矯枉過正的問題。

編輯:而不是「樹形結構」只是使用哈希表和一個簡單的散列函數,如:(X DIV 10^P,Y DIV 10^P)

+0

謝謝...當應用程序擴展時,這非常棒 – molleman 2011-06-08 16:43:35

相關問題