考虑机器 M:
M 识别的语言是:
(A) {w ∈ {a, b}* / w 中的每个 a 都紧跟两个 b}
(B) {w ∈ {a, b}* w 中的每个 a 后跟至少两个 b’}
(C) {w ∈ {a, b}* w 包含子串 ‘abb’}
(D) {w ∈ {a, b}* w 不包含 ‘aa’ 作为子串}答案:(乙)
解释:
这里 w ∈ {a, b}* 表示 w 可以是 {a, b}* 集合中的任何字符串,{a, b}* 是由 a 和 b 组成的所有字符串的集合(a 和 b 的任何字符串,你可以想到)像 null、a、b、aaa、abbaaa、bbbbb、aaaaa、aaaabbbbaabbababab 等。
这些类型的问题在 GATE 中经常被问到,它被要求在选项中选择最适合的语言。为了解决这样的问题,有一个更好的方法,我们尝试通过智能选择测试字符串来消除错误的选项,直到我们只剩下一个正确的选项。只有那些e字符串(由 a 和 b 组成),其中 w 中的每个 a 后跟正好两个 b ,所以如果我们取字符串abbb(三个 b),那么它会被 machine 接受,所以这个选项是错误的。现在我们尝试消除选项 (C),它只识别那些 w 包含子字符串 ‘abb’ 的字符串(由 a 和 b 组成),所以如果我们取字符串abbaa(有子字符串 abb),那么它不被接受机,所以这个选项也是错误的。现在我们尝试消除选项 (D),它只识别那些 w 不包含 ‘aa’ 作为子字符串(由 a 和 b 组成),因此如果我们将字符串abbaba(‘aa’ not as a substring) ,那么它不被机器接受,所以这个选项也是错误的。我们剩下的唯一选项是选项(b),其中 w 中的每个 a 后跟至少两个 b’ ,是正确的。所以答案是选项(B)。