先决条件:设计有限自动机
在本文中,我们将看到一些确定性有限自动机 (DFA) 的设计。
问题 1:构造一个最小 DFA,接受一组 {a, b} 上的字符串,其中 {abwa / wε{a, b}*}。
这里的“w”是包含字母的子串,包含任意数量的“a”和“b”,范围从零到无穷大。
说明:所需的语言将类似于:
L1 = {abεa, abaaaa, ababaaa, abaabbaaa}
在这里我们可以看到,上述语言的每个字符串都有常数初始即 {ab} 和最终 {a} 子字符串,但 ‘w’ 有一个超过 {a, b} 的子字符串,其字母从零到无穷大,但下面的语言此 DFA 不接受它,因为它的字符串不遵循字符串的格式。
L2 = {baa, aabaa, baabaaa..............}
所需语言的状态转换图如下所示:
在上面的 DFA 中,初始状态 ‘V’ 在将 ‘a’ 作为输入时转换为状态 ‘W’,在获得 ‘b’ 作为输入时它转换为死状态 ‘Z’。状态 ‘W’ 在将 ‘a’ 作为输入时转换到死状态 ‘Z’ 并在获取 ‘b’ 作为输入时转换到状态 ‘X’。状态 ‘X’ 在将 ‘b’ 作为输入时保持在它自己的状态,在获得 ‘a’ 作为输入时它会转换到最终状态 ‘Y’。
最终状态 ‘Y’ 在获得 ‘a’ 作为输入时保持在它自己的状态,在获得 ‘b’ 作为输入时它转换到状态 ‘X’。状态“Z”被称为死状态,因为它无法在获得任何输入字母时进入最终状态。
问题 2:构造一个最小 DFA,它接受一组 {a, b} 上的字符串,其中 {a 2 bwa 2 / wε{a, b}*}。
这里的“w”是包含字母的子串,包含任意数量的“a”和“b”,范围从零到无穷大。
说明:所需的语言将类似于:
L1 = {aabεaaa, aabaaaa, aababaaa, aabaabbaaa}
在这里我们可以看到,上述语言的每个字符串都有常数初始即 {a 2 b} 和最终 {a 2 } 子串,但 ‘w’ 有一个超过 {a, b} 的子串,其字母从零到无穷大,但此 DFA 不接受以下语言,因为它的字符串不遵循字符串的格式。
L2 = {baa, abaa, baabaaa..............}
所需语言的状态转换图如下所示:
在上面的 DFA 中,初始状态 ‘A’ 在将 ‘a’ 作为输入时会转换为状态 ‘B’,而在将 ‘b’ 作为输入时,它会转换为死状态 ‘G’。将“a”作为输入时的状态“B”转换为状态“C”,将“b”作为输入时将转换为死状态“G”。状态 ‘C’ 在将 ‘b’ 作为输入时转变为状态 ‘D’,在获得 ‘a’ 作为输入时转变为死状态 ‘G’。状态 ‘D’ 在将 ‘a’ 作为输入时转换到状态 ‘E’ 并在获得 ‘b’ 作为输入时保持其自身状态。状态 ‘E’ 在将 ‘a’ 作为输入时它会转换到最终状态 ‘F’,在获取 ‘b’ 作为输入时它会转换到状态 ‘D’。
将“a”作为输入时的最终状态“F”保持在自身的状态,而在将“b”作为输入时,它转换到状态“D”。死状态 ‘G’ 被称为死状态,因为它无法在获取任何输入字母时进入最终状态。