Tag: 非均匀分布

生成具有非均匀分布的随机整数数组

我想编写Java代码来生成范围[1,4]中的随机整数数组。 数组的长度为N,在运行时提供。 问题是范围[1,4]不是均匀分布的: 这意味着如果我创建N = 100的数组,数字’1’将在数组中平均出现40次,数字’2’出现10次,依此类推。 现在我使用此代码生成范围[1,4]中的均匀分布的随机数: public static void main(String[] args) { int N; System.out.println(); System.out.print(“Enter an integer number: “); N = input.nextInt(); int[] a = new int[N]; Random generator = new Random(); for(int i = 0; i < a.length; i++) { a[i] = generator.nextInt(4)+1; } } 如何使用非均匀分布实现它,如上图所示?

有效的Java项目47:了解并使用您的库 – 有缺陷的随机整数方法示例

在Josh给出的有缺陷的随机方法的例子中,该方法产生具有给定上界n的正随机数,我不明白他陈述的两个缺陷。 书中的方法是: private static final Random rnd = new Random(); //Common but deeply flawed static int random(int n) { return Math.abs(rnd.nextInt()) % n; } 他说,如果n是2的小幂,则生成的随机数序列将在短时间后重复出现。 为什么会这样? Random.nextInt()的文档说明Returns the next pseudorandom, uniformly distributed int value from this random number generator’s sequence. 所以不应该是,如果n是一个小整数,那么序列将重复,为什么这只适用于2的幂? 接下来他说如果n不是2的幂,一些数字平均会比其他数字更频繁地返回。 如果Random.nextInt()生成均匀分布的随机整数,为什么会发生这种情况呢? (他提供了一个代码片段,清楚地certificate了这一点,但我不明白为什么会出现这种情况,以及这与n是2的权力有什么关系)。