具有 4 或 5 个状态的 DFA

问题描述

有人可以为语言 A 构建只有 4 或 5 个状态的 DFA 吗? ∑={0,1},A={z 是 ∑^* | 的元素z=uvwxy 和 u,y 是 ∑^* 的元素,v,w,x 是 ∑ 的元素,vwx 至少有一个 0 元素}。我只能构建一个有 6 个状态的 DFA,但我们应该构建一个有 4 或 5 个状态的 DFA。这是我的 DFA:

DFA

解决方法

您的语言似乎具有以下属性:

  • 字符串长度至少为 3
  • 字符串至少包含一个 0

我们可以使用 Myhill-Nerode 定理证明最小 DFA 有五个以上的状态:

  1. 空字符串对应初始状态[e]
  2. 字符串 0 后面可以跟 (0+1)(0+1)(0+1)(0+1) 得到语言中的字符串,与空字符串不同细绳。调用对应的状态[0]。
  3. 字符串 1 后面可以跟 (0+1)0(0+1)(0+1) + (0+1)(0+1)0(0 +1) 获取语言中的字符串。这与 0 和空字符串都不同,因此它获得了一个新状态,称之为 [1]
  4. 字符串 00 后面可以跟 (0+1)(0+1)(0+1),同样是不同的,[00]
  5. 字符串 01 与 00 无法区分
  6. 字符串 10 与 00 和 01 无法区分
  7. 字符串 11 后面可以跟 (0+1)0(0+1),与之前的所有字符串都不同;称之为 [11]。
  8. 000 后面可以跟 (0+1)*,同样是不同的。这是区别于所有较短字符串的第 6 个字符串,这意味着您的语言的最小 DFA 必须至少具有六个状态。

相关问答

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