我知道如果我使用Java中的隨機生成器,使用nextInt生成數字,數字將是均勻分佈的。但是如果我使用兩個Random實例,會發生什麼情況,這兩個Random實例都會產生數字。這些號碼是否均勻分佈?隨機均勻分佈
Q
隨機均勻分佈
13
A
回答
7
每個Random
實例生成的數字將是均勻分佈的,所以如果將兩個Random
實例生成的隨機數序列組合在一起,它們也應該是均勻分佈的。
請注意,即使生成的分佈是一致的,您可能也需要注意種子以避免兩個生成器輸出之間的相關性。如果使用默認的無參數構造函數,則種子應該已經不同。從java.util.Random
源代碼:
private static volatile long seedUniquifier = 8682522807148012L;
public Random() { this(++seedUniquifier + System.nanoTime()); }
如果您明確設置種子(通過使用Random(long seed)
構造,或致電setSeed(long seed)
),你需要利用這個照顧自己。一種可能的方法是使用隨機數發生器爲所有其他發生器產生種子。
8
那麼,如果你種兩個Random
實例具有相同的值,你絕對不會得到質量離散均勻分佈。考慮最基本的情況下,它的字面打印的確切相同數量的兩倍(沒有比這隨便得多...):
public class RngTest2 {
public static void main(String[] args) throws Exception {
long currentTime = System.currentTimeMillis();
Random r1 = new Random(currentTime);
Random r2 = new Random(currentTime);
System.out.println(r1.nextInt());
System.out.println(r2.nextInt());
}
}
但是,這只是一個單一的迭代。如果我們開始啓動樣本量,會發生什麼?
以下是運行兩個相同種子的RNG分佈的散點圖並排側產生2000號總:
這裏是運行一個單一的RNG到的分佈產生2000個號碼合計:
似乎哪種方法產生移到該有限集合更高質量的離散均勻分佈很清楚。
現在幾乎所有人都知道,如果您正在尋找高質量的隨機性,播種兩個相同種子的RNG是一個壞主意。但是這種情況確實讓你停下來想:有創建了一個場景,其中每個RNG獨立發出相當高質量的隨機性,但是當它們的輸出結合時,它的質量明顯較低(離散度較低)。
相關問題
- 1. 隨機均勻分佈
- 2. 均勻分佈的隨機數
- 3. 非均勻分佈的隨機數組
- 4. 隨機點不是均勻分佈
- 5. PRNG均勻分佈
- 6. 創建一組均勻分佈的隨機數
- 7. 如何生成均勻分佈的隨機DFA?
- 8. 用於生成均勻分佈的隨機位集的方法
- 9. 僞隨機選擇均勻分佈的數據
- 10. 爲什麼這個隨機變量沒有均勻分佈?
- 11. 具有非均勻分佈的隨機值
- 12. 在Windows批處理中隨機數的均勻分佈
- 13. 長時間均勻分佈的隨機數
- 14. 生成500行隨機數,30行,均勻分佈
- 15. Python中均勻分佈的隨機字符串
- 16. 將非均勻分佈轉化爲均勻分佈
- 17. 均勻分佈圖像庫
- 18. Python適合均勻分佈
- 19. 均勻分佈矩形
- 20. Powerpoint VBA - 均勻分佈列
- 21. 產生不均勻的僞隨機數
- 22. 非均勻隨機數生成器
- 23. 非均勻隨機發生器
- 24. 使隨機數均勻在C++
- 25. 隨機均勻選擇像素
- 26. 隨機均勻森林迴歸
- 27. Omnet ++均勻隨機數生成
- 28. 標準均勻分佈到離散均勻[a,b]
- 29. 從非均勻數據創建均勻分佈的示例
- 30. 每次循環做一個臨時的均勻隨機分佈有多高效?
除`揮發性`不被授予原子。 – 2010-11-23 08:59:15
@ J-16:我相信可以保證使用Java 1.5引入的新Java內存模型(http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#volatile )。無論如何,這不是我的代碼;它是java.util.Random的內部實現。 – Grodriguez 2010-11-23 09:14:50