算法可以跨容器

时间:2017-07-07 01:39:51

标签: algorithm

我有一个12杯的系列,我会收到随机数量的球放在那些杯子里。我可以收到1到12个球(含)。无论我收到多少球,我都希望将它们均匀地放在杯子的线上。每个杯子可能只包含一个球。

“均匀”的概念有待辩论。例如,如果我得到6个球,我可以将它们隔开其他杯子,但是如果我得到7个球,那么第7个球的位置对我来说并不是非常重要,只要它遵循逻辑模式。同样地,当我只有5个球时,球之间的额外空间的位置对我来说也不重要。

那么,是否有人熟悉这种分配算法?我拼凑了一些东西,但它太糟糕了,它永远不会看到光明的一天。

enter image description here

3 个答案:

答案 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;
}

您可以在https://jsfiddle.net/k0r18yba/

中查看此算法