automata - 来自这个 dfa 的正则表达式
解决方案
我们可以为此写一些方程式:
(q0) = e + (q1)a + (q3)b
(q1) = (q0)a + (q2)b
(q2) = (q1)b + (q3)a
(q3) = (q0)b + (q2)a
您可以像这样阅读这些等式:“导致我进入状态 X 的字符串集是导致我进入状态 Y 后跟符号 c 的字符串集,或者是导致我进入状态 Z 后跟符号 d 的字符串集, 或者...”
我们现在可以使用替换和消除自引用的规则来求解这些方程,即:
if (q) = (q)x + y, then (q) = y(x*)
我们可以通过消除 (q3) 开始求解系统:
(q0) = e + (q1)a + [(q0)b + (q2)a]b
(q1) = (q0)a + (q2)b
(q2) = (q1)b + [(q0)b + (q2)a]a
分发:
(q0) = e + (q1)a + (q0)bb + (q2)ab
(q1) = (q0)a + (q2)b
(q2) = (q1)b + (q0)ba + (q2)aa
我们现在可以摆脱 (q1) :
(q0) = e + [(q0)a + (q2)b]a + (q0)bb + (q2)ab
(q2) = [(q0)a + (q2)b]b + (q0)ba + (q2)aa
分发:
(q0) = e + (q0)aa + (q2)ba + (q0)bb + (q2)ab
(q2) = (q0)ab + (q2)bb + (q0)ba + (q2)aa
对类似术语进行分组:
(q0) = e + (q0)(aa + bb) + (q2)(ab + ba)
(q2) = (q0)(ab + ba) + (q2)(aa + bb)
使用规则删除自引用:
(q0) = (aa + bb)* + (q2)(ab + ba)(aa + bb)*
(q2) = (q0)(ab + ba)(aa + bb)*
代入去掉 (q2):
(q0) = (aa + bb)* + [(q0)(ab + ba)(aa + bb)*](ab + ba)(aa + bb)*
分发:
(q0) = (aa + bb)* + (q0)(ab + ba)(aa + bb)*(ab + ba)(aa + bb)*
使用自引用规则:
(q0) = (aa + bb)*[(ab + ba)(aa + bb)*(ab + ba)(aa + bb)*]*
推荐阅读
- javascript - 将 Shopify/draggable 与 Alpine.js x-for 指令一起使用
- visual-studio - Visual Studio 新的 .NETCore(3.1 和 net5.0)项目在依赖项上显示黄色三角形,在清理和构建时失败,但没有显示错误
- java - “java.lang.StringIndexOutOfBoundsException”不允许我访问下一个用户输入
- word2vec - word2vec Google News 向量是如何训练的?
- vue.js - 无法加载配置“eslint-plugin-vue”以从
- ios - Swift:UNavigationController 破坏了程序化自动布局
- serial-port - 无法停止 U-Boot 自动引导
- linux - 是否可以使用打包程序设置您的本地环境(如使用 ansible playbook)
- docker - 如何卸载 Docker 或删除 Docker 目录?
- html - 为什么我的外部样式表没有链接到移动设备上?