【问题标题】:Odd DFA for Language语言的奇数 DFA
【发布时间】:2017-06-25 14:11:43
【问题描述】:

有人可以帮我画一个接受这种语言的 NFA:

{ w | the length of w is 6k + 1 for some k ≥ 0 }

我已经被这个问题困扰了几个小时了。我不明白k 在哪里发挥作用以及它在图中的使用方式......

【问题讨论】:

  • 这里离题,属于 cs.stackexchange.com。

标签: algorithm computer-science automata computation-theory


【解决方案1】:

{ w | the length of w is 6k + 1 for some k ≥ 0 }

我们可以使用 Myhill-Nerode 定理来建设性地为该语言生成可证明的最小 DFA。这是一个有用的练习。一、定义:

两个字符串wx 对于语言L 而言是无法区分的:(1) 对于每个字符串y,使得wyL 中, xyL; (2) 对于每个字符串z 使得xzL 中,wzL 中。

Myhill-Nerode 的见解是,如果两个字符串无法区分 w.r.t.一种常规语言,然后该语言的最小 DFA 将确保机器对于任一字符串都处于相同的状态。不可区分性是自反的、对称的和传递的,因此我们可以在其上定义等价类。这些等价类直接对应于最小 DFA 中的状态集。现在,要找到我们语言的等价类。我们考虑长度增加的字符串,并查看每个字符串是否与之前的任何字符串无法区分:

  1. e,空字符串,前面没有字符串。我们需要一个状态q0 来对应这个字符串所属的等价类。可以在e 之后到达L 中的字符串的字符串集合是L 本身;还写了c(c^6)*
  2. c,任何长度为 1 的字符串,前面只有 e。然而,这些并不是无法区分的。我们可以将e 添加到c 以获取ce = c,这是L 中的一个字符串,但我们不能将e 添加到e 以获取L 中的字符串,因为e 不在L。因此,对于c 所属的等价类,我们需要一个新状态q1。可以在c 之后到达L 中的字符串的字符串集是(c^6)*
  3. 事实证明我们需要一个新的状态q2;将cc 转换为L 中的字符串的字符串集是ccccc(c^6)*。显示这个。
  4. 事实证明,我们需要一个新的状态q3;将ccc 转换为L 中的字符串的字符串集是cccc(c^6)*。显示这个。
  5. 事实证明我们需要一个新的状态q4;将cccc 转换为L 中的字符串的字符串集是ccc(c^6)*。显示这个。
  6. 事实证明我们需要一个新的状态q5;将ccccc 转换为L 中的字符串的字符串集是cc(c^6)*。显示这个。
  7. 考虑字符串cccccc。哪些字符串将我们带到L 中的字符串?好吧,c 可以。 c 后跟任何长度为 6 的字符串也是如此。有趣的是,这与 L 本身相同。我们已经有一个等价类:e 后面也可以跟L 中的任何字符串,以获取L 中的字符串。 cccccce 无法区分。更重要的是:由于所有长度为 6 的字符串都与较短的字符串没有区别,我们不再需要继续检查较长的字符串。我们的 DFA 保证具有我们已经确定的状态q0 - q5。更重要的是,我们上面所做的工作定义了我们在 DFA 中需要的转换、初始状态和接受状态:
    • 如果x 是对应于q 的等价类中的字符串且xc 是等价类中的字符串,则DFA 将在符号c 上从状态q 转换到状态q' q'对应的类;
    • 初始状态将是空字符串e所属的等价类对应的状态;
    • 如果属于与该语言对应的等价类的任何字符串(因此所有字符串)在该语言中,则状态q 正在接受;或者,如果将等价类中的字符串与L 中的字符串相结合的字符串集包括e,则为空字符串。

我们可以使用上面的注释将 DFA 写成表格形式:

q    x    q'
--   --   --
q0   c    q1 //     e + c = c
q1   c    q2 //     c + c = cc
q2   c    q3 //    cc + c = ccc
q3   c    q4 //   ccc + c = cccc
q4   c    q5 //  cccc + c = ccccc
q5   c    q0 // ccccc + c = cccccc ~ e

我们将q0 作为初始状态,唯一接受的状态是q1

【讨论】:

    【解决方案2】:

    这是一个 NFA,它前进 6 个状态,然后如果再有一个字符,它就会停止在最终状态。否则,它会不确定地循环返回到开始并超过最终状态。

    (Start) S1 -> S2 -> S3 -> S5 -> S6 -> S7 (Final State) -> S8 - (loop forever)
                                                               ^ |
            ^                        v                         |_|
            |________________________| (non deterministically)
    

    【讨论】:

    • 你能画一张我很难想象的图片。您是说它循环回 S1,然后稍后跳过 S7?它会到达 S8 吗?
    • 它不会跳过 S7。在 S6 之后,它不确定地转到 S7 和 S1。然后转到 S7 的分支将在其第 6kth+1 个输入上停止,或者它将转到 S8 并停留在该循环中,直到输入用完。另一个非确定性分支回到 S1 并使用剩余的输入重复该模式。
    • 离题。太复杂了:在我的书中,每个 DFA 都是 NFA。
    • @greybeard 我不确定你的意思。当然,DFA 可以写成 NFA,反之亦然,但这有什么关系呢?
    • 不是 可以写成,但是(和O(n)算法一样是O( n³) 或常规语言是上下文无关的)。想参考 DFA 和 NFA 的定义吗? (顺便说一句,你的循环很短。)
    猜你喜欢
    • 1970-01-01
    • 2012-02-16
    • 2017-03-13
    • 2012-07-18
    • 2014-05-18
    • 2013-09-07
    • 2018-09-03
    • 2017-04-14
    • 2014-07-28
    相关资源
    最近更新 更多