OI 中所说的「自动机」一般都指「确定有限状态自动机」。
自动机是 OI、计算机科学中被广泛使用的一个数学模型,其思想在许多字符串算法中都有涉及,因此推荐在学习一些字符串算法(KMP、AC 自动机、SAM)前先完成自动机的学习。学习自动机有助于理解上述算法。
OI 中常用的自动机
字典树
字典树 是大部分 OIer 接触到的第一个自动机,接受且仅接受指定的字符串集合中的元素。
转移函数就是 Trie 上的边,接受状态是将每个字符串插入到 Trie 时到达的那个状态。
KMP 自动机
KMP 算法 可以视作自动机,基于字符串 的 KMP 自动机接受且仅接受以
为后缀的字符串,其接受状态为
。
转移函数:
AC 自动机
AC 自动机 接受且仅接受以指定的字符串集合中的某个元素为后缀的字符串。也就是 Trie + KMP。