int n1 = 0, n2 = 0, runs = 1;
for (int i = 0; i < s.Length-1; ++i)
{
if (s[i] == kind1) ++n1;
else if (s[i] == kind2) ++n2;
if (s[i+1] != s[i]) ++runs;
}
if (s[s.Length-1] == kind1) ++n1;
else if (s[s.Length-1] == kind2) ++n2;
我從第一個字符開始掃描該模式,一直持續到倒數第二個字符。如果當前字符與我先前確定的符號類型匹配,則我將遞增相應的計數器。為計算模式中的游程數,我利用了游程取決于符號類型的變化的這樣一個事實。如果當前字符與下一個字符不同,則我就知道又出現一個游程,然后我將相應遞增游程計數器。由于我在模式字符串中的倒數第二個字符處停止,因此最后我要檢查最后一個字符。我還會從 1(而不是 0)開始累計游程計數器,因為根據定義,所有模式都至少具備一個游程。
Wald-Wolfowitz 檢驗方法僅在所分析模式中每種類型符號的數量為 8 或大于 8 時才有效,因此我將執行以下檢查:
if (n1 < 8 || n2 < 8)
throw new Exception("n1 和 n2 必須均大于等于 8," +
"本次測試才有意義");
分析過程進行到這時,我已算出模式中兩種符號類型中每一種的數量以及實際游程數,F在,如果兩個符號類型是隨機生成,則我將計算模式中的預期游程數:
double expectedRuns = 1 + ((2.0*n1*n2) / (n1 + n2));
然后我將計算游程數的方差(如果隨機生成),如下所示:
double varianceNumerator = (2.0*n1*n2) * (2.0*n1*n2 - N);
double varianceDenominator = (double)((N*N)*(N-1));
double variance = varianceNumerator / varianceDenominator;
文章來源于領測軟件測試網 http://www.kjueaiud.com/