我正在学习计算课程,该课程也讲授正则表达式。有一个我无法回答的难题。
查找接受包含最多两对连续0的单词的语言的正则表达式。字母表由0和1组成。
首先,我制作了该语言的NFA,但无法将其转换为GNFA(后来转换为正则表达式)。我怎样才能找到这种常规表达方式?是否将其转换为GNFA?
答案 0 :(得分:3)
(因为这是一个家庭作业问题,我假设你只是想要足够的帮助才能开始,而不是一个完整的解决方案?)
您的里程可能会有所不同,但我不确实建议您尝试将NFA转换为正则表达式。这两个在理论上是等价的,要么可以在算法上转换成另一个,但在我看来,它不是构建任何一个的最直观的方法。
相反,一种方法是首先列举各种可能性:
根本没有连续的零对;也就是说,除了字符串的末尾之外,每个零必须后跟一个。因此,该字符串由1
和01
的混合序列组成,可选地后跟0
:
(1|01)*(0|ε)
正好是一对连续的零,在字符串的末尾。这与前一个非常相似:
(1|01)*00
正好是一对连续的零,不在字符串的末尾 - 因此,必然后跟一个。这与第一个非常相似:
(1|01)*001(1|01)*(0|ε)
要继续这种方法,您可以扩展上述内容以支持连续零的两对;最后,您将所有这些合并为一个正则表达式。
答案 1 :(得分:0)
(0 + 1)* 00(0 + 1)* 00(0 + 1)* +(0 + 1)* 000(0 + 1)*
答案 2 :(得分:-1)
最多包含两对连续0的
(1|01)*(00|ε)(1|10)*(00|ε)(1|10)*