回答
我能夠根據我的要求使用均勻分佈創建半非均勻分佈。基本上,我從1到N範圍內生成所需的M個數字,然後再生成(N-M)個數字並將其丟棄。就像這樣,當我生成下一組數字時,對於1到N之間的所有數字,我的概率幾乎相等。它對我有用!
示例代碼在C#:
int low=1, high=50;
Random random = new Random();
int total = 50;
ArrayList set_nos = new ArrayList();
while (--total > 0)
{
int set = 6;
int loop = 0;
while (--set > 0)
{
int temp = random.Next(low, high);
loop++;
if (set_nos.Contains(temp))
continue;
set_nos.Add(temp);
}
for (int unused = 1; unused < high-loop; unused++)
random.Next(low, high);
//Use set_nos for your purpose!
}
你能舉個例子嗎? – Eddie 2011-09-20 15:12:07
編輯答案! – applefreak 2011-09-23 09:34:02
嗯,這是2016年,這個問題沒有點,已經有一個公認的答案。但是,既然它出現在第二次,我搜索了「c#隨機非統一」,我會繼續並給我的方法。
開始之前,你必須考慮你想要什麼樣的非均勻分佈。就我而言,我需要大部分數字都很低,而有些數字應該很高。對於任何分佈,我們只需要考慮0到1之間的數字(因此在該範圍之外的屬性是不相關的)。結果可以相乘或以其他方式處理以適應任何期望的範圍。最後,(x-1)^ 4爲我工作。當x = 0時,它的值爲1,當x = 1時值爲0,但平均更可能低於高。
在C#,Random類的發生器僅產生整數。所以第一步是將其轉換使其而是產生有理數0
和1之間
var rnd = new Random();
var x = (double)rnd.Next(0,10000)/10000;
然後,只需將隨機數到您所需的分佈。
x = Math.Pow(x-1,4);
我創建了這個方法隨機生成的數字列表,並得到了以下的結果(排序並四捨五入):
0
0.0001
0.0109
0.0115
0.042
0.1615
0.3077
0.5713
0.7217
0.8087
正如你所看到的,分佈是不均勻的:它有一個偏向0,但仍然可以取0或1作爲一個值。
由於在搜索SO上的答案時會產生影響,因此我按照問題回答了問題。但在@ applefreak對他自己的問題的評論中,他似乎也可能正在尋找一個真正的非僞隨機數生成器。 @ JonHanna的回答「那不可能完成」是適當的。使用計算機外部的源可以消除對時鐘的依賴,但它仍然不會是真正的隨機。你可能會認爲沒有什麼是真的,但這是一個哲學問題。
- 1. 非均勻隨機發生器
- 2. Omnet ++均勻隨機數生成
- 3. 非均勻分佈的隨機數組
- 4. 產生不均勻的僞隨機數
- 5. 生成500行隨機數,30行,均勻分佈
- 6. 隨機均勻分佈
- 7. 隨機均勻分佈
- 8. 生成均勻隨機變量時下限爲接近零
- 9. 如何生成均勻分佈的隨機DFA?
- 10. 用於生成均勻分佈的隨機位集的方法
- 11. 在給定範圍內生成均勻隨機偏差
- 12. 均勻分佈的隨機數
- 13. 使隨機數均勻在C++
- 14. 非均勻(趨向值偏差)隨機數在JavaScript
- 15. Java使用Possion/Gaussian /指數/幾何/均勻分佈生成隨機數
- 16. 在C++的特定範圍內生成隨機均勻可分的數字?
- 17. 具有非均勻分佈的隨機值
- 18. 隨機均勻選擇像素
- 19. 隨機均勻森林迴歸
- 20. 隨機點不是均勻分佈
- 21. 通過平均5個均勻樣本的正態隨機數?
- 22. 生成非重複的隨機數
- 23. 生成非常大的隨機數java
- 24. PHP隨機字符串生成器...並非如此隨機
- 25. 從非均勻數據創建均勻分佈的示例
- 26. 生成隨機數
- 27. 隨機數生成
- 28. 生成隨機數
- 29. javascript非序列隨機數發生器
- 30. 非重複隨機數發生器?
我發現了一些實現和設計概念http://stackoverflow.com/search?q=non-uniform+random+numbers+generator這是最好的:http://stackoverflow.com/questions/1534285 /非均勻隨機數生成器實現。他們都沒有說任何語言是否已經支持非統一的隨機數發生器。 – applefreak 2011-03-18 13:45:13
C#根本不支持隨機數生成,它是提供它的BCL。要回答你的問題,我們需要知道你希望它是不是統一的方式;鐘形曲線還是別的什麼? – 2011-03-18 14:01:10
謝謝工作。什麼是BCL?我使用了C#隨機數生成器,但它始終是統一的。如果我在1-100之間生成了數百萬的數字,那麼每個數字的單個計數幾乎相同。我希望選擇是完全不一致的,所以可能有些數字根本沒有被採集,有些數字計數器可能遠遠超過其他數字。我的意思是在選擇下一個號碼時不應該有任何優先權或依賴性。 – applefreak 2011-03-18 15:09:34