Skip to content

Brzozowski 导数

Brzozowski derivative

语言或正则表达式对首字符的剩余,表示读入给定前缀后仍可接受的后缀集合。

形式陈述

语言 LΣ 对字母 a 的左导数定义为 a1L={w:awL},对字 u 迭代得到 u1L。正则表达式导数满足 Da(R+S)=Da(R)+Da(S)Da(RS)=Da(R)S+ν(R)Da(S)Da(R)=Da(R)R,其中 ν(R) 表示 εL(R)。关键判据是 wL(R) 当且仅当 εL(Dw(R))

直觉

导数把已经读掉的前缀从语言中“剥离”,剩下的表达式精确描述为了最终接受还允许读什么。不同前缀若产生同一剩余语言,就对应同一个 DFA 状态。

例子与边界

R=(ab)Da(R)=b(ab),再对 b 求导回到 (ab)。对表达式做代数化简后,可达的不同导数只有有限多个,从而直接构造 DFA。若不做等价化简,语法上不同但语言等价的导数可能无限膨胀;“有限”指正则语言的不同左商有限,不保证朴素表达式表示自动保持小规模。

推论与应用

导数提供正则表达式匹配、等价检查和 DFA 构造的统一方法,尤其适合函数式实现、符号字母表和按需生成状态的匹配器。

参考资料
  • Janusz A. Brzozowski, Derivatives of Regular Expressions, Journal of the ACM 11(4), 1964,pp. 481–494。
  • John E. Hopcroft, Rajeev Motwani, and Jeffrey D. Ullman, Introduction to Automata Theory, Languages, and Computation, 3rd ed., Pearson, 2006,Chs. 1–9。