📜  门|门 IT 2007 |第 71 题

📅  最后修改于: 2021-09-25 04:28:52             🧑  作者: Mango

考虑正则表达式 R = (a + b)* (aa + bb) (a + b)*

下面给出的正则表达式中的哪一个定义了与正则表达式 R 定义的语言相同的语言?
(A) (a(ba)* + b(ab)*)(a + b) +
(B) (a(ba)* + b(ab)*)*(a + b)*
(C) (a(ba)* (a + bb) + b(ab)*(b + aa))(a + b)*
(D) (a(ba)* (a + bb) + b(ab)*(b + aa))(a + b) +答案: (C)
解释: B 空可以被接受,不在给定中 –>

门_71

上面的 DFA 可以通过解决状态 B 和 C 处的循环并删除最终状态处的额外转换来简化,如下所示:

门_71_1

为了从 B 到达最终状态,我们可以让字母“a”移动到状态 D 或“bb”移动到状态 E。
类似地,要从 C 到达最终状态,我们可以让字母“b”移动到状态 E 或“aa”移动到状态 D。

因此正则表达式为:
(a(ba)*(a+bb) + b(ab)*(b+ aa))(a+b)*

a(ba)*(a+bb):从 A 移动到 B 和 B 移动到任一最终状态
b(ab)*(b+ aa):从 A 到 C 和 C 到任一最终状态注意:我们也可以对此类问题使用选项消除方法,即如果我们可以拒绝选项

至少找到不验证正则表达式的字符串。
选项 (A) 接受 ab 但给定的正则表达式不接受。
选项 (B) 接受空字符串,但给定的正则表达式不接受。
选项 (D) 不接受 aa,但给定的正则表达式接受。

该解决方案由Yashika Arora 提供
这个问题的测验