【发布时间】:2025-12-15 11:50:02
【问题描述】:
问题是为出现在任何 B 之前的所有 As 或出现在任何 As 之前的所有 B 给出正则表达式。
我得到了正则表达式 a * b * + b * a * 。
我不确定我这样做是否正确。感谢您的帮助。
【问题讨论】:
-
我可能错了,但你的机器人似乎接受“baba”但不接受“ab”...
标签: math
问题是为出现在任何 B 之前的所有 As 或出现在任何 As 之前的所有 B 给出正则表达式。
我得到了正则表达式 a * b * + b * a * 。
我不确定我这样做是否正确。感谢您的帮助。
【问题讨论】:
标签: math
如果您想要一个不确定的有限自动机,您可以使用基于正则表达式中的操作进行转换的算法:
+ 变成不确定的分支 epsilon 转换您的 NDA 如下所示:
a b
^ ^
q0--e-->q1--e-->q2
|
e
|
V
q4--e-->q5
v v
b a
如果您想要一个确定性有限自动机,您可以使用已知算法确定非确定性自动机。否则,我们可以反向运行 Myhill-Nerode 以找到不可区分关系下的等价类;这将为我们提供最小 DFA 的状态。
L 中的任意字符串,并且是我们的语言;这个类是 [e] 并且对应于初始状态 q0 正在接受所以有一个具有 6 个状态的 DFA - 1 个初始 (q0)、5 个接受和 1 个死 (q5) - 它接受语言。您可以按如下方式计算转换:每个状态都是在遵循属于其等价类的任何字符串之后到达的。请注意,死状态 q5 必须有两个自循环作为其转换。
【讨论】:
用你自己的话描述接受哪些字符串,然后描述在输入 a 或 b 后接受哪些字符串。对于每组不同的不同的接受字符串,您创建一个状态。如果接受的字符串集包含空字符串,则状态为接受状态。
接受字符串的集合,输入a之后接受的字符串,输入b之后接受的字符串都是不同的,所以至少需要三个状态。 (a后必须有a* b*,b后必须有b* a*)。
【讨论】: