更清洁的方式来表示DFA接受的语言?

时间:2017-07-06 18:39:06

标签: formal-languages

我获得了2个DFA。 *表示最终状态和 - >表示在字母{a,b}上定义的初始状态。

1) - > A带a转到A. - > A与b前往* B. * B带a到* B. * B与b前往 - > A。

这个的正则表达式显然是: E = a * b(a * +(a * ba * ba *)*)

它接受的语言是L1 = {w over {a,b} | w是b之后是任意数量的a后跟任意数量的a或w是b之前是任意数量的a后跟任意数量的bb,其中任意数量的a在(bb的中间),结束或开始的中间。}

2) - > * A与b进入 - > * A. - > * A与a进入* B.带有b的 B进入 - > A. * B带有a转到C. C带有a转到C. C带b转到C.

注意:A是最终状态和初始状态。 B是最终状态。

现在我得到的正则表达式是:

E = b *((ab)* + a(b b * a)*)

最后,这个DFA接受的语言是: L2 = {w over {a,b} | w是n 1,后跟k 01或a后跟m 11 ^ r0,其中n,km,r> = 0}

现在的问题是,是否有一种更清晰的方式来表示语言L1和L2,因为它看起来确实很难看。提前谢谢。

1 个答案:

答案 0 :(得分:0)

E = a* b(a* + (a* ba* ba*)*)
  = a*ba* + a*b(a* ba* ba*)*
  = a*ba* + a*b(a*ba*ba*)*a*
  = a*b(a*ba*ba*)*a*
  = a*b(a*ba*b)*a*

这是包含奇数a个的bb的所有字符串的语言。这可能最符合地用符号表示为{w in {a,b}* | #b(w) = 1 (mod 2)}

对于第二个:进入州B的唯一方法是在a中看到A,以及从外部CC的唯一方法是a中的BC处于死亡状态,唯一的方法是aaA开始。那就是:如果你连续看到两个a,那么字符串就不在语言中;该语言是ab上不包含子字符串aa的所有字符串的集合。这可能最简洁地用符号表示为{(a+b)*aa(a+b)*}^c,其中^c表示“补充”。