Skip to content

DFA–NFA 等价定理

DFA–NFA equivalence · Subset construction

每个 NFA 都能以当前可能状态集为一个 DFA 状态,从而在有限字上保持语言不变。

条目类型
定理

形式陈述

每台NFA 都存在一台识别同一语言的DFA;反方向成立是因为 DFA 的唯一后继可视为 NFA 的单元素后继集合。因此两种模型在有限字上的表达能力相同。

具体地,设

N=(Q,Σ,δ,q0,F).

子集构造以 Q幂集为候选状态,得到

D=(P(Q),Σ,Δ,{q0},FD),

其中

Δ(S,a)=qSδ(q,a),FD={SQ:SF}.

真正构造时只需从 {q0} 搜索可达子集,不必预先枚举整个幂集。空集若可达就是合法死状态,因为 Δ(,a)=

证明的核心不变量是:对每个 wΣ

Δ({q0},w)=δ^({q0},w).

空字时两边都是 {q0}。若等式对 w 成立,那么读下一个符号 a 后,两边都把当前集合中每个 NFA 状态的 a-后继取并,因此对 wa 也成立。归纳完成后,DFA 的集合状态与 F 相交,恰好等价于 NFA 至少有一条接受运行。

若输入机器含 ε-边,初态改为 E({q0}),转移改为

Δ(S,a)=E(qSδ(q,a)),

同一不变量仍成立,只是集合始终保持 ε-闭合。

直觉

非确定性运行在一个时刻可能位于多个状态,确定化便把“这整组可能位置”命名为一个确定状态。每读一个符号,所有候选同时前进,重复位置自动合并。原来藏在路径分叉中的信息没有消失,而是显式搬进了集合状态。

接受集合为何采用“与 F 相交”也由此一目了然:NFA 只要求存在一条成功路径,所以活跃集合中出现任一接受态就足够。若误写成 SF,就把存在语义改成了所有活跃分支都接受。

定理只承诺存在等价表示,不承诺表示同样简洁。NFA 用一张共享图表示许多候选的组合;DFA 为每个会影响未来的组合准备独立状态。确定化把运行时维护的集合预先编译成表,换来每个字符一次确定跳转,也可能付出指数空间。

DFA–NFA 等价定理示意图
例子与边界

考虑识别“以 01 结尾”的 NFA。状态 q001 上都自环,并在读到 0 时额外前往 q1q11 到接受态 q2。它不断猜测某个 0 是倒数第二个字符。

{q0} 出发,确定化只产生三个可达子集:

A={q0},B={q0,q1},C={q0,q2}.

0ABBBCB;读 1AABCCA。只有 C 与原接受集相交。集合 B 的含义不是“机器在两个状态中随机选一个”,而是扫描背景的分支与刚猜到候选起点的分支同时活跃。

上界 2|Q| 在最坏情形不可改成多项式。对

Ln={w{0,1}:w 的倒数第 n 位为 1},

NFA 可以在读到某个 1 时猜它是目标位,再数完余下 n1 个字符;DFA 则必须区分所有长度为 n 的最近后缀,因为其中任意两个不同后缀都能通过适当续写让目标位暴露出来。于是某些 O(n) 状态 NFA 的最小等价 DFA 确需 2n 级状态。

不是每个子集都会出现,甚至指数上界常常极松。按需搜索可达子集能避免无用状态,却无法回避语言本身确有指数多种未来行为的情形。最小化也只能合并未来行为相同的可达子集,不能突破 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.
关系图谱8 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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

使用的工具

被这些条目使用