【问题标题】:Picking ranges for splitting up a dataset选择用于拆分数据集的范围
【发布时间】:2010-09-08 00:02:38
【问题描述】:

我有几百万个介于 0 和 64K 之间的整数。我想将它们分成 N 个桶,其中每个桶包含来自连续范围的大约相同数量的项目。因此,例如,如果我只有一个包含每个可能值的数据点和 64 个存储桶,理想情况下,我最终会得到一个 0-1024 的存储桶,一个 1025-2048 的存储桶,等等。

计算最均匀分布项目数的桶范围的算法是什么?

【问题讨论】:

  • 您要求桶是不相交的吗?例如。您是否不允许 1024 的一个实例位于第一个存储桶中,而另一个 1024 的实例位于第二个存储桶中?
  • 是的,桶必须是不相交的。

标签: algorithm partitioning


【解决方案1】:

如果您专注于均匀分布,最简单的方法可能是对列表进行排序,然后将第一个 (list_length / N) 项目放入第一个桶,然后将下一个 (list_length / N) 项目放入下一个桶,等等. 由于您有一个相当大的列表要排序,这可能不是最有效的解决方案。

【讨论】:

    【解决方案2】:

    在您浏览排序列表时,对您的数字进行排序并填充包含所需数量元素的存储桶是一种可能性。

    您可以使用heap 执行类似但可能更快的操作:您可以用元素填充堆,然后可以非常快速地提取最小的list_length/N 元素。

    但是,如果速度不是太大的问题,那么对 100 万个数字进行排序既简单又快速(在 Python 中使用 Numpy 只需几分之一秒)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-21
      • 1970-01-01
      • 1970-01-01
      • 2019-08-22
      • 1970-01-01
      • 2017-06-05
      • 1970-01-01
      • 2019-03-30
      相关资源
      最近更新 更多