如何将一个较大的正整数 n 平均随机分成 m 份。
后置条件:所有 m 份数之和应等于 n。
以下是我的尝试(类似于java的伪代码),但我不认为它会给我平均随机分布。 首先,我通过将n/m进行除法来找到平均部分 avg。然后,我生成大小约为 avg 的 m-1 个随机数(交替生成介于 0 和 avg 之间和 *avg 和 2*avg* 之间的随机数)。 然后,我从原始数字 n 中减去这些 m-1 数字的总和,并将其设置为第 m 个部分。
假设函数 rand(x, y) 返回在x和y之间均匀随机的随机数。
以下是我的尝试(类似于java的伪代码),但我不认为它会给我平均随机分布。 首先,我通过将n/m进行除法来找到平均部分 avg。然后,我生成大小约为 avg 的 m-1 个随机数(交替生成介于 0 和 avg 之间和 *avg 和 2*avg* 之间的随机数)。 然后,我从原始数字 n 中减去这些 m-1 数字的总和,并将其设置为第 m 个部分。
假设函数 rand(x, y) 返回在x和y之间均匀随机的随机数。
int[] divideUniformlyRandomly(int n, int m)
{
int[] res = new int[m];
int avg = n / m;
int sum = 0;
bool alternator = false;
for(int i = 0; i < m - 1; i++)
{
if(alternator == false)
{
res[i] = rand(0, avg);
alternator = true;
}
else
{
res[i] = rand(avg, 2*avg);
alternator = false;
}
sum += res[i];
}
res[m-1] = n - sum;
return res;
}