【问题标题】:How do I build this finite automaton?如何构建这个有限自动机?
【发布时间】:2010-10-27 11:46:44
【问题描述】:

我正在为离散数学考试而学习,但我发现了这个我无法弄清楚的练习。

"为字母 Sigma = {0,1,2} 中的语言构建一个基本的有限自动机 (DFA,NFA,NFA-lambda),其中字符串中元素的总和是偶数并且这个总和大于3"

我尝试使用 Kleene 定理连接两种语言,例如连接与此正则表达式相关的一种语言:

(00 U 11 U 22 U 02 U 20)* - 偶数元素

这个

(22 U 1111 U 222 U 2222)* - 总和大于 3 的那些

这有意义吗??我认为我的正则表达式很松散。

【问题讨论】:

    标签: regex discrete-mathematics finite-automata


    【解决方案1】:

    我发现你的符号有点模糊,所以也许我完全误解了。如果是这样,请忽略以下内容。看来你还没有:

    • 我假设 * 表示“0 次或多次”。但是,总和 >= 3 的字符串之一必须出现。就是说您需要一个 +(“1 次或多次”)。
    • 总和 >= 3 的字符串列表中缺少 112 和 211。
    • 该列表中的 222 和 2222 是多余的。
    • 所有这些字符串都可以任意穿插 0。
    • 00 之和不超过 0 之和。

    编辑: 怎么样(acc 是唯一的接受状态,dot-source):

    automaton http://student.science.uva.nl/~sschroev/so/885411.png

    在状态 ac 中,字符串总和总是奇数。在状态 startbacc,总和总是偶数。此外,在 start 处总和为 0,在 b 处为 2,在 d 处为 >= 4。这很容易证明.因此接受状态 acc 符合所有标准。

    编辑 2: 我想说这是一个接受请求语言的正则表达式:

    0*(2|(1(0|2)*1))(0*(2|(1(0|2)*1))+
    

    【讨论】:

    • 您确实得到了正确的符号。是的,总和 >=3 的必须有一个 +,你是对的,那些 112 和 211 字符串确实丢失了。我想我会在字符串之间添加 0* 。我将在下面发布内容。
    【解决方案2】:

    我发现从状态的角度来思考更容易。使用五种状态:0、1、2、EVEN、ODD

    过渡:

    State, Input -> New State
    
    (0, 0) -> 0
    (0, 1) -> 1
    (0, 2) -> 2
    
    (1, 0) -> 1
    (1, 1) -> 2
    (1, 2) -> ODD
    
    (2, 0) -> 2
    (2, 1) -> ODD
    (2, 2) -> EVEN
    
    (ODD, 0) -> ODD
    (ODD, 1) -> EVEN
    (ODD, 2) -> ODD
    
    (EVEN, 0) -> EVEN
    (EVEN, 1) -> ODD
    (EVEN, 2) -> EVEN
    

    只有 EVEN 是接受状态。

    【讨论】:

      【解决方案3】:

      不确定这是否回答了您的问题,但是:您需要提交正则表达式吗?还是 FSM 会这样做?

      无论如何,先绘制 FSM 可能会有所帮助,我认为这是一个正确的 DFA:

      FSM http://img254.imageshack.us/img254/5324/fsm.png

      如果是这样,在构造正则表达式时(请记住,它的语法与编程“正则表达式”不同):

      0* 表示“0 任意多次”。这是有道理的,因为字符串中的 0 不会改变机器的状态。 (看,在 FSM 中,0 只是循环回自身)

      您需要考虑“112”或“22”等的不同组合 - 直到总和至少达到 4。

      如果您的总和大于 3,甚至大于 3,那么 (0|2)* 将使您处于最终状态。否则(总和 > 3,奇数)你需要像 1(0|2)* 这样的东西才能让你处于接受状态。

      (不知道这是否有帮助,或者它是否正确 - 但它可能是一个开始!)

      【讨论】:

        【解决方案4】:

        在 Stephan 的指导下,每个表达式可能是:

        (0*U 2* U 11)* - 偶数和

        这个

        (22 U 11 U 222 U 112 U 211 U 121)+ - 和大于3的那些

        不知道能不能再简化一点,对设计自动机很有帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-01-28
          • 1970-01-01
          • 2010-12-24
          • 2013-11-05
          • 1970-01-01
          相关资源
          最近更新 更多