現在,讓我們假設 n1 是某模式中第一種符號的數量,而 n2 是第二種符號的數量。則隨機生成模式中的預期游程數 μ 為:
μ = 1 + ((2*n1*n2) / (n1 + n2))
而方差 α2 由下式算出:
α2 = ((2*n1*n2) * (2*n1*n2 - n1 - n2)) / ((n1 + n2)2 * (n1 + n2 - 1))
這兩個公式均根據概率論得出。我們可以用平均值和方差來確定某個特定模式是隨機過程結果的概率。假設我們以兩個符號的模式開始,該模式表示為以下字符串:
string s = "XOOOXXXXOXXXXXXXOOOOXXXXXXXXXX";
盡管可以手動計算該模式中 X 和 O 的數量以及游程數,但讓我的程序代勞會更輕松。首先,我將確定該模式字符串中的兩個符號類型:
char kind1 = s[0], kind2 = s[0];
for (int i = 0; i < s.Length && kind1 == kind2; ++i)
{
if (s[i] != kind1) kind2 = s[i];
}
我將模式字符串中的第一個字符指定給第一種符號,接著掃描整個模式字符串,直到找到第二種符號類型。接下來,將執行兩項簡單的錯誤檢查,以確保該模式中至少存在兩種不同字符并且存在的字符類型不超過兩種。
if (kind2 == kind1)
throw new Exception("字符串必須具有兩種不同的類型");
for (int i = 0; i < s.Length; ++i)
if (s[i] != kind1 && s[1] != kind2)
throw new Exception("字符串只能具有兩種類型");
如果要考慮性能,則可將這三次對模式字符串的遍歷重新轉換為僅僅一次遍歷,但清晰性可能會受到一些影響。
現在,我就可以開始計算模式中每種類型符號的數量以及游程數了:
文章來源于領測軟件測試網 http://www.kjueaiud.com/