Java 为一系列浮动生成桶

Java 为一系列浮动生成桶,java,Java,我有一系列权重(表示为浮动) 比如说 2.0197875 2.0197875 2.0197875 2.0197875 2.031247 2.0448067 2.0473573 2.0520945 2.0520945 2.0595925 2.0595925 2.076654 3.0265803 3.035842 3.0536165 3.1563497 3.1563497 3.1563497 3.433653 4.0345426 4.0947146 4.977886 4.9907994 5.0965

我有一系列权重(表示为浮动)

比如说

2.0197875
2.0197875
2.0197875
2.0197875
2.031247
2.0448067
2.0473573
2.0520945
2.0520945
2.0595925
2.0595925
2.076654
3.0265803
3.035842
3.0536165
3.1563497
3.1563497
3.1563497
3.433653
4.0345426
4.0947146
4.977886
4.9907994
5.0965066
8.852995
12.324477
每个浮动都有一个与之相关的术语

我需要一个算法来尽可能均匀地将术语(根据其权重)分配到N个桶中(可配置)。如果有10个术语和5个桶,那么理想情况下每个桶中有2个术语。如果有重量相同的术语,则应将它们放在同一个桶中

我正在努力找出一个算法来实现这一点。我做了一些研究,试图找到可行的算法,但我不知道用来描述这一点的数学术语

有人能帮忙吗


谢谢

您有
n
项要“平均”分配到
k
存储桶中

根据您的需要,有两种非常简单的方法可以起作用

最简单的方法是取范围,除以
k
,并为每个
n/k
值设置一个桶。在您的示例中,您的范围是
(12.324477-2.0197875)=10.3046895
。假设你有5个桶。然后,每个铲斗的大小为
2.0609379
。因此,您的第一个存储桶包含范围
2.0197875>=x<4.0807254
的项目。下一个桶是
4.0807254>=x<6.1416633
,等等

这种方法的缺点是,您的一些存储桶将有很多项,而一些存储桶将没有。但是桶的间距是均匀的。很容易确定项目进入哪个存储桶,也很容易确定任何存储桶中是否存在给定值

另一种方法是将您的物品放入第一个桶中,然后将第一个
n/k
放入第一个桶中,将下一个
n/k
放入第二个桶中,以此类推。示例列表中有26个物品。有了5个桶,你最终得到了4个桶,每个桶有5个项目,一个桶有6个项目

这会将大致相同数量的项目放入每个桶中,但最终可能会将相同的项目放入两个不同的桶中。给定示例数据,值
2.0595925
将在两个不同的存储桶中结束。您可以通过确保重复的项目总是放在同一个存储桶中,并相应地调整稍后(或可能更早)存储桶的内容来解决这个问题。这种方法的最大缺点是更难确定列表中是否存在项。您必须进行搜索以确定它可能位于哪个存储桶中


你选哪个完全取决于你自己。您想要“均匀分布”的存储桶,还是想要包含大致相同数量项目的存储桶?还是你完全想要别的东西?你必须定义“尽可能均匀”的含义。

你能举个例子吗?有了明确的输入和预期的输出?分享你的研究有助于每个人。告诉我们您尝试了什么,以及为什么它不能满足您的需求。这表明你花了时间来帮助自己,它使我们避免重复显而易见的答案,最重要的是,它帮助你得到一个更具体和相关的答案!另请参见:您的意思是重量的均匀分布,即总重量应大致相等,还是术语的均匀分布,即每个桶的术语总数应大致相等?抱歉。我追求的是数量均匀分布的条款,具有相同权重的条款理想情况下应该放在同一个桶中。我做了一些基础研究,但不知道如何用正确的语言解释我想要的。太好了,谢谢。抱歉,“等间距”没有很好的定义。理想情况下,我希望桶中的物品数量大致相同。