【学习笔记】后缀自动机
这玩意是个科技。那么我们首先需要直观的了解它的结构。
通俗的讲,后缀自动机是将后缀字典树进行压缩后的结果。可以发现,后缀自动机能够不重不漏地接受 S S S的所有子串。(结合 D F A DFA DFA的知识不难理解)
1.1 1.1 1.1 将后缀字典树上 Right \text{Right} Right集合相同的节点合并,称得到的 D F A DFA DFA为后缀自动机。
1.2 1.2 1.2 对于 S S S的任意两个子串 x , y x,y x,y,以下两者至少有一者成立:
Right ( x ) ∩ Right ( y ) = ∅ \text{Right}(x)\cap \text{Right}(y)=\empty Right(x)∩Right(y)=∅
Right(x) ⊆ Right(y) \text{Right(x)}\subseteq \text{Right(y)} Right(x)⊆Right(y) 或 Right(y) ⊆ Right(x) \text{Right(y)}\subseteq \text{Right(x)} Right(y)⊆Right(x)
这个限制看着非常亲切啊,这意味着我们可以把 Right ( x ) \text{Right}(x) Right(x)划分成树的结构,因此后缀自动机的节点个数在 O ( ∣ S ∣ ) O(|S|) O(∣S∣)级别。
1.3 1.3 1.3 后缀自动机的构造(结合上述观察,不难理解其流程,这里略去)
最后,这玩意有一些高妙的应用,可能还会套上一些比较复杂的数据结构,因此先咕了。
举个例子,我们要求状态 i i i对应的集合 S i S_i Si(右端点集合),那么我们应该把树结构提取出来,数子树内终止节点的数目即可。
这样说可能非常抽象,不过事实上通过 
      
       
        
         
         
           S 
          
         
           i 
          
         
        
       
         S_i 
        
       
     Si的包含关系在树结构上的体现还是不难理解的

 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号