在字母表中为以下语言编写正则表达式

时间:2015-11-20 19:21:38

标签: computation-theory

在字母表Σ= {0,1}上编写以下语言的正则表达式:

  1. 不以11结尾的所有字符串的语言。
  2. 不包含子字符串01的所有字符串的语言。 也 为上述每种语言绘制有限自动机。

1 个答案:

答案 0 :(得分:0)

第一个正则表达式为e + 0 + 1 + S* (00 + 01 + 10),其中e为空字符串,S为字母,*为Kleene闭包,{{1}是联盟。这是有效的,因为语言可以分为长度小于2的字符串(+)和长度至少为2的字符串,但不以e + 0 + 1结尾(这会留下结尾11,{ {1}}和00)。

第二语言的正则表达式为01。请注意,我们必须在所有10的左侧放置1*0*以避免子串1,但我们可以根据需要添加任意数量。{/ p>

第一个的DFA看起来像

0

状态q0是初始,q0和q1正在接受。在状态q0,你刚开始或最后看到零;你的最后一个符号不是1.在状态q1中,你的最后一个符号是1,但你的倒数第二个符号不是。在状态q2中,你已经看到连续两个1。

第二个DFA看起来像是:

01

q0是初始状态,q0和q1正在接受。 q0读取所有0,q1读取所有1,如果我们在看到1后看到0,则发生q2。