我有一个12杯的系列,我会收到随机数量的球放在那些杯子里。我可以收到1到12个球(含)。无论我收到多少球,我都希望将它们均匀地放在杯子的线上。每个杯子可能只包含一个球。
“均匀”的概念有待辩论。例如,如果我得到6个球,我可以将它们隔开其他杯子,但是如果我得到7个球,那么第7个球的位置对我来说并不是非常重要,只要它遵循逻辑模式。同样地,当我只有5个球时,球之间的额外空间的位置对我来说也不重要。
那么,是否有人熟悉这种分配算法?我拼凑了一些东西,但它太糟糕了,它永远不会看到光明的一天。
答案 0 :(得分:1)
通常情况下,如果你得到 N 球,你可以将第i个球(从零开始计算)放在桶层((i + 0.5)* 12中/ N)(也从零开始计算),或类似的东西
答案 1 :(得分:1)
正如马特已经说过的那样,一个非常简单的解决方案是,如果球是B,则将最接近的整数加到B再加上12倍除以运行中的球数。
更自作聪明方式,你甚至不必知道总共有多少个球,是:拿球;找到最长的洞:将球放在中的随机位置中。重复一遍,直到你的球用完为止。随机地,随着时间的推移,它们将是均匀分布的,呃,随机的"看着。如果你有很多插槽和很多球,你就是这样做的。有趣的是,您可以将其抽象为多个维度。
答案 2 :(得分:0)
抱歉,我不能用英语告诉你。但我可以帮助代码和数学。
. - directory where you are
.. - directory one level up
..\..\..\inc\Java\com.abbyy.FREngine.jar - jar file that is few levels up
F(x,b)是:这是蓝框或白框功能。 x是盒子; b是球。
F(x,b) -> {0,1}
x € [0,11] , b € [1,12]
**第二种方式*
int F(x,b){
if ( (int)(x % 12/b) == 0 ) return 1;
else return 0;
}
中查看此算法