← 有限自动机 · DFA / NFA / regex 与它们之间的转换 / DFA minimization:合并行为一样的 state 待审核 5 / 7
minimization · partition refinement

DFA minimization:合并行为一样的 state

subset construction 造出的 DFA 常有冗余:两个 state 若对任何后续输入,接受 / 拒绝的结局都完全一致,它们就是等价的,留一个就够。把所有等价的 state 各自合成一个,得到的最小 DFA 是唯一的(同构意义下)——这是有限自动机里少见的「标准答案」。

怎么找出等价的 state?用划分细化 (partition refinement),从粗到细:

  • 先分两大组:accept非 accept——一个接受空串后续、一个不接受,显然不可能等价。
  • 反复细分:看同一组里的两个 state,若存在某个字符 c,使它们读 c 后跳进了不同的组,那它们行为有别,拆开。
  • 直到没有任何组还能再拆:此时每组内部行为完全一致,每组捏成一个 state

下面给每个组一种颜色,单步看分组怎样越分越细、最后稳定下来。

1 · 合并结果:最小 DFA

每个颜色组捏成一个 state(标号 g0/g1g0 / g1 \dots),转移用组内任一代表 state 的转移即可——同组保证一致。

为什么细化一定停、且结果唯一?每一轮组数只增不减,而组数被 state 数封顶,所以必然停。停下时的划分恰好是「Myhill–Nerode 等价类」,与你从哪一步、按什么顺序拆无关——所以最小 DFA 唯一。这条性质让 DFA 能被规范化: 两个 regex 是否等价,把各自的最小 DFA 比一比同构就知道了。