DFA 学习笔记
确定有限状态自动机学习笔记
1 简介
自动机是一个对信号序列进行判定的数学模型。其中,信息序列是指一连串有顺序的信号,例如字符串从前到后的每一个字符,数组从 \(1\) 到 \(n\) 的每一个数。判定指的是针对某一个命题给出是真还是假的回答,例如判断字符串是否回文。
2 讲解
自动机的工作原理和地推十分相似,自动机是一张有向图,其每一个节点都是一个判定节点,自动机的节点是一个状态而非任务,自动机的边可以接受多种字符。
例如判断一个二进制数是否为偶数的自动机如下:
从起始节点开始,从高到低接受这个数的二进制序列,然后看看最终停在哪里,如果在红圈之内,那么就是偶数,否则不是。
需要注意的是自动机是一个数学模型,不是算法,也不是数据结构。
3 DFA 形式化定义
一个确定有限状态自动机 DFA 由一下五部分构成:
- 字符集 \(\sum\) ,该自动机只能输入这些字符。
- 状态集合 \(Q\) ,如果把一个 DFA 看成一张有向图,那么 DFA 中的状态就相当于图上的节点。
- 起始状态 \(start\) ,且 \(start\in Q\) ,是一个特殊的状态,起始状态一般用 \(s\) 表示。本文用 \(start\) 表示
- 接受状态集合 \(F\) ,\(F\subseteq Q\) ,是一组特殊的状态。
- 转移函数 \(\delta\) ,\(\delta\) 是一个接受两个参数返回一个值的函数,其中第一个参数和返回值都是一个状态,第二个参数是字符集中的一个字符。如果把 DFA 看做一张有向图,那么 DFA 中的转移函数就相当于与顶点之间的边,而每条边上有一个字符。
自动机的作用就是识别字符串,如果 DFA A 能够识别字符串 \(s\) ,那么有 \(A(s)=true\) ,否则 \(A(s)=false\) 。
而转移函数的定义可以扩展,那就是第二个参数可以是字符串。
4 后缀链接
在很多自动机中都有后缀链接的概念。一个状态会对应若干字符串,而某一个状态的后缀链接是在自动机上的,这些字符串的最长公共真后缀。
一般来说后缀自动机会形成一颗树,这就给我们树形 dp 创造了条件。