有人可以向我解释一下后缀自动机究竟是什么,以及它是如何工作的,与后缀树和后缀数组不同?我已经尝试在网上搜索,但未能找到任何明确的全面解释。
我发现以下链接最接近我想要的但是用俄语翻译并且很难理解英语翻译。
答案 0 :(得分:4)
后缀自动机是一种有限状态机,可识别字符串的所有后缀。您可以阅读有限状态机上的大量资源,Wikipedia是一个良好的开端。
后缀树和后缀数组是包含字符串所有后缀的数据结构。有多种算法可以构建并对这些结构采取行动,以便在字符串上有效地执行操作。
答案 1 :(得分:3)
后缀机器:
后缀机器(或单词的有向无环图)是一个强大的 数据结构,允许解决许多字符串问题。
例如,使用机器的后缀,您可以搜索所有内容 将一个字符串出现在另一个字符串中,或计算其数量 给定字符串的不同子串 - 它可以解决的任务 线性时间。
在直观的层面上,后缀自动机可以理解为简洁 有关给定字符串的所有子字符串的信息。令人印象深刻 事实是后缀自动机包含所有这些信息 一个简洁的形式,对于一个长度为n的字符串,它只需要一个O(n) 记忆。此外,它也可以随着时间O(n)建立(如果我们考虑 字母k的大小常数;否则,在O(n log k)期间。
历史,机器的第一个线性尺寸后缀是在1983年Blumer和其他人开放的,并且在1985年 - 1986年他被提出了 第一个算法建立在线性时间(Crochemore,Blumer和 其他)。有关更多详细信息,请参阅本文末尾的参考资料。
在英语中称为“后缀自动机”的后缀机器(复数形式) - “后缀自动机”),以及“有向无环字图(或简称为”DAWG“)字的有向无环图。
后缀自动机的定义:
定义。给定字符串s的后缀自动机称为a 接受所有后缀的最小确定性有限自动机 字符串s。
我们将解释这个定义。
- 后缀自动机是一种有向无环图,其中顶点称为状态,图形的弧是之间的过渡 这些国家。
- 其中一个状态t_0称为初始状态,它必须是图形的原点(即所有其他状态都可以实现)。
- 自动机中的每个过渡都用一些符号标记。源自任何州的所有过渡都必须有所不同 标签。 (另一方面,可能不是任何过渡 字符)。
- 标记为终端状态的一个或多个条件。如果我们从最初的状态t_0进入任何终端状态,让我们来 写下这个标签遍历的所有弧,你得到一个字符串,必须是
字符串s的后缀之一。- 后缀自动机包含满足上述条件的所有机器中的最小顶点数。 (最低
由于条件,因此不需要转换次数 机器中国家数量的最小化可能不是“额外”的 方式 - 否则会打破以前的财产。)
后缀自动机的基本属性:
后缀自动机最简单但最重要的属性 是它包含有关字符串的所有子串的信息 秒。即,如果我们写出来的话,从初始状态t_0开始的任何路径 沿着这条路径的弧的标签,必然是a的子串 字符串。相反,字符串s的任何子字符串对应于 一些路径从初始状态t_0开始。
为了简化说明,我们会说一个子串 对应于从初始状态开始的路径,沿着它的标签 形成子串。相反,我们会说任何路径都对应 到由弧形标记形成的一行。
在每个状态机中,后缀是从最初的一个或多个路径 州。假设状态对应于那组字符串 匹配所有这些方式。
<强>实施例强>