繁体   English   中英

找到DFA的补充?

[英]Finding the complement of a DFA?

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

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

我做错了什么,或者这个RegEx应该没有真正的补充?

谢谢

正如你所说的那样:

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

不是补充 ,但你正在做一些像 语言的逆转常规语言的逆转

撤销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必须是一个完整的手段,应该从每个状态都可能出现边缘(或者换句话说, δ应该是一个完整的函数 )。

补充:参考例子

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

以下是名为A的 DFA:

00 + 1

但是这个DFA不是完整的DFA。 过渡函数δ是部分定义的,但不适用于全域Q×Σ从标签1 q1中错过了边缘 )。

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

completeDFA

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

Reff:了解什么是部分功能。

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

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

补充

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

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

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

其中^是空符号。

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM