c++ - 将结果均匀分布在固定数量的桶中的函数

标签 c++ distribution

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

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

到目前为止,我能想到的最佳解决方案是查找映射,其中存储桶 ID 是键,值是结构 ID 编号的列表。

只是想看看是否有人对此问题有更好的解决方案(?)

最佳答案

您假定从存储桶 ID 到代表各个结构的唯一 ID 列表的查找映射意味着您没有兴趣使用这些唯一 ID 查找结构。如果那是真的,那么您的问题似乎是如何在每个桶中获得适当数量的元素......您可以通过在桶中增加桶计数器来做到这一点 - 必要时从最后一个包装到第一个 - 并分配连续的结构放入关联的存储桶中。

不过,我怀疑您可能没有准确表达您的真实需求,并且可能需要使用那些唯一的 ID 来查找结构?如果这是真的,那么一个关键问题是你是否只需要任何给定结构最终与任何给定桶相关联的统计上同样可能的机会(这样每个桶的结构近似和平均#structs/#buckets 但会有波动),或者你需要它准确。在前一种情况下, HashMap 听起来很合适。不然想不出特别好的解决办法。也许值得一提的是,您可以拥有指向值的指针并四处移动指针以实现一些负载平衡,同时避免移动实际对象。

关于c++ - 将结果均匀分布在固定数量的桶中的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5179879/

相关文章:

c++ - C++11 中的模板约束

c++03 : Variadic templates using boost

r - 是否有任何包和函数可以在 R 中生成此图像?

c++ - 如何在类构造函数中使用 C++11 随机引擎和均匀分布?

python - 应用 pandas df 中所有列的分布

c++ - C++11 中成员函数的值类别属性是什么?

C# 编码 ushort/ulong 数组

c++ - 用于检测由于类型提升导致的无限循环的静态分析工具?

c++ - boost::math::erf的算法

r - 在 R 中叠加内核分布