简介
在之前的文章中,我们讲到了后缀树和它的一些特性。后缀树主要用来做模式匹配中,比如全文索引,寻找公共前缀等,非常的有用。同样的后缀数组和后缀树的作用非常类似,和后缀树相比,后缀数组更简单并且更加节省空间,今天我们将会详细介绍下后缀数组的特性和使用。
后缀数组的定义
后缀数组和后缀树一样都是一个单词所有后缀的集合。只不过后缀数组把所有的后缀按照字母的顺序进行排序。
我们还是举之前的BANANA的例子,我们给这个单词一个加上一个后缀 $ , 假设 $ 按字母表排序是排在最上面的。那么我们的所有后缀如下图所示:
按照字母顺序排序之后生成的后缀数组如下:
先按首字母排序,如果首字母相同则第二个,以此类推。
后缀数组的创建流程
构造后缀数组一般有两种方法:倍增算法和DC3算法。
这里我们详细的介绍一下怎么使用倍增算法来构建后缀数组。
回到我们上面提到的初始化状态和排序完成状态的两张图。
先介绍初始状态的图,图中我们定义了几个变量,分别是i,SA[i],Su