正好有1个三进制b的所有字符串的语言

时间:2018-11-29 22:39:59

标签: string automation regular-language finite-automata

我是自动机的新手,正在学习对语言进行正则表达。但是我一直被困在这个。

假设我们有一种语言L,即所有在字母集上定义为正好为1个三元组“ b” 的字符串的语言Σ= {a,b}
经过几次尝试,我想到了这个
(a *(ab)*(ba)*)* bbb(a *(ab)*(ba)*)* 但后来我意识到这也是错误的,因为字符串 abbbabababb 不适用于此字符串。

请问有人指出我的错误或帮我解决了,因为我已经花了将近一个小时的时间。

1 个答案:

答案 0 :(得分:0)

从描述该语言的DFA开始:

States: start, b, bb, bbb, bbba, bbbab, bbbabb, x
Accepting: bbb, bbba, bbbab, bbbabb
Transitions: 
  start, a, start
  start, b, b
  b, a, start
  b, b, bb
  bb, a, start
  bb, b, bbb
  bbb, a, bbba
  bbb, b, x
  bbba, a, bbba
  bbba, b, bbbab
  bbbab, a, bbba
  bbbab, b, bbbabb
  bbbabb, a, bbba
  bbbabb, b, x

Example of this DFA in action

从那里,您可以convert the DFA into a regular expression,尽管使用此算法时将省略x'dump'状态。您最终会得到类似

的表达式
(|a|ba|bba)*(bbb|bbba(|a|ba|bba)*(|b|bb))