【问题标题】:Divide Huge Array of Numbers in Buckets在桶中划分巨大的数字数组
【发布时间】:2015-01-21 15:12:11
【问题描述】:

给定一个巨大的数字数组(比如 1 万亿)。你怎么能把它们分成每个有一定范围的网络桶。 案例: 1.假设分布不均匀 2. 假设分布是均匀的。

【问题讨论】:

  • 这是一个实际的编程问题,还是一个思维难题?
  • 是的编程难题。我知道我们可以做类似 K-Means 聚类的事情,但我想知道是否有更有效的方法来创建像 0-9 、 10 - 19 ... 这样的桶。 n - n+10 如果我们不知道数字的分布。

标签: algorithm large-data


【解决方案1】:

如果不统一,并且您想要相等的桶数,只需使用您自己的 lambda 值制作您自己的哈希表。

如果您有 1-1000 的 1000 个数字,并且您想要 10 个桶,只需将 1-100 的哈希码设为 0,将 101-200 设为 1。这真的很容易做到 - 你可以做到(maxNum (in first instance it's 100) -1)/100 (即 1000/numOfBuckets) 在哈希表中查找数组的索引。

如果您想要均匀分布 - 这有点困难。您将不得不首先考虑先前的不均匀分布,然后重新哈希,以便每个桶具有相同的 # 数字。

要重新散列,只需获取 # 个数字(遍历每个存储桶,找到大小并添加),然后除以 # 个存储桶。现在你有了新的 lambda 值。如果您不关心范围不统一(如 1-10、11-20,而不是 1-15、15-20 等),则遍历旧哈希表并添加到新哈希表 w/新的 lambda 值,按顺序填充 - 这是您将获得的最接近的值(有时您会从 lambda 值中获得 -1)。

如果您不太关心原始分布不均匀但范围相等,只需获取您拥有的数字数量,使用快速排序等简单排序进行排序,然后将 (lambda 值)# 个数字放入每个桶中.

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-08
    • 1970-01-01
    相关资源
    最近更新 更多