字符串周期相关定理
字符串的周期其实挺难理解的,因为有些时候是“整周期”,有些时候是“不完整周期”。
以下是几个事实,希望会对理解有帮助:
1.周期与 border 的对应关系
字符串周期的定义是对任意 \(i+p\le n\),有 \(s_i=s_{i+p}\),所以周期可以不是 \(n\) 的因数,这时候周期是不完整的,相当于 \(s_1\dots s_p\) 这个子串被复制了若干遍,又拼上了一个前缀。
需要注意的是,当 \(p>\frac{n}{2}\) 的时候,周期对中间部分字符完全没限制。
这样看,\(s_1\dots s_{n-p}\) 这个前缀和 \(s_{p+1}\dots s_n\) 这个后缀完全相等,也就是说产生了一个 \(n-p\) 大小的 border。
而对于长度为 \(x\) 的 border,我们有 \(i\le x\) 时,也就是 \(i+n-x\le n\) 时,\(s_i=s_{n-x+i}\),所以也是产生了 \(n-x\) 长度的周期。
2.最小周期
不管是整周期还是不完整周期,字符串的最小周期都很有意义。
可惜的是,\(p>\frac{n}{2}\) 的时候,有些点是自由的,所以只有:字符串任意周期 \(p\) 满足 \(p_{min}\times 2\ge n\) 都是最小周期的倍数。
因为如果有 \(p>p_{min}\) 是 \(p\) 的周期且 \(p\mod p_{min}=x\ne 0\),那么任意 \(i\le n-p\) 都有 \(s_i=s_{i+p}=s_{i+x}\),同理所有 \(i>p\) 也有 \(s_i=s_{i-x}\),这样 \(i>n-p\) 的时候也有 \(s_i=s_{i+x}\) 成立了,所以 \(x\) 也是字符串的周期且 \(x<p_{min}\),矛盾。
由这个还可以得到:任何字符串的所有 border 长度构成不超过 \(\log n\) 个等差数列。
3.Fine-Wilf 定理
也就是所说的强周期引理。
定理叙述为,若 \(p,q\) 都是 A 的周期,且 \(p+q-\gcd(p,q)\le n\),那么 \(\gcd(p,q)\) 也是 A 的周期。
弱化版是 \(p+q\le n\) 就满足 \(\gcd(p,q)\) 是 A 的周期。
证明弱化版:不妨设 \(p\le q\),对于任意 \(i+q-p\le n\),如果没有 \(i<p\),那么 \(n-i\ge q\),也就是说 \(i+q\le n\)。
前者有 \(s_i=s_{i-p}=s_{i-p+q}\)
后者有 \(s_i=s_{i+q}=s_{i+q-p}\),所以说 \(q-p\) 是 A 的周期。
这样经过更相减损,\(gcd(p,q)\) 是 A 的周期。
强周期引理不会证。。。
4.循环与整周期
我们称把两个字符串 A 拼起来为 AA。
那么有:如果 \(p\) 是 A 的周期且是 AA 的周期,那么 A 是由若干串拼接而成的,即最小周期 \(p_{min}|n\)。
注意这个条件等价于 AA 存在周期 \(p\) 满足 \(p\le n\)。
由于 A 和 \(p\) 都是小于一半的 AA 的周期,故而 AA 存在最小周期 \(p_{min}|n\),同时 \(p_{min}\) 也是 A 的最小周期。
这样,我们不依赖因数就获得了“整周期”。
类似的,如果 AA 在 \(AA[i]\dots AA[i+n-1]\) 位置包含 A 做子串,其中 \(1<i\le n\),那么 A 也存在整周期。
这是因为,画出图来就能看出 \(i-1\) 和 \(n-i+1\) 都是 A 的 border,同时也都是周期,这么说 \(\gcd(i-1,n-i+1)=\gcd(i-1,n)\) 是 A 的周期。注意到这个周期是 n 的因数,那么它小于一半,也就是说存在最小周期,且最小周期也是 n 的因数。

浙公网安备 33010602011771号