有限状态机gydF4y2Ba
一个gydF4y2Ba有限状态机gydF4y2Ba(有时称为有限状态自动机)是一种计算模型,可以用硬件或软件实现,并可用于模拟gydF4y2Ba时序逻辑gydF4y2Ba和一些电脑程序。有限状态自动机生成gydF4y2Ba常规的语言gydF4y2Ba.有限状态机可以用于许多领域的问题建模,包括数学、人工智能、游戏和语言学。gydF4y2Ba
在一个系统中,特定的输入导致特定的状态变化,可以用有限状态机来表示。这个例子描述了旋转门的各种状态。在旋转门中插入一枚硬币将打开它,在旋转门被推动后,它再次锁定。将硬币插入未上锁的旋转栅门或推入已上锁的旋转栅门不会改变其状态。gydF4y2Ba
内容gydF4y2Ba
有限状态机gydF4y2Ba
有限状态机有两种类型:确定性有限状态机(通常称为确定性有限自动机)和非确定性有限状态机(通常称为非确定性有限自动机)。状态机的可视化表示方式略有不同,但它们背后的思想源于相同的计算思想。根据定义,确定性有限自动机可以识别或接受,gydF4y2Ba常规的语言gydF4y2Ba,如果确定性有限自动机接受一种语言,那么它就是规则语言。FSMs通常使用由遵循特定模式的二进制字符串组成的语言来教授。正则语言和非正则语言都可以由二进制字符串组成。二进制字符串语言的一个例子是:所有以0作为第一个字符的字符串的语言。在这种语言中,001、010、0和01111是有效的字符串(以及许多其他字符串),但是像111、10000、1和11001100(以及许多其他字符串)这样的字符串不在这种语言中。gydF4y2Ba
你可以步行穿过有限状态机图看到机器会产生什么样的字符串,或者你可以喂它一个给定的输入字符串并验证是否存在一组转换可以让字符串(结束处于接受状态)。gydF4y2Ba
正式的定义gydF4y2Ba
确定性有限自动机gydF4y2Ba
确定性有限自动机(DFA)用五元描述gydF4y2Ba元组gydF4y2Ba:gydF4y2Ba .gydF4y2Ba
一个有限的状态集gydF4y2Ba
一个有限的,非空的输入字母gydF4y2Ba
一系列的转移函数gydF4y2Ba
=起始状态gydF4y2Ba
=接受状态的集合gydF4y2Ba
中的每个输入符号必须有一个精确的转换函数gydF4y2Ba 从每个国家。gydF4y2Ba
dfa可以用以下图表表示:gydF4y2Ba
写出上面所示的DFA的描述。用语言描述它的功能。gydF4y2Ba
下表描述了gydF4y2Ba :gydF4y2Ba
当前状态gydF4y2Ba 输入符号gydF4y2Ba 新状态gydF4y2Ba 1gydF4y2Ba 0gydF4y2Ba 1gydF4y2Ba 0gydF4y2Ba
这个DFA识别所有具有偶数个0的字符串(和任意一个1的字符串)。这意味着如果您运行任何具有偶数个0的输入字符串,该字符串将以接受状态结束。如果运行一个奇数个0的字符串,该字符串将以in结束gydF4y2Ba ,这不是一种接受状态。gydF4y2Ba
以下是一个DFA图表,描述了电子游戏中的角色所能做的一些简单动作:站立、奔跑和跳跃。玩家可以使用“上”、“a”或不按任何按钮来控制这个角色。gydF4y2Ba
使用上述电子游戏角色的状态图,描述玩家如何控制角色从站立到奔跑再到跳跃。gydF4y2Ba
在站立状态下,玩家可以不按任何按钮,保持站立状态,然后,要转换到运行状态,用户必须按“上”键。在运行状态下,用户可以按“上”键继续让角色运行,然后切换到跳跃状态,用户必须按“a”键。gydF4y2Ba
为识别以下语言的DFA绘制一个图表:所有以1结尾的字符串的语言。gydF4y2Ba
非确定性有限自动机gydF4y2Ba
类似于DFAgydF4y2Ba非确定性有限自动机gydF4y2Ba(NDFA或NFA)由五个元素描述gydF4y2Ba元组gydF4y2Ba:gydF4y2Ba .gydF4y2Ba
一个有限的状态集gydF4y2Ba
一个有限的,非空的输入字母gydF4y2Ba
一系列的转移函数gydF4y2Ba
=起始状态gydF4y2Ba
=接受状态的集合gydF4y2Ba
与dfa不同,ndf是gydF4y2Ba不gydF4y2Ba中的每个符号都需要有转换函数gydF4y2Ba ,对于同一符号,可以有多个处于同一状态的转换函数。此外,NDFAs可以使用空转换,由gydF4y2Ba .空转换允许机器在不读取符号的情况下从一个状态跳转到另一个状态。gydF4y2Ba
NDFA接受一个字符串gydF4y2Ba 如果存在与该字符串兼容的以接受状态结束的路径。gydF4y2Ba
NDFAs可以用以下图表表示:gydF4y2Ba
源gydF4y2Ba[1]gydF4y2Ba
描述上述NDFA所识别的语言。gydF4y2Ba
上面的NDFA识别以“10”结尾的字符串和以“01”结尾的字符串。gydF4y2Ba
状态gydF4y2Ba 是开始状态,然后从那里,我们可以创建一个字符串,有任意顺序的1和0,然后转换到状态gydF4y2Ba 或状态gydF4y2Ba ,或者我们可以立即转到州政府gydF4y2Ba 或状态gydF4y2Ba .在任何情况下,NDFA只接受到达状态的字符串gydF4y2Ba 或状态gydF4y2Ba .以达到状态gydF4y2Ba 或状态gydF4y2Ba ,字符串必须以" 01 "结尾(对于stategydF4y2Ba )或“10”(表示状态gydF4y2Ba ).gydF4y2Ba
例如,下面的字符串都可以被这个NDFA识别。gydF4y2Ba
- 00000000010gydF4y2Ba
- 10gydF4y2Ba
- 01gydF4y2Ba
- 1111101gydF4y2Ba
为NDFA绘制一个描述以下语言的图表:所有以1结尾的字符串的语言。gydF4y2Ba
谚语gydF4y2Ba
有人可能认为ndfa可以解决dfa无法解决的问题,但dfa和ndfa一样强大。然而,与NDFA相比,DFA将需要更多的状态和转换来解决相同的问题。要了解这一点,请查看下面证明中的示例。gydF4y2Ba
证明草图gydF4y2Ba
NDFAs等同于dfagydF4y2Ba
要将DFA转换为NDFA,只需定义一个具有与DFA相同的状态、接受状态、转换和字母符号的NDFA。本质上,NDFA“忽略”它的不确定性,因为它不使用空转换,并且在每个状态中每个符号都有一个精确的转换。gydF4y2Ba
dfa相当于ndfgydF4y2Ba
如果NDFA使用gydF4y2Ba 州,一个DFA将需要达到gydF4y2Ba 以解决同样的问题。要将NDFA转换为DFA,请使用powerset构造。例如,如果一个NDFA有3个状态,相应的DFA将有以下状态集:gydF4y2Ba .状态集中的每个元素表示DFA中的一个状态。我们可以确定集合中每个元素在这些状态之间的转换函数。gydF4y2Ba
源gydF4y2Ba[1]gydF4y2Ba
例如,在DFA,状态中gydF4y2Ba 去gydF4y2Ba 在输入0,因为在NDFA上面,状态gydF4y2Ba 进入两种状态gydF4y2Ba 和国家gydF4y2Ba .对DFA集合中的其余状态重复此过程。gydF4y2Ba
由于dfa等价于NDFA,因此当且仅当NDFA能识别一种语言时,它就是规则语言。gydF4y2Ba
通过一些额外的证明,人们可以证明ndf和dfa等价于gydF4y2Ba正则表达式gydF4y2Ba.gydF4y2Ba
属性gydF4y2Ba
根据定义,当且仅当有识别该语言的DFA时,该语言是规则的。由于dfa等价于NDFA,因此当且仅当有NDFA识别一种语言时,该语言才是规则的。因此,dfa和ndf承认所有gydF4y2Ba常规的语言gydF4y2Ba.gydF4y2Ba
有限状态机的一个限制是它们只能识别常规语言。常规语言只构成可能语言的一小部分,而且是有限的。看到gydF4y2Ba上下文无关文法gydF4y2Ba和gydF4y2Ba图灵机gydF4y2Ba.gydF4y2Ba
参考文献gydF4y2Ba
- 阿隆森。gydF4y2Ba6.045自动机、可计算性和复杂性:第3讲,2011年春季gydF4y2Ba.检索于2016年4月1日gydF4y2Bahttp://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-045j-automata-computability-and-complexity-spring-2011gydF4y2Ba