用于 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。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...