automata - L = {w ∈ {a, b}*, Na(w) mod 2 = 1} 的正则表达式
问题描述
我不能解决这个问题,如果有人能解决这个问题。
我的问题是 L = {w ∈ {a, b}*, Na(w) mod 2 = 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)*
我们可以观察到:
- a 的数量总是奇数,因为总是添加一个,并且第一个之后的任何一个都成对添加
- 这种语言中的字符串可以以任意数量的 b 开头,以任意数量的 b 结尾,并且可以使用任意数量的 b 分隔任何相邻的 a 对。
推荐阅读
- nginx - 如何设置nginx位置
- c# - 为什么我在运行管道时收到错误消息?
- android - 菜单中的 onOptionsItemSelected 对于使用 actionLayout 的项目是不可点击的
- java - 在线程 java.lang.RuntimeException 中获取异常:在同一阶段更改场景时 java.lang.reflect.InvocationTargetException
- java - 如何计算数组列表中的元素重复?
- c# - 有没有办法从导航页面更改主机窗口的大小和样式?(WPF)
- sql - Teradata SQL 周数 - 从 1 月 1 日开始的第 1 周,周数与一周中的特定日期对齐
- java - 无法通过 docker java 运行时从 ibm 云函数操作获取结果 json
- python - 带有--help arg的git子命令,不起作用
- math - 当光线沿法线行进时,Möller–Trumbore 距离不同于点平面距离