现在,让我们假设 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("字符串只能具有两种类型");
如果要考虑性能,则可将这三次对模式字符串的遍历重新转换为仅仅一次遍历,但清晰性可能会受到一些影响。
现在,我就可以开始计算模式中每种类型符号的数量以及游程数了:
文章来源于领测软件测试网 https://www.ltesting.net/