我在0到64K之间有几百万个整数。我想将它们分成N个桶,其中每个桶包含来自连续范围的大约相同数量的项目。例如,如果我只有一个带有每个可能值的数据点和64个桶,理想情况下我最终会得到一个0-1024的桶,一个用于1025-2048的桶等。
用于计算最均匀分配物品数量的铲斗范围的算法是什么?
答案 0 :(得分:0)
如果您专注于均匀分发,最简单的方法可能是对列表进行排序,然后将第一个(list_length / N)
项放入第一个桶中,然后将下一个(list_length / N)
项放入下一个桶等等。由于您有一个相当大的列表要排序,这可能不是最有效的解决方案。
答案 1 :(得分:0)
在排序列表中对您的数字进行排序并填充包含所需元素数量的存储桶是一种可能性。
使用heap可以做类似但可能更快的事情:用你的元素填充堆,然后你可以非常快地提取最小的list_length/N
元素。
如果速度不是太大的问题,那么排序100万个数字既简单又快速(在Numpy的Python中只有几分之一秒)。