src:
维基百科,自由的百科全书
跳转到: 导航, 搜索
在计算理论中,确定有限状态自动机或确定有限自动机(英:deterministic finite automaton;简称:DFA)是一个能实现状态转移的自动机。对于一个给定的属于该自动机的状态和一个属于该自动机字母表Σ的字符,它都能根据事先给定的转移函数转移到下一个状态(这个状态有可能就是先前那个状态)。
[编辑] 基础概念
[编辑] 定义
确定有限状态自动机
是由
- 一个非空有限状态的集合 Q
- 一个输入字母表 Σ(非空有限字符的集合)
- 一个转移函数
(例如:
) - 一个开始状态
![clip_image004 clip_image004](http://www.cppblog.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/13cf3bf6aa5e_1019F/clip_image004_thumb_1.gif)
- 一个接受状态的集合
![clip_image005 clip_image005](http://www.cppblog.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/13cf3bf6aa5e_1019F/clip_image005_thumb_1.gif)
所组成的5-元组。因此一个DFA可以写成这样的形式:
。
[编辑] 非正式的语义
确定有限状态自动机一个字符接一个字符的读入一个字符串
,并根据给定的转移函数一步一步的转移至下一个状态。在读完该字符串后,如果该自动机停在一个属于F的接受状态,那么它就接受该字符串,反之则拒绝该字符串。
[编辑] 扩展转移函数
为了能够对DFA的命题进行证明,需要一个数学上的正式的语义定义。
为此我们定义一个扩展的转移函数
。
是自动机从状态q顺序读入字符串w后达到的那个状态 - 扩展转移函数递归的定义为:
[编辑] 正式的语义
对于一个确定有限状态自动机
,如果
,我们就说该自动机接受字符串w,反之则表明该自动机拒绝字符串w。
被一个确定有限自动机接受的语言(或者叫“被识别的语言”)定义为:
接受字符串
,也就是由所有被接受的字符串组成的集合。
[编辑] 利弊
DFA 是最实际的计算模型,因为有平凡的线性时间、恒定空间的在线算法模拟在输入流上的 DFA。给定两个 DFA 有有效算法找到识别它们所识别语言的并集、交集和补集 DFA。还有有效算法确定一个 DFA 是否接受任何字符串,一个 DFA 是否接受所有字符串,两个 DFA 是否识别同样的语言,和对特定正则语言找到有极小数目个状态的 DFA。
在另一方面,DFA 在可识别的语言上有严格的限制 — 很多简单的语言,包括需要多于恒定空间来解决的任何问题,不能被 DFA 识别。经典的 DFA 不能识别的简单语言的例子是括号语言,就是由正确配对的括号组成的语言,比如 (()())。由形如 anbn 的字符串组成的语言,就是有限数目个 a,随后是相等数目个 b。可以证明没有 DFA 有足够状态来识别这种语言。
[编辑] 其它
1. 能被确定有限状态自动机识别的语言是正则语言。
2. 确定有限状态自动机是非确定有限状态自动机的一种极限形式。
3. 确定有限状态自动机在计算能力上等价于非确定有限状态自动机。
4. 没有接受状态列表并没有指定开始状态的确定有限状态机叫做转移系统或半自动机。
[编辑] 例子
下面是一个确定有限状态自动机的例子。
![clip_image016 clip_image016](http://www.cppblog.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/13cf3bf6aa5e_1019F/clip_image016_3e279d10-b635-48ae-9837-fec920fea30d.gif)
![clip_image017 clip_image017](http://www.cppblog.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/13cf3bf6aa5e_1019F/clip_image017_8f8eaf2b-4874-4b27-9fb2-b0a6cc25c534.gif)
的状态图
确定有限状态自动机![clip_image006 clip_image006](http://www.cppblog.com/images/cppblog_com/woaidongmao/WindowsLiveWriter/13cf3bf6aa5e_1019F/clip_image006_thumb_3.gif)
- Q = {S1,S2}
- Σ = {0,1}
- s = S1
- F = {S1}
- δ 由下面的状态转移表定义:
- 对应的转移函数为:
- δ(S1,0) = S2
- δ(S1,1) = S1
- δ(S2,0) = S1
- δ(S2,1) = S2
状态S1表示在输入的字符串中有偶数个0,而S2表示有奇数个0。在输入中1不改变自动机的状态。当读完输入的字符串的时候,状态将显示输入的字符串是否包含偶数个0。
能识别的的语言是
。用正则表达式表示为:(1 * (01 * 0) * ) * 。
[编辑] 封闭性及一些运算
[编辑] 封闭性
确定有限状态自动机的交,并,差,补,连接,替换,同态,逆同态等运算是封闭的,也就是说确定有限状态自动机通过这些运算产生的新的自动机也是确定有限状态自动机。
[编辑] 补运算
是一个DFA,那么由补运算产生的新DFA定义为:
。显然只要将
中接受的状态设为不接受的状态,同时把不接受的状态设为接受的状态就得到
。补运算的复杂度是:
。
[编辑] 交运算和并运算
有两个DFA,
和
,那么由这两个DFA创造出来的新的自动机定义为:
。其中
,
为
的开始状态,
为
的转移函数,且作如下定义:
。
1. 当
时,由上述方法得到的
就是DFA
和
的交运算,记作:
。也就是说对于读入的字符串w,当且仅当
和
同时接受w的时候
接受w。
2. 当
时,由上述方法得到的
就是DFA
和
的并运算,记作:
。也就是说对于读入的字符串w,只要
或
中至少有一个接受w,
就接受w。
交运算和并运算的复杂度都是
。
[编辑] 同态和逆同态运算
一个同态函数
可以递归的定义为:
于是则有
。(以上所述中
为空字符,
)
1.
:对于接受语言L的DFA,只要将其中代表
的边替换成一个序列
并在其中加入不属于原DFA状态的新状态,就产生了接受语言h(L)的DFA。
2.
:定义一个
都不变的新DFA,并定义新的转移函数为
,则
就是逆同态运算产生的新DFA。
此外替换运算和逆同态运算的方法近似。
[编辑] 最小自动机
[编辑] 等价类自动机
对于一个正则语言,接受该语言的等价类自动机是一个
的5-元组。其定义如下:
~L 被称为Nerode关系,是Myhill-Nerode定理的基础。简单的来说就是对于任意
,如果
,那么 x~Ly 。
[编辑] 唯一性
对于任意给定的确定有限状态自动机都能找到一个与之计算能力等价的最小确定有限状态自动机,简称最小自动机。该最小自动机中状态的数量等于能识别相同语言的等价类自动机中等价关系的数量,我们可以称最小自动机和等价类自动机“实际上”是相等的,也就是同构。非正式的说法是:对于最小自动机上的任意状态都可以通过一个同构函数变换成等价类自动机上的一个状态。
能识别一个正则语言的等价类自动机是唯一的,因此能识别该语言的最小自动机也是唯一的。
[编辑] 算法
定义一个非等价关系:
,如下步骤可以得到这个集合N:
1. 如果
,就给所有的状态对(p,q)和(q,p)打上标记
2. 重复步骤3,直到所标记的状态对没有变化为止
3. 对于未标记的状态对(p,q)和σ,如果
被标记过了就把(p,q)也标记上
4. 以上所有标记了的状态对的集合就是非等价关系N
以下是由一个任意DFA转换到一个最小DFA的步骤:
1. 把所有不能从开始状态达到的状态删除
2. 通过上述标记算法计算非等价关系N
3. 一步一步将不属于N的状态对中的两个状态合成一个状态
这样就得到了接受相同语言的最小自动机。复杂度为
。
[编辑] 参见
[编辑] 引用
- Michael Sipser, Introduction to the Theory of Computation. PWS, Boston. 1997. ISBN 0-534-94728-X. Section 1.1: Finite Automata, pp.31–47. Subsection "Decidable Problems Concerning Regular Languages" of section 4.1: Decidable Languages, pp.152–155.4.4 DFA can accept only regular language
来自“http://zh.wikipedia.org/wiki/%E7%A1%AE%E5%AE%9A%E6%9C%89%E9%99%90%E7%8A%B6%E6%80%81%E8%87%AA%E5%8A%A8%E6%9C%BA”