在桶中划分大量数字

时间:2014-11-23 23:44:03

标签: algorithm large-data

给出一个庞大的数字数组(比如1万亿)。你怎么能把它们分成N桶,每个桶都有一定的范围。 案例: 1.假设分布是非均匀的 2.假设分布是统一的。

1 个答案:

答案 0 :(得分:1)

如果非统一,并且你想要相同数量的桶,只需使用自己的lambda值创建自己的哈希表。

如果您有1-1000的1000个数字,并且您想要10个桶,只需将1-100的哈希码设置为0,将101-200设置为1.这很容易做到 - 您可以这样做(maxNum(首先是100)-1)/ 100(1000 / numOfBuckets)来查找哈希表中数组的索引。

如果你想分配均匀 - 这有点困难。您将不得不首先接受之前的不均匀分布,然后重新散列,以便每个桶具有相同的数字#。

要重新进行更新,只需使用#个数字(遍历每个存储桶,查找大小,然后添加),然后除以#桶数。现在你有了新的lambda值。如果你不关心范围不统一(如1-10,11-20,而不是1-15,15-20等),那么迭代你的旧哈希表并添加到一个新的哈希表w /新的lambda值,按顺序填充 - 这是你得到的最接近的(有时你会从lambda值得到-1)。

如果您不太关心原始的不均匀分布但是范围相等,只需要记下您拥有的数字,使用一些简单的排序(如quicksort)进行排序,然后在每个桶中放入(lambda值)数字#

不确定这是不是你的意思,但希望这有帮助。