有限状态机gydF4y2Ba
一个gydF4y2Ba有限状态机gydF4y2Ba(有时被称为有限状态自动机)是一种可以用硬件或软件实现的计算模型,可以用来进行模拟gydF4y2Ba时序逻辑gydF4y2Ba还有一些电脑程序。有限状态自动机生成gydF4y2Ba常规的语言gydF4y2Ba.有限状态机可以用于许多领域的建模问题,包括数学、人工智能、游戏和语言学。gydF4y2Ba
一个特定输入导致特定状态变化的系统可以用有限状态机表示。这个例子描述了旋转门的各种状态。将硬币投入旋转门就可以打开它,在推动旋转门后,它会再次锁定。将硬币投入未上锁的旋转门,或推入上锁的旋转门都不会改变旋转门的状态。gydF4y2Ba
内容gydF4y2Ba
有限状态机gydF4y2Ba
有两种有限状态机:确定性有限状态机,通常称为确定性有限自动机,和非确定性有限状态机,通常称为非确定性有限自动机。状态机的可视化表示方式有细微的变化,但它们背后的思想来源于相同的计算思想。根据定义,确定性有限自动机识别或接受,gydF4y2Ba常规的语言gydF4y2Ba,如果确定性有限自动机接受一种语言,那么该语言就是规则的。fsm通常使用由遵循特定模式的二进制字符串组成的语言进行教学。正则和非正则语言都可以由二进制字符串构成。二进制字符串语言的一个例子是:所有以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图表,描述了电子游戏中的角色可以做的一些简单的动作:站立,奔跑和跳跃。玩家可以用来控制这个特定角色的按钮是“Up”、“a”,或者玩家可以不按任何按钮。gydF4y2Ba
使用上述电子游戏角色的状态图,描述玩家如何控制角色从站立到奔跑再到跳跃。gydF4y2Ba
在站立状态下,玩家可以不按任何键而保持站立状态,然后,为了过渡到奔跑状态,用户必须按“向上”按钮。在奔跑状态下,用户可以通过按“上”键继续让角色奔跑,然后切换到跳跃状态,用户必须按“a”键。gydF4y2Ba
为识别以下语言的DFA画一个图:所有以1结尾的字符串的语言。gydF4y2Ba
非确定性有限自动机gydF4y2Ba
类似于DFA, agydF4y2Ba非确定性有限自动机gydF4y2Ba(NDFA或NFA)是由五元素描述的gydF4y2Ba元组gydF4y2Ba:gydF4y2Ba .gydF4y2Ba
有限的一组状态gydF4y2Ba
有限的、非空的输入字母gydF4y2Ba
=一系列转换函数gydF4y2Ba
=起始状态gydF4y2Ba
=接受状态集gydF4y2Ba
与dfa不同,ndfa是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”结尾(表示状态gydF4y2Ba )或“10”(代表州gydF4y2Ba ).gydF4y2Ba
例如,以下字符串都可以被这个NDFA识别。gydF4y2Ba
- 00000000010gydF4y2Ba
- 10gydF4y2Ba
- 01gydF4y2Ba
- 1111101gydF4y2Ba
为NDFA画一个描述以下语言的图表:以1结尾的所有字符串的语言。gydF4y2Ba
谚语gydF4y2Ba
有人可能认为ndfa可以解决dfa不能解决的问题,但dfa和ndfa一样强大。然而,DFA需要比NDFA更多的状态和转换来解决相同的问题。要了解这一点,请检查下面证明中的示例。gydF4y2Ba
证明草图gydF4y2Ba
ndfa等同于dfagydF4y2Ba
要将DFA转换为NDFA,只需定义一个具有所有相同状态、接受状态、过渡和字母符号作为DFA的NDFA。本质上,NDFA“忽略”了它的不确定性,因为它不使用空过渡,并且在每个状态下每个符号都只有一个过渡。gydF4y2Ba
dfa等同于ndfagydF4y2Ba
如果NDFA使用gydF4y2Ba 在美国,DFA要求达到gydF4y2Ba 为了解决同样的问题。要将NDFA转换为DFA,请使用功率集结构。例如,如果一个NDFA有3个状态,对应的DFA将有以下状态设置:gydF4y2Ba .状态集中的每个元素表示DFA中的一个状态。我们可以为集合中的每个元素确定这些状态之间的转换函数。gydF4y2Ba
源gydF4y2Ba[1]gydF4y2Ba
例如,在DFA中,状态gydF4y2Ba 去gydF4y2Ba 在输入0上,因为在上面的NDFA中,状态gydF4y2Ba 进入两种状态gydF4y2Ba 和国家gydF4y2Ba .对于DFA集合中的其余状态重复此过程。gydF4y2Ba
由于dfa等价于NDFA,因此当且仅当一门语言被NDFA识别时,它就是规则语言。gydF4y2Ba
通过一些额外的证明,可以证明ndfa和dfa等价于gydF4y2Ba正则表达式gydF4y2Ba.gydF4y2Ba
属性gydF4y2Ba
根据定义,一种语言是规则的,当且仅当有一个DFA可以识别它。由于dfa等价于NDFA,因此当且仅当有NDFA识别该语言时,可以推断该语言是规则语言。因此,dfa和ndfa识别所有gydF4y2Ba常规的语言gydF4y2Ba.gydF4y2Ba
有限状态机的一个限制是它们只能识别规则语言。常规语言只占可能语言的一小部分,有限的一部分。看到gydF4y2Ba上下文无关文法gydF4y2Ba而且gydF4y2Ba图灵机gydF4y2Ba.gydF4y2Ba
参考文献gydF4y2Ba
- 阿隆森。gydF4y2Ba6.045J自动机,可计算性和复杂性:第3讲,2011年春季gydF4y2Ba.检索自2016年4月1日gydF4y2Bahttp://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-045j-automata-computability-and-complexity-spring-2011gydF4y2Ba