如何解决用于 Kleene 星操作的 DFA
对于语言 L*,DFA 具有的最高状态数是多少?是否可以在这里定义最坏的情况?
解决方法
正如 Welbog 指出的,L* 可以有任意数量的状态。但这不一定是显而易见的,因此我们不妨尝试证明一下。证明很简单:我们将描述一系列常规语言,使得第 N 种语言的 DFA 中的最小状态数等于 N。
我们的正则语言将是 {a},{aa},{aaa},...,即有限正则语言的序列由取自语言 a* 的单个非空字符串组成,按升序排列长度顺序。
语言 {a}* 的最小 DFA 有一个状态(假设字母 {a})在 a 上循环到自身。
语言 {aa}* 的最小 DFA 有两种状态:初始状态仍在接受,但我们需要一个非接受状态来接受具有多个 a 不能被 2 整除的字符串。
通常,语言 {a^n}* 的最小 DFA 有 n 个状态:初始状态仍在接受,但我们需要 n-1 个非接受状态来跟踪 |w| 的值% n。我们必须跟踪这个值,以便我们可以知道我们是否看到了一些可以被 n 整除的 a,并且在 DFA 中,跟踪到目前为止看到的 a 的数量的唯一方法是更改为 a新的独特状态。
这个建设性的证明使我们能够提供证据证明 L* 的最小 DFA 的大小没有上限:如果 m 个状态有这样的限制,我们只需指出语言 (a^ (m+1))* 必须有更大的 DFA。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。