Skip to content

确定性有限自动机

Deterministic finite automaton · DFA

以有限状态和总转移函数为每个输入字规定唯一运行的识别模型。

条目类型
模型

形式陈述

有限状态自动机的共同骨架上,确定性有限自动机(DFA)是五元组

M=(Q,Σ,δ,q0,F),

其中 Q 是有限状态集,Σ 是输入字母表,q0Q 是初态,FQ 是接受状态集,转移是总函数

δ:Q×ΣQ.

“总”表示每个 (q,a) 都有下一状态;“函数”表示这个下一状态唯一。把转移扩张到整个字:

δ(q,ε)=q,δ(q,wa)=δ(δ(q,w),a).

于是 w 的唯一运行终点是 δ(q0,w),自动机识别的语言为

L(M)={wΣ:δ(q0,w)F}.

从关系模型看,DFA 是NFA的语法特例:每个后继集合都是单元素集。两者在有限字上的表达能力相同,但“特例”描述表示语法,“等价”描述可识别语言类;这两个层次不能混成一句“它们完全一样”。

直觉

DFA 的当前状态是已读前缀的充分摘要。若两个前缀把机器带到同一状态,那么以后接上任何相同后缀,它们都将经过相同的剩余运行并作出相同决定。设计状态时,应直接判断哪些前缀对所有未来都能安全地视为同一种情况;圆的数量只是这项判断的结果。

总转移让每个输入都有完整运行。实现中省略的边通常只是排版简写,数学上应指向一个拒绝死状态;否则交换接受态与拒绝态时,原先“没有下一步”的输入会无处可去,补集构造便失效。死状态把所有无法恢复的失败历史压缩成同一摘要,属于语言语义的一部分。

DFA 可以一遍扫描输入,运行时间为 Θ(|w|),额外控制记忆只需记录当前状态。这里没有声称状态表很小:一个语言可能正则,却需要指数多的显式状态。有限状态限制表达能力,状态复杂度衡量同一限制下表示究竟有多昂贵。

例子与边界

HTTP 头部以字节模式 \r\n\r\n 结束。识别“输入中已经出现该分隔符”的 DFA 可用 q0,,q4;在尚未匹配成功时,qk 表示当前前缀的最长后缀恰是模式长度为 k 的前缀,q4 表示已经见过完整分隔符并保持接受。

例如读到 \r\n\r 时位于 q3。若下一个字节是 \n,进入 q4;若又是 \r,不能简单清零,因为这个新字节本身仍可能是下一次匹配的开头,应退到 q1。这条“最长仍可延续后缀”不变量同时规定了所有失败转移,也是 KMP 类模式自动机不会漏掉重叠匹配的原因。

正确性可按前缀长度归纳。初始空前缀的最长匹配长度为零;每读一个字节,转移表把旧候选后缀与新字节拼接,再保留最长的模式前缀。因而到达 q4 当且仅当某个已读前缀以完整分隔符结束;把 q4 设为接受自环后,最终接受恰好等价于整个输入曾包含该模式。

读取 0 时留在原状态,读取 1 时切换状态;双圆是接受态。

图中的奇偶 DFA 展示另一类摘要:状态只记 1 的计数模 2,而不是精确计数。它能处理任意长输入,因为未来只会关心奇偶两种余数。语言 {0n1n:n0} 则要求在后半段取回任意大的 n;任何固定状态集都会混淆两个不同前导计数,因此不可能由 DFA 识别。

推论与应用

DFA 的唯一运行使补集、乘积构造、等价检查和最小化尤其直接。两个 DFA 可同步运行在状态对上;搜索一个“恰有一侧接受”的可达状态,就能找到区分两种语言的见证字,若不存在则语言相等。

虽然 DFA 在语法上限制更严,子集构造证明它与 NFA 在表达能力上等价;代价是一个 n 状态 NFA 的等价 DFA 最坏可能需要 2n 个状态。自动机最小化随后删除不可达状态,并把未来行为完全相同的状态合并成唯一的最小表示。

词法分析器、网络字节扫描器和有限事件监控常直接执行 DFA:每个输入只做一次表查找,运行路径可复现,也没有回溯爆炸。若确定化状态过多,则可以保留 NFA 或按需生成实际到达的子集;这是表示策略的折中,不是更换语言语义。

参考资料
  • Michael Sipser, Introduction to the Theory of Computation, 3rd ed., Cengage, 2013, §§1.1–1.2.
  • John E. Hopcroft, Rajeev Motwani, and Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, 3rd ed., Pearson, 2006, Chapter 2.
关系图谱16 个相邻概念 · 4 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
分类位置

上位 / 更一般

下位 / 直接特例

暂未标注直接特例。

类型化关系

被这些条目使用

限定层次等价