找到DFA的补充?

时间:2013-02-10 21:22:24

标签: regex regular-language automata dfa nfa

我被要求显示DFA图和RegEx作为RegEx (00 + 1)*的补充。在之前的问题中,我必须证明DFA的补充是封闭的并且也是正则表达式,所以我知道要将DFA,M转换为补码,M`,我只需要交换初始接受状态和最终接受国家。

但是,似乎RegEx的初始接受状态为{00, 1, ^},最终接受状态也为{00, 1, ^}。因此,交换它们只会产生完全相同的RegEx和DFA,这似乎是相互矛盾的。

我做错了什么还是这个RegEx应该没有真正的补充?

谢谢

2 个答案:

答案 0 :(得分:31)

正如你所说的那样:

  

我知道要将DFA,M转换为补码,M`,我只需要交换初始接受状态和最终接受状态。

它的不是补充,但你正在做类似语言的反向regular languages are closure under reversal.

DFA的逆转

什么是反转语言?

语言L的逆转(表示为L R )是由以下语言组成的语言 L中所有字符串的反转。

鉴于某些FA A的L是L(A),我们可以构造L R 的自动机:

  
      
  • 反转转换图中的所有边(弧)

  •   
  • L R 自动机的接受状态是A的开始状态

  •   
  • 为新自动机创建一个新的开始状态,其中epsilon转换为A的每个接受状态

  •   

注意:通过反转所有箭头并交换DFA的初始状态和接受状态的角色,您可能会获得NFA。
这就是我写FA(不是DFA)

的原因

补充DFA

  

查找DFA的补充?

Defination: 语言的补语是根据与Σ*(sigma star)的集合差异定义的。即L ' * - L.

L的补语(L ' )包含来自Σ*(sigma star)的所有字符串,除了L.Σ*中的字符串都是可能的字符串字母表Σ。
Σ=语言符号集

  

要构建接受L的补码的DFA D,只需转换即可    A中的每个接受状态进入D中的非接受状态并转换    A中的每个非接受状态进入D中的接受状态   (警告!这不适用于NFA的

A是L的DFA,D是补充

注意:要构建补充DFA,旧的DFA必须是一个完整的意味着应该从每个状态(或换句话说δ should be a complete function)出现所有可能的边缘。

Complement: reference with example

  

补充正则表达式的DFA (00+1)*

下面的

是名为 A 的DFA:

  

00+1

但是这个DFA不是完整的DFA。转换函数δ已部分定义,但不适用于完整域Q×Σ错过了q1的lable 1 的前沿)。

其完整的DFA可以如下( A ):

  

completeDFA

在上面的DFA中,定义了所有可能的事务(*对于每对Q,Σ *),δ在这种情况下是完整的函数。

Reff: to learn what is Partial Function.

新补码DFA D 可以通过将所有最终状态q0更改为非最终状态来构建,反之亦然。

因此补码q0变为非最终状态,q1, q2是最终状态。

  

complement

现在,您可以使用我给出的ARDEN'S THEOREM and DFA为补充语言编写正则表达式。

我在这里直接写补充正则表达式:

(00 + 1)* 0 (^ + 1(1 + 0)*)

其中^为空符号。

一些有用的链接
here开始,通过我的个人资料,您可以在FA上找到更多有用的答案。此外,有关常规语言属性的两个很好的链接:onesecond

答案 1 :(得分:0)

我没有花时间阅读Grijesh的所有答案,但这是让DFA接受语言补充的简单方法,因为DFA接受该语言:使用相同的DFA,但更改接受状态为不接受,反之亦然。

之前接受的字符串将被拒绝,之前被拒绝的字符串将被接受。由于所有转换必须在任何有效的DFA中定义,并且由于所有输入字符串都只能导致一种状态,因此总是有效。

要获得反转的DFA,您可以首先通过添加一个新的初始状态来构建NFA,该状态非确定地分支到原始DFA的所有接受状态。反转原始DFA的所有过渡,并使唯一接受状态为原始DFA的初始状态。