【发布时间】:2013-01-25 23:59:01
【问题描述】:
我被要求展示 DFA 图和 RegEx 以作为 RegEx (00 + 1)* 的补充。在上一个问题中,我必须证明 DFA 的补码是封闭的并且也是一个正则表达式,所以我知道要将 DFA M 转换为补码 M`,我只需要交换初始接受状态和最终接受状态。
但是,RegEx 的初始接受状态似乎是{00, 1, ^},最终接受状态也是{00, 1, ^}。因此,交换它们只会导致完全相同的 RegEx 和 DFA,这似乎是矛盾的。
我做错了什么还是这个 RegEx 应该没有真正的补充?
谢谢
【问题讨论】:
-
一个 DFA 只有一个初始状态,所以你可能在这里犯了一个错误。编写 DFA 本身并在尝试补充之前对其进行验证。
-
另外,为了补充 DFA,您只需为每个状态交换“final-ness”——也就是说,使每个非最终状态为最终状态,而每个最终状态都为非最终状态。
-
那么初始状态不能是 00 或 1 吗?
-
并非如此——请记住,初始状态是它开始读取字符串的位置,因此到目前为止它还没有读取任何内容。不过,它有 00 和 1 的转换。也许您应该查找一些有关 DFA 的信息?
-
我明白这一点。从技术上讲,它以空字符串开头,然后可以读取 00 或 1。但这不会改变我的困境
标签: regex regular-language automata dfa nfa