【问题标题】:regular expression for L = {w ∈ {a, b}*, Na(w) mod 2 = 1}L = {w ∈ {a, b}*, Na(w) mod 2 = 1} 的正则表达式
【发布时间】:2021-05-30 12:59:26
【问题描述】:

我不能解决这个问题,如果有人能解决这个问题。

我的问题是 L = {w ∈ {a, b}*, Na(w) mod 2 = 1}

【问题讨论】:

  • 欢迎来到 Stack Overflow。请通过tour 了解 Stack Overflow 的工作原理,并阅读How to Ask 以了解如何提高问题的质量。然后查看help center,看看你可以问什么问题。您可能想删除此问题并改为在 cs.stackexchange.com 上提问,但请先查看那里的帮助页面。
  • a(aa)*开始,确定如何添加b

标签: automata


【解决方案1】:

如果您在编写正则表达式时遇到困难,但知道如何制作 DFA,请先这样做,然后编写一些方程式并求解正则表达式。 DFA 在这里看起来很简单:

     /---a---\
     |       |
     V       |
---->q0--a-->q1
    / ^     / ^
   /  |    /  |
   \--/    \--/
     b       b

这里,q1 正在接受。我们从中得到一些方程式:

(q0) = e + (q0)b + (q1)a
(q1) = (q0)a + (q1)b

我们想要求解 (q1)。让我们去掉 (q0) 等式中的自引用:

(q0) = e + (q0)b + (q1)a
     = (e + (q1)a) + (q0)b
     = (e + (q1)a)b*

现在我们可以在方程中代入 (q1):

(q1) = (q0)a + (q1)b
     = [(e + (q1)a)b*]a + (q1)b

分配和重新排列:

(q1) = [(e + (q1)a)b*]a + (q1)b
     = (e + (q1)a)b*a + (q1)b
     = b*a + (q1)ab*a + (q1)b
     = b*a + (q1)(ab*a + b)

现在我们可以轻松地从这个等式中删除自引用:

(q1) = b*a + (q1)(ab*a + b)
     = b*a(ab*a + b)*

我们可以观察到:

  1. a 的数量总是奇数,因为总是添加一个,并且第一个之后的任何一个都以匹配的方式添加
  2. 此语言中的字符串可以以任意数量的 b 开头,以任意数量的 b 结尾,并且可以使用任意数量的 b 分隔任何其他相邻的 a 对。

【讨论】:

    猜你喜欢
    • 2020-07-03
    • 1970-01-01
    • 1970-01-01
    • 2017-12-29
    • 2018-03-18
    • 2020-01-02
    • 2019-12-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多