2012-01-27 66 views
0

在一定距離內比較數字,所以我有一個看起來像算法相互

1,708,234 
2,802,532 
11,083,432 
5,098,123 
5,777,111 

我想搞清楚當兩個號碼彼此在一定距離內的數字陣列(比如1,500,000),所以我可以將它們分組到相同的位置,並且只有一個UI元素代表我正在查看的縮放級別。如何巧妙或有效地做這件事。我想我只是從第一個入口開始,循環遍歷所有元素,並且如果一個接近另一個元素,請將這兩個元素標記出來並放入某種字典中。這將是我的蠻力方法,但我認爲必須有更好的方法。

我在obj-c btw編碼,如果這使得或破壞任何設計決策。

+0

你想比較你的表中的直接鄰居還是所有可能的數字對? – 2012-01-27 21:28:02

+0

This _might_ help:http://en.wikipedia.org/wiki/K-means_clustering – 2012-01-27 21:30:00

+0

@Thies Heidecke我想比較所有 – Crystal 2012-01-27 21:31:59

回答

3

我們在這裏處理了多少個數字?如果它足夠小:

  1. 排序號碼(通常正數,n)到每個數字
  2. 運行,n和比較其大國鄰居,N + 1,看它是否是你的範圍內。
  3. 重複n + 2,n + 3,直到數字不在您的範圍內。

你的蠻力法有O((n/2)^ 2)。這種方法將在平均情況下將其帶到O(n + n log(n))或O(n log n)。

+0

有沒有真正的那麼多的數字來排序。從5-30的任何地方。 – Crystal 2012-01-27 21:40:02