{CAB} = 4 次
{CBA} = 4 次
換言之,并不是所有排列的產生幾率都相等。請注意,A 在第一個位置出現 9 次,B 在第一個位置出現 10 次,C 在第一個位置出現 8 次。如果在賭博游戲模擬中使用這種不正確的混排算法,則會產生嚴重的問題。
如果使用正確的混合算法,您最終可能得到的結果如圖 4 中所示(注意 r 值從來不小于 i 值)。此時,這三個項目的六種可能的最終排列中每一種排列的產生概率都是相等的,某字母出現在某特定位置的概率也是相等的。同時還要注意,不需要進行第三次遍歷,因為它只會與自己交換數組中的最后一個值。因此,正確算法中的循環可轉到 animals.Length - 1 而不是 animals.Length。

返回頁首
生成正態/高斯數字
我將在本月專欄中演示的第四種方法是從鐘形分布(通常稱為正態或高斯分布)中生成數字。
假設您要生成一些與一組人身高相對應的測試用例輸入數據?赏ㄟ^一種稱為 Box-Muller 算法的非常巧妙的方法來生成正態分布的偽隨機數字。用于創建圖 1 中所示輸出的代碼的開頭如下所示:
Gaussian g = new Gaussian();
double ht;
int outliers = 0;
Console.WriteLine("從平均值為 68.0 英寸、標準偏差為 6.0 英寸的" +
"正態/高斯分布生成 " +
"100 個隨機身高 ->");
我以一個程序定義的高斯對象為例。此對象執行所有工作并使用 Box-Muller 算法?勺兩砀邔⑹芤粋正態分布值的約束。我還會初始化一個計數器以跟蹤非正常值,即那些遠高于或遠低于平均身高的值。跟蹤非正常值使我起碼可以驗證我的隨機身高事實上是正態分布的。圖 5 列出了生成并顯示我的隨機身高的代碼。
我每隔 10 個值就用模數 (%) 運算符打印一個新行,只是為了保持輸出整齊。來自平均值為 68.0 英寸、標準偏差為 6.0 英寸的正態分布隨機身高通過 Gaussian.NextGaussian2 方法的調用返回,我稍后將對此詳細說明。我通過監控小于 56 英寸或大于 80 英寸的值來跟蹤非正常值。這些值是高于或低于平均值 68.0 英寸兩個標準偏差(6.0 * 2 = 12.0 英寸)的值。據統計,隨機生成值超過平均值兩個正(或負)標準偏差的概率大約有 5%。因此,如果生成 100 個隨機身高(就像我現在這樣),則可以預期約有 5 個非正常值。如果得出的非正常值遠多于或遠少于 5 個,則就需要仔細檢查代碼。請注意,在圖 1 所示的運行示例中,我剛好得到 5 個非正常值,這使我更加確信我的隨機生成的身高數據點實際上是正態分布的。
文章來源于領測軟件測試網 http://www.kjueaiud.com/