我有一个包含
我想要插入
N
个对象的列表。我想要插入
X
个虚拟对象,这些对象随机放置在实际N
个对象之间,间隔在(0,N)之间。
因此,我尝试了以下代码。
int[] dummyIndexes = new int[X];
int randomStep = N/X * 2; // *2 because the Mean is N/X/2
Random random = new Random();
int randIdx = 0;
for (int i=0; i < X; i++)
{
randIdx += random.nextInt(randomStep);
dummyIndexes[i] = randIdx;
}
这个方法可以正常工作,但是我没有得到一个好的分布,一直到域N
的结尾。
有更好的方法吗?
randomStep
不等于N
,那么生成的随机数将无法均匀分布到N
。 - Hot Licksrandom.nextInt(randomStep)+1
,否则如果结果是零,你将得到两个或更多的虚拟索引实际上是相同的。 - YoniN
的输出,那么你需要在nextInt
中指定N+1
。 - Hot Licks