用于将结果均匀分布在固定数量的桶中的功能

时间:2011-03-03 11:05:04

标签: c++ distribution

我正在为以下问题寻找一个漂亮的解决方案:

我得到X个结构,用唯一的64位整数标识,可以有任何值。我想将它们均匀地分配到预定义数量的桶中,在开始时不知道所有最小/最大id值而不移动任何值。

到目前为止,我能提出的最佳解决方案是查找映射,其中bucket id是key,value是struct id number的列表。

只是想检查某人是否有更好的解决方案(?)

1 个答案:

答案 0 :(得分:1)

您将查询映射从存储桶ID假定为表示单个结构的唯一ID列表,这意味着您无需使用这些唯一ID来查找结构。如果这是真的,那么你的问题似乎就是如何在每个桶中获得适当数量的元素......你可以通过在桶中增加一个桶计数器来实现这一点 - 必要时从最后一个包装到第一个 - 并分配连续的结构进入相关的桶。

尽管如此,我怀疑你可能没有准确地表达你的真实需求,并且可能需要使用这些独特的ID找到结构?如果这是真的,那么一个关键的问题是你是否只需要一个统计上同样可能的任何给定结构与任何给定存储桶相关联的机会(这样每个存储桶的结构数接近并平均#structs /#桶但是会有波动),还是你需要它。在前一种情况下,哈希映射听起来合适。否则,我想不出一个特别好的解决方案。也许值得一提的是,您可以指向值并移动指针以实现一些负载平衡,同时避免移动实际对象。