「总结」后缀3

今天听dy大神讲了一下字符串。
他讲的题都好神啊。。。
然后挑了一个做了一下就一晚上没了。

\(get\)到很多比较重要的点。
1.广义后缀自动机(大小为\(m\))上跑一个长度为\(n\)的串,所有匹配位置及在\(parent\)树上其祖先的数量的和为\(min(n^2,m)\),单次最劣是\(O(m)\)
但是如果跑多个串,总长为\(n\),可以证明所有串长相等的时候复杂度更劣,设有\(k\)个串,那么复杂度为:\(O(k(n/k)^2)\),这个时候\(k=\frac{n}{\sqrt{m}}\)最劣,是\(O(n\sqrt{m})\)
2.反串\(parent\)树就是压缩节点后缀树。
3.后缀树可以用后缀数组来利用\(dfs\)序建立。
4.\(SAM\)增量构建第三种情况就是\(endpos\)分裂和对于不同的\(len\)的分割。
5.最小表示法是一个串的循环中字典序最小的那个。
6.\(border\)不仅应用在\(kmp\)中,在后缀数据结构中也有很大的用武之地。
7.\(exkmp\)或者说\(Z-function\)算法和马拉车算法类似,都是优化暴力算法。
8.后缀自动机的\(endpos\)集合和区间一起可以直接判断子树内部的\(pos\)情况。
9.\(parent\)\(dp\)是常见套路。
10.\(parent\)\(dp\)是因为结构是树形,而不同于图上的结构难以\(dp\)
11.01串要记住不是0就是1.
12.随机数据下一堆和为\(n\)的串的长度期望为\(ln n\)
13.树上的问题转化成\(dfs\)序+离线可以用扫描线。
14.有些只能写暴力的题可以考虑用根号分治和根号重构。
15.期望题不对串作限制或者说枚举所有串的一般来说都是在枚举模式串的子串。

做了个猫咪那个题。
就是一个价值的\(parent\)\(dp\),区别是这次从上向下\(dp\),取min和max那里细节很多。
既然要求每个串出现两次,其实可以认为其中一个就是自己的后缀,因为可以证明直接跑后缀可以涵盖所有情况。
这样的话直接查询另外一个位置存不存在就可以了。
用可持久化线段树合并来做。

posted @ 2020-02-10 21:56  Lrefrain  阅读(156)  评论(0编辑  收藏  举报