与此DFA对应的正则表达式是什么?
这是来自研究项目的DFA。 我们手动创建了DFA。 我们感兴趣的是与DFA对应的正则表达式。 当然,可能有多个正则表达式对应于它; 我们更喜欢更简单的一个。
您在B和E的自循环中错过了DFA中的标签。但是由于您针对给定的DFA说了两个循环,因此只有标签的选项为0
。
您的DFA正确的正则表达式是:
(00* 10*1)* (1(0 + 10)* 1 1) ( 0 + 1 (00* 10*1)* 1 ( 0 + 10)* 1 1)*
简要解释:
你只有一个最终状态是D
所以如果字符串以D
结尾,字符串可以被接受。 你注意到D
上的进入边被标记为1
而D
有一个标记为0
的自循环。
开始状态是A
因此字符串可以从0
开始,也可以从1
。 实际上在A上有两个循环。一个从0
开始并穿过上图。
上回路的RE为: 00* 10*1
要了解这一点:
0 0* 1 0* 1
A-E loop on E E-F loop on F F-A
在下图中从A
到D
RE是1 (0 + 10)* 1 1
要了解这一点:
1 (0 + 10)* 1 1
A - B loop on B B-C C-D
完整的DFA RE:(回答)
(00* 10*1)* (1(0 + 10)* 1 1) ( 0 + 1 (00* 10*1)* 1 ( 0 + 10)* 1 1)*
要了解这一点:
(00* 10*1)* (1(0 + 10)* 1 1) ( 0 + 1 (00* 10*1)* 1 ( 0 + 10)* 1 1)*
^ ^ ^
upper loop A to D loop on D * for loop on D
( 0 + 1 (00* 10*1)* 1 (0 + 10)* 1 1 )*
^ D-A A-A A-B loop on B, B-c c-D
self loop on D
编辑为@RedBaron评论这是否正则表达式生成字符串01110100110
:
无论是否接受DFA接受的拳头检查:
A - 0 - > E - 1 - > F - 1 - > A - 1 - > B - 0 - > B - 1 - > C --- 0 --- - > B --- 0 ---> B -1 - > C --- 1 ---> D --- 0 ---> D
DFA接受字符串。
如何从RE中给出答案,下面我对齐了RE和字符串。
(00* 10*1)* (1(0 + 10)* 1 1) ( 0 + 1 (00* 10*1)* 1 ( 0 + 10)* 1 1)*
0^ 1^ 1 1 0100 1 1 0
只有您可能需要了解的困难:如何(0 + 10)*
生成0100
? 对于下面的检查:
(0 + 10)*
重复三次:
(0 + 10)(0 + 10)(0 + 10)
0 10 0
杰克,基本上这个DFA可以有两个正则表达式。 第一可以是AB * CD * A,第二可以是AE * F *
这里描述你需要使用的算法。 如果你对这个话题更感兴趣,我强烈推荐阅读Michael Sipser的“计算理论导论”。
对于您的特定DFA,请按照该算法获取此正则表达式:
[(010*1)*1(10*)110*1]*(010*1)*1(10)*110*
链接地址: http://www.djcxy.com/p/74793.html