“从表达式到 ε NFA 的方向按语法结构归纳。$\varnothing$、$\varepsilon$ 和单符号 $a$ 各有常数大小的基本自动机;若已经为 $R,S$ 构造机器,就用 ε 边…”
形式陈述 ​
每台NFA 都存在一台识别同一语言的DFA;反方向成立是因为 DFA 的唯一后继可视为 NFA 的单元素后继集合。因此两种模型在有限字上的表达能力相同。
具体地,设
子集构造以
其中
真正构造时只需从
证明的核心不变量是:对每个
空字时两边都是
若输入机器含 ε-边,初态改为
同一不变量仍成立,只是集合始终保持 ε-闭合。
直觉
非确定性运行在一个时刻可能位于多个状态,确定化便把“这整组可能位置”命名为一个确定状态。每读一个符号,所有候选同时前进,重复位置自动合并。原来藏在路径分叉中的信息没有消失,而是显式搬进了集合状态。
接受集合为何采用“与
定理只承诺存在等价表示,不承诺表示同样简洁。NFA 用一张共享图表示许多候选的组合;DFA 为每个会影响未来的组合准备独立状态。确定化把运行时维护的集合预先编译成表,换来每个字符一次确定跳转,也可能付出指数空间。
例子与边界
考虑识别“以 01 结尾”的 NFA。状态 0、1 上都自环,并在读到 0 时额外前往 1 到接受态 0 是倒数第二个字符。
从
读 0 时 1 时
上界
NFA 可以在读到某个 1 时猜它是目标位,再数完余下
不是每个子集都会出现,甚至指数上界常常极松。按需搜索可达子集能避免无用状态,却无法回避语言本身确有指数多种未来行为的情形。最小化也只能合并未来行为相同的可达子集,不能突破 Myhill–Nerode 给出的真实下界。
推论与应用
等价定理把 NFA 纳入正则语言的统一定义,使依赖唯一运行的补集、乘积、等价判定和最小化都能先经确定化应用。它也是Kleene 定理翻译链的中段:正则表达式先产生 ε-NFA,再由闭包子集构造得到 DFA。
工程实现可以把构造提前或延后。词法分析器生成器通常预先构造可达 DFA 子集以换取固定吞吐;内存敏感的模式匹配器可以用位集实时维护 NFA 状态;混合实现则只在运行遇到新集合时缓存对应转移。三种策略共享同一个集合不变量。
参考资料
- Michael Sipser, Introduction to the Theory of Computation, 3rd ed., Cengage, 2013, §1.2.
- John E. Hopcroft, Rajeev Motwani, and Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, 3rd ed., Pearson, 2006, §2.3.