微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用于 Kleene 星操作的 DFA

如何解决用于 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?