在计算理论中,确定有限状态自动机或确定有限自动机(英语:deterministic finite automaton, DFA)是一个能实现状态转移的自动机。对于一个给定的属于该自动机的状态和一个属于该自动机字母表的字符,它都能根据事先给定的转移函数转移到下一个状态(这个状态可以是先前那个状态)。
确定有限状态自动机是由
所组成的5-元组。因此一个DFA可以写成这样的形式:。
确定有限状态自动机从起始状态开始,一个字符接一个字符地读入一个字符串(这里的指示Kleene星号算子。),并根据给定的转移函数一步一步地转移至下一个状态。在读完该字符串后,如果该自动机停在一个属于F的接受状态,那么它就接受该字符串,反之则拒绝该字符串。
为了在保证严谨的前提下,方便地叙述关于DFA的内容,我们定义如下扩展的转移函数:
对于一个确定有限状态自动机,如果,我们就说该自动机接受字符串w,反之则表明该自动机拒绝字符串w。
被一个确定有限自动机接受的语言(或者叫“被识别的语言”)定义为:接受字符串,也就是由所有被接受的字符串组成的集合。
除了数学上的严谨表述,通常为了讨论方便,也使用状态图直观地表示DFA。不难发现,对于一个给定的DFA,存在唯一一个对应的有向图(但是严格意义上一个有向图不能确定出唯一一个DFA)。有向图的每个结点对应一个状态,每条有向边对应一种转移。习惯上将结点画成两个圈表示接受状态,一个圈表示拒绝状态。用一条没有起点的边指向起始状态。
除了在表述上方便以外,在研究某些问题(如“给定的DFA的语言是否为无穷集合”)时,状态图也提供了有效的解法。
DFA是一种实际的计算模型,因为有平凡的线性时间、恒定空间的在线算法模拟在输入流上的DFA。给定两个DFA有有效算法找到识别它们所识别语言的并集、交集和补集的DFA。还有有效算法确定一个DFA是否接受任何给定字符串,一个DFA是否接受所有字符串,两个DFA是否识别同样的语言,和对特定正则语言找到状态数目最小的DFA(最小DFA)。
在另一方面,DFA在可识别的语言上有严格的限制—很多简单的语言,包括需要多于恒定空间来解决的任何问题,不能被DFA识别。经典的DFA不能识别的简单语言的例子是括号语言,就是由正确配对的括号组成的语言,比如 (()())。由形如anbn的字符串组成的语言,就是有限数目个a,随后是相等数目个b。可以证明没有DFA有足够状态来识别这种语言(通俗地说,因为需要至少2n个状态,而n是不恒定的)。
下面是一个确定有限状态自动机的例子。
确定有限状态自动机
状态表示在输入的字符串中有偶数个0,而表示有奇数个0。在输入中1不改变自动机的状态。当读完输入的字符串的时候,状态将显示输入的字符串是否包含偶数个0。
能识别的语言是。用正则表达式表示为:。
确定有限状态自动机的交,并,差,补,连接,替换,同态,逆同态等运算是封闭的,也就是说确定有限状态自动机通过这些运算产生的新的自动机也是确定有限状态自动机。
是一个DFA,那么由补运算产生的新DFA定义为:。显然只要将中接受的状态设为不接受的状态,同时把不接受的状态设为接受的状态就得到。补运算的复杂度是:。
有两个DFA,和,那么由这两个DFA创造出来的新的自动机定义为:。其中,为的开始状态,为的转移函数,且作如下定义:。
交运算和并运算的复杂度都是。
一个同态函数可以递归的定义为:
于是则有。(以上所述中为空字符,)
此外替换运算和逆同态运算的方法近似。
对于一个正则语言,接受该语言的等价类自动机是一个的5-元组。其定义如下:
~L被称为Nerode关系,是Myhill-Nerode定理的基础。简单的来说就是对于任意,如果,那么x~Ly。
对于任意给定的确定有限状态自动机都能找到一个与之计算能力等价的最小确定有限状态自动机,简称最小自动机。该最小自动机中状态的数量等于能识别相同语言的等价类自动机中等价关系的数量,我们可以称最小自动机和等价类自动机“实际上”是相等的,也就是同构。非正式的说法是:对于最小自动机上的任意状态都可以通过一个同构函数变换成等价类自动机上的一个状态。
能识别一个正则语言的等价类自动机是唯一的,因此能识别该语言的最小自动机也是唯一的。
定义一个非等价关系:,如下步骤可以得到这个集合N:
以下是由一个任意DFA转换到一个最小DFA的步骤:
这样就得到了接受相同语言的最小自动机。复杂度为。