📌  相关文章
📜  构建以 aa 或 bb 开头的 DFA

📅  最后修改于: 2022-05-13 01:54:10.578000             🧑  作者: Mango

构建以 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 .

aa 或 bb 的 DFA

DFA 构建的第 1 步

步骤 2:现在考虑状态q1 ,如果它接受输入字母 'b',它会破坏我们的条件 'aa' 但如果输入字母 'a' 它会生成一个可接受的字符串,现在它进入状态q2 ,即设置为最终状态。

aa 或 bb 的 DFA

DFA 构建的第 2 步

步骤 3:在状态q3上,如果输入字母 'a',它会打破我们的条件 'bb',但如果输入字母 'b',它会生成一个可接受的字符串,现在它进入状态q2 ,它被设置为最终状态。

aa 或 bb 的 DFA

DFA 构建的第 3 步

第 4 步:如果状态q3的输入字母“a”打破条件,状态q1的输入字母“b”打破条件,则它们进入某个死状态( D )。

aa 或 bb 的 DFA

DFA 构建的第 4 步

Step-5:到目前为止,我们的机器接受从 'aa' 或 'bb' 开始的字符串,但我们还必须处理字符串从 'aa' 或 'bb' 开始之后的所有符号,因此我们引入我们自己在q2 (最终状态)和D (死状态)中循环。

aa 或 bb 的 DFA

DFA 构建的第 5 步

上图的转换表和转换规则:

有限状态集 = { qo, q1, q2, q3, D }

在转移表中,初始状态(qo)表示,最终状态为q2 ,有两个圆圈。

输入字母集 = {a, b}

转换表

STATEab
->qoq1q3
q1q2D(dead)
q3D(dead)q2
q2q2q2
D(dead)D(dead)D(dead)