[英]Odd DFA for Language
有人可以帮我画一个接受这种语言的NFA吗?
{ w | the length of w is 6k + 1 for some k ≥ 0 }
我已经在这个问题上停留了几个小时。 我不知道k
在哪里起作用以及在图中如何使用...
{ w | the length of w is 6k + 1 for some k ≥ 0 }
我们可以使用Myhill-Nerode定理为该语言构造性地产生最小的DFA。 这是一个有用的练习。 首先,定义:
两个字符串
w
和x
相对于语言L
iff是无法区分的 :(1)对于每个字符串y
,使得wy
在L
,xy
在L
; (2)对于每个字符串z
,使xz
在L
,wz
在L
。
Myhill-Nerode的见解是,如果两个字符串与常规语言是无法区分的,则该语言的最小DFA将使该机器对于这两个字符串最终处于相同状态。 不可区分性是自反的,对称的和可传递的,因此我们可以在其上定义等价类。 这些等效类直接对应于最小DFA中的状态集。 现在,找到我们语言的等效类。 我们考虑长度增加的字符串,并针对每个字符串是否与之前的任何字符串都没有区别:
e
(空字符串)之前没有字符串。 我们需要一个状态q0
来对应于该字符串所属的对等类。 在e
之后到达L
的字符串的字符串集合是L
本身; 也写成c(c^6)*
c
,任何长度为1的字符串,其前都只有e
。 但是,这些并不是无法区分的。 我们可以将e
添加到c
以得到ce = c
,这是L
的字符串,但是我们不能将e
添加到e
以获取L
的字符串,因为e
不在L
。 因此,对于c
所属的等价类,我们需要一个新的状态q1
。 在c
之后到达L
的字符串的字符串集合为(c^6)*
。 q2
; 将cc
传递到L
的字符串的字符串集是ccccc(c^6)*
。 显示这个。 q3
; 将ccc
转换为L
的字符串的字符串集是cccc(c^6)*
。 显示这个。 q4
; 将cccc
转换为L
的字符串的字符串集合是ccc(c^6)*
。 显示这个。 q5
; 将ccccc
转换为L
的字符串的字符串集是cc(c^6)*
。 显示这个。 cccccc
。 什么弦将我们带到L
弦? 好吧, c
。 c
后面跟着任何长度为6的字符串也是如此。有趣的是,这与L
本身相同。 我们已经有了,一个等价类: e
还可以随后以任何字符串L
得到一个字符串L
。 cccccc
和e
是无法区分的。 此外,由于所有长度为6的字符串都无法与较短的字符串区分开,因此我们不再需要继续检查较长的字符串。 我们的DFA保证具有已经确定的状态q0
- q5
之一。 而且,我们上面所做的工作定义了我们在DFA中所需的过渡,初始状态和接受状态:
c
从状态q
为状态q'
如果x
是在对应于等价类的字符串q
和xc
是在对应于等价类的字符串q'
; e
所属的等价类对应的状态; q
接受是否有属于该语言的等价类的任何字符串(因此所有字符串)都在该语言中; 或者,如果将等价类中的字符串作为L
的字符串的一组字符串包括e
,则为空字符串。 我们可以使用上面的注释以表格形式编写DFA:
q x q'
-- -- --
q0 c q1 // e + c = c
q1 c q2 // c + c = cc
q2 c q3 // cc + c = ccc
q3 c q4 // ccc + c = cccc
q4 c q5 // cccc + c = ccccc
q5 c q0 // ccccc + c = cccccc ~ e
我们以q0
作为初始状态,唯一接受的状态是q1
。
这是一个NFA,它将向前6个状态前进,然后如果再有一个字符,它将在最终状态下停止。 否则,它将不确定地循环回到开始状态并经过最终状态。
(Start) S1 -> S2 -> S3 -> S5 -> S6 -> S7 (Final State) -> S8 - (loop forever)
^ |
^ v |_|
|________________________| (non deterministically)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.