后缀数组(SA)总结 这个东西鸽了好久了,今天补一下 概念 后缀数组\(SA\)是什么东西? 它是记录一个字符串每个后缀的字典序的数组 \(sa[i]\):表示排名为\(i\)的后缀是哪一个。 \(rnk[i]\):可以理解为\(SA\)数组的逆,记录后缀\(i\)的排名是多少 ...
前言 后缀数组还是很难理解的,所以直接背个板子就好了。 Anson语录 定义 为了下面方便,给出一些定义: 方法 由于DC 太复杂了,所以这里只介绍倍增法: 这样你就可以求出SA的一些必要的数组 希望大家可以直接背模板 应用 Problem 有一个字符串s,求它的子串中至少出现过两次的最长的子串。 Solution 考虑height的定义:两个rank值相近的字符串的prefix,那么很显然这样子 ...
2018-12-20 16:39 3 814 推荐指数:
后缀数组(SA)总结 这个东西鸽了好久了,今天补一下 概念 后缀数组\(SA\)是什么东西? 它是记录一个字符串每个后缀的字典序的数组 \(sa[i]\):表示排名为\(i\)的后缀是哪一个。 \(rnk[i]\):可以理解为\(SA\)数组的逆,记录后缀\(i\)的排名是多少 ...
%%%mikufun他太巨了 你们快去%他啊 SA?我不会啊 这个专题其实有两道题是好久以前做的了,当时的理解非常不深刻,做题也就是各种扔结论。 而被叫去讲了一节课,这回大约是理解一些了 ...
T1:Sandy的卡片 做这道题时对$height[]$理解不深刻,导致一晚上没$A$掉这道题 显然是把差值当成字符数组,把串连起来处理出$height[]$ 之后二分,开一个栈记录存储出现的元素,只要元素个数大于等于$n$即可判断合法 T2:喵星球上的点名 ...
后缀树: 字符串匹配算法一般都分为两个步骤,一预处理,二匹配。 KMP和AC自动机都是对模式串进行预处理,后缀树和后缀数组则是对文本串进行预处理。 后缀树的性质: 存储所有 n(n-1)/2 个后缀需要 O(n) 的空间,n 为的文本(Text)的长度; 构建后缀树需要 O(dn ...
后缀数组是解决一系列字符串题目的利器,后缀数组中保留了这样的信息。sa[i]表示排名为第 i 位的后缀是从sa[i]开始的。通过倍增算法可以在O(nlogn)的时间复杂度内将所有的后缀进行排序。而height数组也是在处理问题中经常要使用到的,height[i]表示排名第 i 的后缀与排名第 ...
什么是后缀数组 后缀树(Suffix tree)是一种数据结构,能快速解决很多关于字符串的问题,缺点是算法复杂难懂且容易出错。 而后缀数组、后缀自动机、后缀仙人掌都是后缀树的替代品。 后缀数组 Suffix Array 是一个一维数组,它将字符串S的n个后缀从小到大排序后把排好序的后缀的开头 ...
在定义后缀树(Suffix Tree)时,我们给出了一段简洁的描述: A suffix tree is a compressed trie for all the suffixes of a text. 后缀数组(Suffix Array)的定义也同样简洁: A suffix ...
前言 后缀数组这个东西早就有所耳闻,但由于很难,学了好几遍都没学会。 最近花了挺长一段时间去研究了一下,总算是勉强学会了用倍增法来实现后缀排序(据说还有一种更快的\(DC3\)法,但是要难得多)。 数组定义 首先,为方便起见,我们用后缀\(_i\)表示从下标\(i\)开始的后缀。(相信 ...