如何解决无 ε 的 RE 到 FSA 的转换
10+(0+11)*1
如何将调节器表达式更改为有限状态自动机?
解决方法
一方面在 RE 和 NFA 之间的等价性propf 中使用了算法,另一方面在 NFA 和 DFA 之间使用了算法。这是一种选择,不需要深入了解或理解 RE 生成的语言。
另一种选择是先尝试理解该语言,然后从头开始为该语言编写 DFA。
我将向您展示的方式涉及 Myhill-Nerode 定理,该定理表明,常规语言在不可区分性关系上具有与该语言的最小 DFA 中的状态一样多的等价类。如果可以将同一组字符串附加到它们以获得语言中的某些字符串,则两个字符串在语言方面无法区分。例如,字符串 a、b 和 ba 是可区分的 w.r.t. L(ab) 因为 a 可以跟 b,b 后面只有空字符串,而 ba 后面没有(空集)以获得 L 中的字符串。这告诉我们 ab 的最小 DFA至少需要三个状态。
对于你的语言,L(10 + (0 + 11)*1,我们观察到:
-
空字符串是我们首先查看的。它需要一个状态——DFA 的初始状态——并且可以跟在 L 中的任何字符串之后以获得 L 中的一个字符串。将此状态称为 [e]。
-
字符串0后面可以跟1,得到语言中的字符串;这使它与空字符串不同,因此需要一个新状态。称之为 [0]。
-
字符串1后面可以跟空字符串,得到语言中的另一个字符串;这使得它与空字符串和字符串 0 区分开来。调用它的状态 [1]。
-
字符串 00 后面可以跟与 0 完全相同的字符串,以获取语言中的字符串。这意味着 00 不需要新状态; 00 会将我们的 DFA 带到状态 [0]。
-
字符串 01 后面可以跟 1(0 + 11)*1 形式的字符串以获取语言中的字符串。这是新的,所以我们需要一个新的状态。叫这个[01]
-
字符串 10 后面可以跟空字符串,只能得到 L 中的字符串。这是新的,所以调用它的状态 [10]。
-
字符串 11 后面可以跟与 0 完全相同的字符串,以获取语言中的字符串。 11 将使我们的 DFA 状态为 [0]。
-
字符串 010 永远不会导致该语言中的字符串;它必须在我们的最小 DFA 中导致死亡状态。叫这个[010]。
-
字符串 011 与字符串 0 和 11 无法区分。
-
字符串 100 和 101 不能导致语言中的字符串,因此它必须将我们的 DFA 带到死状态 [010]。
我们发现我们需要的状态是:[e]、[0]、[1]、[01]、[10] 和 [010]。转换并不难弄清楚:
- [e] 分别在输入 0 和 1 上转换为 [0] 和 [1]
- [0] 分别在输入 0 和 1 上转换为 [0] 和 [01]
- [1] 分别在输入 0 和 1 上转换为 [10] 和 [0]
- [01] 分别在输入 0 和 1 上转换为 [010] 和 [0]
- [10] 转换为 [010] ob 输入 0 或 1
- [010] 总是转换到自身
您现在对您的语言有一个最低限度的 DFA,以及这种最低限度的证明。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。