简单的是真简单,难的几乎到天花板。
约定一般\(n\)表示原串长度,\(\Sigma\)为字符集。
定义
字符串的一段前缀能和一段后缀完全匹配(非原串),则称这个前缀/后缀为原串的一个Border。
对任意合法\(i\),\(s_i=s_{i+p}\),则称\(p\)为原串的一个周期。\(p\mid n\)时称之整周期。
各种性质
或许叫不上定理,但很有用。
Border和周期
\(s_{1\dots p}\)为Border当且仅当\(|s|-p\)为原串的一个周期。
\(fail\)树
-
KMP的\(fail\)边连起来形成一棵树,这是显然的。这里一个前缀在\(fail\)树上对应着一个点。
-
一个前缀的所有Border在\(fail\)树对应着一条根链。两个前缀的最长公共Border就是LCA。
各种定理
不按重要程度排序。当然那几个证明\(O(\log n)\)的都挺重要的。
定理 1:
原串的最长Border和最长Border的所有Border构成了原串的所有Border。
证明显然。可以证明左包含于右并且右包含于左来证明相等。
原串的所有Border就是\(\{fail_n,fail_{fail_n},\dots\}\)。
定理 2:弱周期引理
若\(p,q\)为\(s\)的周期,且\(p+q\le n\),那么\(\gcd(p,q)\)也是\(s\)的周期。
证明用更相减损术。不妨\(p>q\),当\(i\le p\)时\(s_i=s_{i+p}=s_{i+p-q}\),当\(i\ge q\)时\(s_i=s_{i-q}=s_{i+p-q}\)。两种情况包含所有\(i\),于是\(p-q\)也是周期,于是推出\(\gcd(p,q)\)是\(s\)的周期。
还有强化版周期引理:若\(p,q\)为\(s\)的周期,且\(p+q-\gcd(p,q)\le n\),那么\(\gcd(p,q)\)也是\(s\)的周期。不会证明。
定理 3:
若\(t\)与周期\(a\),\(s\)为\(t\)的一段前缀且有周期\(b\),\(b\mid a\),\(|s|\ge a\),那么\(b\)也是\(t\)的周期。
仔细想想就挺显然的。
定理 4:
一个串用自己的前缀匹配后缀后并起来(有交的部分是一个Border),那么这个并有长度为\(|s|-|\texttt{Border}|\)的周期。
很显然。
定理 5:
如果\(2|s|\ge |t|\),那么\(s\)在\(t\)中的匹配位置必定为等差数列。
来证明。因为\(2|s|\ge |t|\),\(s\)在\(t\)中的匹配位置一定有交。不妨将\(t\)中没有被\(s\)的匹配位置覆盖到的地方去掉(肯定是首尾的位置)。
匹配次数\(\le 2\)时一定等差,于是来看匹配次数达到\(3\)的情况。不妨设前两次差为\(p\),后两次差为\(q\)。现在\(p+q+|s|=|t|\),那么\(p+q\le |s|\),于是\(r=\gcd(p,q)\)也是\(s\)的周期。
设\(s\)的最小周期为\(x\),那么一定有\(x\mid r\mid p\),否则可以用弱周期引理继续构造更小的周期。
由定理 4和定理 3可知前两次并起来也有最小周期\(x\),并且\(p=x\)否则可以有更靠前的匹配。又\(x\le r\le p\),于是\(x=r=p\)。
又\(p=r=\gcd(p,q)\),所以所有匹配的循环节都是重合的,于是\(t\)也有\(x\)的最小周期。
不难发现匹配位置必为等差序列。
定理 6:
长度\(\le \dfrac{n}{2}\)的Border的长度构成一个等差序列。
来证明。假设有最长Border长度为\(n-p\),另一个Border长度为\(n-q\),那么\(p,q\)都为周期,且\(p+q\le n\)。由弱周期引理得\(\gcd(p,q)\)为周期,于是存在一个Border的长度为\(n-\gcd(p,q)\),并且\(p\le \gcd(p,q)\)。所以\(p=\gcd(p,q)\),\(p\mid q\),这就构成等差了,公差为\(p\)。
定理 7:
一个串的所有Border按长度排序后可以划分成\(O(\log n)\)个等差序列。
首先将所有长度\(\ge \dfrac{n}{2}\)的Border划分到一个等差序列中。
考虑长度达到\(\dfrac{n}{2}\)的最短的Border\(T\)。设最小周期为\(d\),那么讨论:
-
若\(d\le \dfrac{n}{4}\),那么从最长Border不断减去\(d\)得到\(T\),此时\(|T|\le \dfrac{3}{4}n\)。
-
若\(d>\dfrac{n}{4}\),那么最长Border的长度\(\le \dfrac{3}{4}n\)。
由定理 1,可知剩下的原串的Border都是\(T\)的Border,于是问题规模缩减到了原来的\(\dfrac{3}{4}\)。所以是\(O(\log n)\)。
一个更紧的上界是\(\lceil \log_2 n\rceil\)。
从过程中可以看到公差成倍增长,于是有推论:公差\(\ge d\)的Border等差序列的总大小是\(O(\dfrac{n}{d})\)的。
Significant suffix
定义\(\texttt{minsuf}\)表示最小后缀,\(\texttt{ssuf}\)是在原串后面接上一个串后可能成为最小后缀的后缀集合。
定理 8:
对于任意两个\(\texttt{ssuf}\ U,V\),\(|U|<|V|\)时\(U\)是\(V\)的前缀。
如果\(U\)不是\(V\)的前缀,那么\(UT\)和\(VT\)的大小关系只会由\(U,V\)的大小关系决定,二者只有其一是\(\texttt{ssuf}\),矛盾。得证。
这样\(U\)还是\(V\)的Border。
定理 9:
如果有两个\(\texttt{ssuf}\)\(U\)和\(V\),满足\(|U|<|V|\),那么\(2|U|<|V|\)。
假设\(|U|<|V|<2|U|\),由定理 8知\(U\)是\(V\)的Border。于是\(V\)有长度为\(|V|-|U|\)的周期。
设周期为\(T\),\(|T|=|V|-|U|\),那么设\(U=TC\),\(V=TTC\)。
假设在原串后加上字符串\(R\),若\(UR>VR\)那么\(U\)不会是\(\texttt{minsuf}\)。若\(UR<VR\),那么\(TCR<TTCR\iff CR<TCR=UR\),注意到\(C\)也是后缀,所以\(U\)不会是\(\texttt{minsuf}\)。综上\(U\)不会是\(\texttt{ssuf}\),这与假设矛盾。得证。
推论:\(|\texttt{ssuf(s)}|=O(\log |s|)\)。
标签:le,gcd,理论,原串,Border,定理,周期 From: https://www.cnblogs.com/EmilyDavid/p/18631325