记号
用大写表示串,小写表示串的长度。用希腊字母表示周期,以示区分。
Border 与周期互化
若串
S 有长度为
p 的 border,则有长度为
π=∣S∣−p 的周期。
弱周期引理
若串
S 中有周期
Π,X,其长度为
π,χ,且
π+χ≤∣S∣,则
gcd(π,χ) 为周期。
证明:由周期关系有
si=simodπ=simodχ,由裴蜀定理,仅当
s 存在周期
gcd(π,χ) 时能满足条件。
分类讨论
记
f(S) 为由
S 构造出的串。取
S 的最小周期串记为
A,则
S 形如
A…AA′,其中
A′ 是
A 的前缀。我们希望能通过周期或 border 引入的相等关系进行递归构造。
A 完整出现至少两次
由周期性,我们希望仅通过求
f(T),T=AA′ 就能得到
f(S);此时最小性已经满足,下面证明这样构造的串
B…BB′ 与原串具有相同的 border 集合。
- p≤β+β′,显然已经满足。
- p>β+β′:
- 若 S 有 border p,则 f(S) 有 border p。S 有对应周期 π=n−p,由 β 是 S 最小周期可知 β∣π;f(S) 也有周期 β,得证。
- 若 f(S) 有 border p,则 S 有 border p。f(S) 有对应周期 π=n−p<n−β+β′。反证:若 β∤π,则存在周期 θ=gcd(β,π)<β;此时 θ 是 B 的周期,与 BB′ 最小周期为 B 矛盾。
A 完整出现不超过一次
此时再递归
AA′ 没有意义。设
a=n−∣A∣ 为
S 的最长 border,则
S 形如
AXA,且
x≥1。最好能先递归求
f(A) 再确定
X 对应的串。
不妨大胆猜测 X 对应的串可以全部填 0,记 f(S)=BYB,Y 全 0。
但是这样可能引入
>a 的 border,需要调整。字典序最小的调整方法是将
Y 最后一位改为 1,记为
Z。
下面证明 BZB 一定合法。
设
BYB 的最长 border
c>a,其对应的周期为
σ=n−c 为
BYB 的最小周期。由 border
a,
BYB 有周期
α=n−a=a+x,此时
σ∣α,即
Σ 是
BY 的整周期。
- 若 σ≤x,则 BY 为全 0 串;此时将 Y 换成 Z 一定合法。
此时
σ>x,
Σ=DY,其中
D 是非全
0 的串。则
BYB=(DY)kDY(DY)kD,
BZB=(DY)kDZ(DY)kD。
反证:设
BZB 有 border
e>a。
- 若 e<a+x,则前后 e 个字符中 1 的数量不同,不合法。
- 否则 e≥a+x。BZB 有周期 ϵ=n−e≤α−x<α,可推出有周期 θ=gcd(α,ϵ)<ϵ。
- 当 ϵ<a−d,即 e>a+x+d 时:
- θ=gcd(α,ϵ)=gcd(ϵ,a+x−ϵ)>d+x=σ;
- 且 θ≤ϵ<a−d=kσ。
- 若 σ∤θ,则 (BY)k 有周期 gcd(σ,θ)<σ,矛盾。
- 因此,θ=k′σ≤kσ,BZB 有循环节 (DY)k′,可推出 DY=DZ,矛盾。
- 当 ϵ≥a−d,即 e≤a+x+d 时:
- 取出 E 长为 σ 的后缀 F,则 F=D[e−(a+x),d)ZD[0,e−(a+x));由 border,F=(BZB)[n−σ,n)=YD。F 与 YD 间 1 的数量不同,矛盾。
故得证。
每次递归规模减少到不超过
32n,时间复杂度
O(n)。