如何使用 Arden 定理获得此 DFA 的 RE?无法获得所需的正则表达式

问题描述

期望的 RE:0*10*1(1+00*1)* 与 RE 我得到了 0*1(0 + 11* 0)*11*

    q0 = q0 0 + ε           equ (1)
    q1 = q0 1 + q1 0 + q2 0     equ (2)
    q2 = q1 1 + q2 1            equ (3)
    
    q0 = ε + q0 0           R=Q+RP
    q0 = ε 0*           R=QP*
    q0 = 0*             εR*=R*
    
    q2 = q1 1 + q2 1
    q2 = q1 11*         equ (4)
    
    Substitute the value of q2 in equ (2)
    q1 = q0 1 + q1 0 + q2 0
    q1 = 0*1 + q1 0 + q1 11* 0
    q1 = 0*1 + q1 (0 + 11* 0)       R=Q+RP
    q1 = 0*1((0 + 11* 0)*)*     R=QP*
    q1 = 0*1(0 + 11* 0)*        (R*)*=R*
    
    Substitute the value of q1 in equ (4)
    q2 = q1 11*
    q2 = 0*1(0 + 11* 0)*11*

我尝试解决 DFA 以获得所需的 RE,但无法实现我想要的。

这是我正在尝试获取 RE 的 DFA:

DFA

解决方法

您找到的正则表达式是正确的,并且在您展示时自然地从 DFA 的结构中出来,但是要获得您指定的 Desired RE,您需要将 DFA 转换为等效的 DFA:

enter image description here

此 DFA 与您的等效:我已将 q1 拆分为两个状态,q1q1'q1 接收来自 q0q1'q2 接收转换,两者都具有相同的转换输出。 (我知道,这不是等价的正式证明,但这是此类证明的潜在直觉。)

有了这个 DFA,证明就很简单了:

q0 = q0 0 + ε
   = ε0*
   = 0*
q1 = q0 1 + q1 0
   = 0*1 + q1 0
   = 0*10*    
q1'= q2 0 + q1' 0
   = q2 00*
q2 = q1 1 + q2 1 + q1' 1
   = 0*10*1 + q2 1 + q2 00*1
   = 0*10*1 + q2 (1 + 00*1)
   = 0*10*1 (1 + 00*1)*

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...