【问题标题】:Combining deterministic finite automata结合确定性有限自动机
【发布时间】:2013-01-18 13:37:36
【问题描述】:

我对这些东西真的很陌生,所以我为这里的无聊表示歉意。

构造一个识别以下语言的Deterministic Finite Automaton DFA:

L= { w : w has at least two a's and an odd number of b's}. 

这个(at least 2 a's, odd # of b's) 的每个部分的自动化很容易单独制作......谁能解释一种将它们组合成一个系统的方法?谢谢。

【问题讨论】:

    标签: regular-language automata deterministic


    【解决方案1】:

    您可以使用以下简单步骤来构建组合 DFA。

    Σ = {a1 , a2 , ...,ak }
    第一步:为两种语言设计 DFA 并将它们的状态命名为 Q0、Q1、...

    第二步: 唯一地重命名两个 DFA 中的每个状态,即将 DFA 中的所有状态重命名为 Q0、Q1、Q2, Q3 , ...假设您从下标 0 开始;这意味着没有一个州有相同的名字。

    第三步:通过以下步骤构建转移表(δ)

       3a. 组合 DFA 的开始状态:
    取两个 DFA(DFA1 和 DFA2)的起始状态,并将它们命名为 Q[ i , j ] 其中 i 和 j 分别是 DFA1 和 DFA2 的起始状态的下标;即 Qi 是第一个 DFA 的开始状态,Qj 是第二个 DFA 的开始状态,并将 Q[i , j] 标记为开始状态合并 DFA。

       3b. 将两个 DFA 的状态映射为
    如果 δ(Qi,ak) = Qp1 和 δ(Qj,a k) = Qp2 ,其中 Qp1 属于 DFA1,Qp2 属于 DFA2,则 δ(Q [ i , j ] , ak) = Q[p1,p2]

       3c。填充整个表,而转换表中还有 Q[i,j]

       3d。组合 DFA 的最终状态:
    对于AND 情况,最终状态将是所有 Q[i, j] 其中 Qi 和 Qj 是 DFA1 和 DFA2 的最终状态分别。
    对于OR,最终状态将是所有 Q[i, j],其中 Qi 或 Qj 是 DFA1 的最终状态和 DFA2。

    第四步: 重命名所有 Q[i, j](唯一)并绘制 DFA 这将是您的结果。

    例子:

    L= {w: w has at least two a's and an odd number of b's}.
    

    第一步:
    奇数个 b 的 DFA。

    至少 2 个 A 的 DFA。

    第二步:
    重命名 DFA1 的状态

    第三步(a,b,c):
    构造的转换表将是。

    Step3d:
    由于我们必须对两个 DFA 进行 AND,因此最终状态将是 Q[2,4] ,因为它包含 final两个 DFA 的状态。
    如果我们必须对两个 DFA 进行 OR,最终状态将是 Q[0,4],Q[2, 3],Q[1,4],Q[2,4] .
    添加最终状态后,转换表会像这样。


    第四步:
    重命名所有状态 Q[i,j]
    Q[0,3] 到 Q0
    Q[1,3] 到 Q2
    Q[0,4] 到 Q1
    Q[2,3] 到 Q4
    Q[1,4] 到 Q3
    Q[2,4] 到 Q5
    所以最终的 DFA 将如下所示。

    【讨论】:

    • 您能否解释一下这背后的科学原理是什么?什么是正则表达式?
    【解决方案2】:

    使用两个自动机的product 完成。

    【讨论】:

    • 我还是卡住了。谁能用语言解释一下?
    • 我在 jflap 中构建了两个自动机......我怎样才能将它们合二为一?
    【解决方案3】:

    语言L 是一种常规语言,其中a 至少为两个,b 为奇数。其DFA如下:

    在这个 DFA 中,我在概念上合并了两个 DFSs!

    DFA-1 = for odd number of `b`'s (placed vertically three times in diagram)
    DFA-2 = for >=  two a           (placed Horizontally two times in diagram)
    

    DFA 过于症状和简单,所以我认为无需赘述如何结合两个 DFA

    要绘制此 DFA,您始终要跟踪有多少 bs 是偶数或奇数。 States 0, 2 and 4 表示偶数个b 已到。因此,您可以将此 DFA 垂直分成两部分,其中底部状态为偶数 bs,而上层状态为奇数。

    如果奇数b 也接受字符串,因此最终状态应处于上部状态之一。

    不仅bs 的数量是条件,而且a 至少应该是2。因此,您可以将此 DFA 水平划分为三个部分,其中 as 的数量在 state-0 and 1 为 0,as 在state-2 and 3 为 1,as 在state-4 and 5 为 2。在前两个as 之后,字符串中允许有任意数量的as,因此状态q4q5 存在自循环。

    所需的状态数为 6,因为奇偶数为 2 个状态 b 并且应该至少为 2 所以 3 个状态 a=0、a=1、a=2,因此 2*3 = 6

    【讨论】:

      猜你喜欢
      • 2013-11-29
      • 2013-04-28
      • 2018-07-14
      • 2019-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-30
      • 2015-07-10
      相关资源
      最近更新 更多