分组双对数组的最快方法是什么

时间:2014-05-20 19:44:44

标签: algorithm

输入是200 K双打对,即密钥对。它们没有范围,即键可以是任何数字。

现在,任务是将这些大数据分组到以下内容中:

key1 => (value1, value2, value3)
key2 => (value1, value2, value3)
...
...

在比较键(双精度)的相等性时,可以考虑EPSILON(例如1e-8)。

我开发了一种O(n ^ 2)解决方案,但它对于200K双倍来说太慢了。想知道有什么改进吗?比如O(nlogn)会很好。

另一个例子,

Input:  <0.1, 0.3>,  <0.1, 0.4>,  <0.2, 0.5>, <0.2, 0.6>, <0.3, 0.7>
Output

0.1 => (0.3, 0.4)
0.2 => (0.5, 0.6)
0.3 => (0.7)

2 个答案:

答案 0 :(得分:1)

为什么不排序?根据第一个值排序,你(差不多)完成了。这是O(nlogn)。

答案 1 :(得分:1)

为了避免出现分组键的问题,取决于其他分组键 - 处理键的问题,如

  

(1.0,1.0 + EPSILON,1.0 + 2xEPSILON,1.0 + 3xEPSILON)

等关键字一致
  

(1.0,1.0 + 2xEPSILON,1.0 + 4xEPSILON,......)

最合乎逻辑的选择似乎是使用HashSet并通过将密钥的实际double值量化为大小的EPSILON来创建哈希密钥。

根据您对EPSILON的要求,您可以采用以下讨论将您的预期输入范围量化为长的:

Convert/Quantize Float Range to Integer Range

相关问题