周期引理及其证明

· · 算法·理论

引理内容:若长度为 n 的字符串 sp,q(1\le p,q\le n) 的周期,记 g=\gcd(p,q),若 p+q\le n+g,则 sg 的周期。

证明:不妨设 p\le q。首先,若 g=p,那么直接不用证了,所以不妨设 g\ne p,则有 2g\le p<q

首先,因为 p+g\le q,所以 2p+g\le p+q\le n+g,所以 2p\le n

d=q-p,有 0<g\le d

运用归纳法,假设周期引理对于所有长度 <n 的字符串成立。

\forall i\le n-q,s_i=s_{i+q}=s_{i+q-p}=s_{i+d} \forall p<i\le n-d,s_i=s_{i-p}=s_{i-p+q}=s_{i+d}

又因为 n-q+d=n-p,所以 s 的长度为 n-p 的前缀和后缀都有 d 的周期。下面尝试运用归纳假设证明 s 的长度为 n-p 的前后缀都有 g 的周期。需要满足的条件都可以被证明:

因为 g\le d,所以 \forall i\le n-qi>p,若 i+g\le n,则 s_i=s_{i+g}

现在我们离证明 sg 的周期还差 (n-q,p] 这一段。

这一段的长度为 p+q-n,小于等于 g

所以,\forall n-q<i\le p,s_i=s_{i-g},s_{i+g}=s_{i+g-p}

因为 p\ge 2g,所以 i+g-p\le i-g,所以 i-g,i+g-p\le n-q。另一方面,这两个位置的差 p-2gg 的倍数,所以 s_{i-g}=s_{i+g-p},所以 s_i=s_{i+g},得证。