构建以 aa 或 bb 开头的 DFA
先决条件:设计有限自动机
DFA(确定性有限自动机或接受器)是一种接受或拒绝符号字符串的有限状态机。如果字符串达到最终状态,则 DFA 接受该字符串,否则拒绝该字符串。在这些类型的问题中,我们有一些给定的参数,我们应该根据这些参数设计 DFA。
问题——构造一个从输入(a,b)以 aa 或 bb 开头的 DFA。
解决方案——在这个问题中,给出了两个参数:
- DFA 应以 aa 开头
要么
- DFA 应该以 bb 开头
这意味着,生成的 DFA 应该接受诸如 aa、bb、aab、bba、aaa、bbb 之类的字符串。等,但它不应接受诸如 a、b、ba、bab、abb、abbaba 等字符串。
逐步设计 DFA:
步骤 1:取初始状态qo ,最小可能的字符串是 aa 和 bb 如果qo将 'a' 作为第一个输入字母,它进入状态q1 ,如果qo将 'b' 作为第一个输入字母,它进入状态q3 .
步骤 2:现在考虑状态q1 ,如果它接受输入字母 'b',它会破坏我们的条件 'aa' 但如果输入字母 'a' 它会生成一个可接受的字符串,现在它进入状态q2 ,即设置为最终状态。
步骤 3:在状态q3上,如果输入字母 'a',它会打破我们的条件 'bb',但如果输入字母 'b',它会生成一个可接受的字符串,现在它进入状态q2 ,它被设置为最终状态。
第 4 步:如果状态q3的输入字母“a”打破条件,状态q1的输入字母“b”打破条件,则它们进入某个死状态( D )。
Step-5:到目前为止,我们的机器接受从 'aa' 或 'bb' 开始的字符串,但我们还必须处理字符串从 'aa' 或 'bb' 开始之后的所有符号,因此我们引入我们自己在q2 (最终状态)和D (死状态)中循环。
上图的转换表和转换规则:
有限状态集 = { qo, q1, q2, q3, D }
在转移表中,初始状态(qo)用→表示,最终状态为q2 ,有两个圆圈。
输入字母集 = {a, b}
转换表
STATE | a | b |
---|---|---|
->qo | q1 | q3 |
q1 | q2 | D(dead) |
q3 | D(dead) | q2 |
q2 | q2 | q2 |
D(dead) | D(dead) | D(dead) |