回答
我能夠根據我的要求使用均勻分佈創建半非均勻分佈。基本上,我從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. 非均勻分佈的隨機數組
- 6. 產生不均勻的僞隨機數
- 7. 生成500行隨機數,30行,均勻分佈
- 8. 從均勻分佈生成隨機數的最快方法python
- 9. 生成均勻分佈的僞隨機數在C++
- 10. 在CUDA設備上生成均勻的雙隨機數
- 11. 製作CURAND從均勻分佈生成不同的隨機數
- 12. <random>隨機數發生器和均勻分佈
- 13. 隨機均勻分佈
- 14. 隨機均勻分佈
- 15. 生成均勻分佈的隨機排列的算法
- 16. 用於生成均勻分佈的隨機位集的方法
- 17. 生成一個邊緣均勻分佈的隨機圖
- 18. 如何生成均勻分佈的隨機DFA?
- 19. 在矩形內(均勻地)生成隨機點?
- 20. 生成均勻隨機變量時下限爲接近零
- 21. 在給定範圍內生成均勻隨機偏差
- 22. 生成的環(環)內的均勻隨機點
- 23. 隨機數,具有不均勻分佈
- 24. 使隨機數均勻在C++
- 25. 均勻分佈的隨機數
- 26. 非均勻(趨向值偏差)隨機數在JavaScript
- 27. Java使用Possion/Gaussian /指數/幾何/均勻分佈生成隨機數
- 28. 在分佈式環境中生成均勻分佈的隨機數
- 29. 在C++的特定範圍內生成隨機均勻可分的數字?
- 30. 隨機數生成器幫助不生成隨機數 - C
我發現了一些實現和設計概念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