【问题标题】:Write regular expressions for the following languages over the alphabet在字母表上为以下语言编写正则表达式
【发布时间】:2016-02-23 09:38:37
【问题描述】:

在字母表 ∑ = {0, 1} 上为以下语言编写正则表达式:

  1. 所有不以 11 结尾的字符串的语言。
  2. 不包含子字符串 01 的所有字符串的语言。 还 为上述每种语言绘制有限自动机。

【问题讨论】:

  • 没有。我不想。不过,说真的,你至少应该假装自己已经做出了一些努力——向我们展示你的尝试,并解释它如何没有按照你期望的方式工作......

标签: computation-theory


【解决方案1】:

第一个正则表达式是e + 0 + 1 + S* (00 + 01 + 10),其中e 是空字符串,S 是字母表,* 是Kleene 闭包,+ 是联合。这是可行的,因为该语言可以分为长度小于 2 的字符串 (e + 0 + 1) 和长度至少为 2 且不以 11 结尾的字符串(这会留下结尾 0001 和 @987654330 @)。

第二种语言的正则表达式是1*0*。请注意,我们必须将任何1s 放在所有0s 的左侧以避免子字符串01,但我们可以有任意多个。

第一个的 DFA 看起来像

q    e    q'
q0   0    q0
q0   1    q1
q1   0    q0
q1   1    q2
q2   0    q0
q2   1    q2

状态 q0 是初始状态,q0 和 q1 正在接受。在状态 q0 中,您要么刚开始,要么最后一次看到零;您的最后一个符号不是 1。在状态 q1 中,您的最后一个符号是 1,但倒数第二个符号不是。在状态 q2 中,您连续看到两个 1。

第二个的 DFA 如下所示:

q    e    q'
q0   0    q1
q0   1    q0
q1   0    q1
q1   1    q2
q2   0    q2
q2   1    q2

q0 是初始状态,q0 和 q1 正在接受。 q0 读取所有 0,q1 读取所有 1,如果我们在看到 1 之后看到 0,就会发生 q2。

【讨论】:

    猜你喜欢
    • 2013-11-07
    • 1970-01-01
    • 2023-01-20
    • 2023-03-30
    • 2011-10-05
    • 2017-02-11
    • 1970-01-01
    • 2014-10-16
    • 2014-09-11
    相关资源
    最近更新 更多