确定性有限状态自动机 DFA DFA Definition DFA 是一个五元组 (Q,Σ,δ,q0,F)(Q,\Sigma, \delta,q_0,F)(Q,Σ,δ,q0,F): 有限状态集合 QQQ. 如果把 DFA 看作一张有向图,那么 QQQ 中的每一个状态可以看作是节点. 字符集 Σ\SigmaΣ DFA 只能接受字符集中的字符输入. 转移函数 δ:Q×Σ↦Q\delta:Q\times \Sigma\mapsto Qδ:Q×Σ↦Q 类似于有向图中的有向边. 起始状态 q0q_0q0 接受状态集合 FFF. 表示哪些状态是可以接受的. 满足 F⊆QF\subseteq QF⊆Q 模板代码 模板代码 12345678910111213struct DFA { int m; // 字符集大小 int n; // 状态数量 int q0; // 初始状态 std::vector<std::vector<int>> trans; // 状态转移 std::vector<int> acc; // 接受状态 DFA(int m, int n = 0, int q0 = 0): m{m}, n{n}, q0{q0}, trans(m, std::vector<int>(n)), acc(n) {} // 使用 Hopcroft 算法返回的自动机最小化. DFA minimize() const;}; 字符串 动态规划