Border Theory 学习笔记

Border Theory 学习笔记

\(~~~~\) 膜拜 sh。

一、周期

\(~~~~\) 1.定义: 若字符串 \(s\) 某个前缀重复若干次(可以非整数,但次数 \(\times\) 该前缀长度为整数)可得到该字符串,则该前缀的长度被称作 \(s\) 的周期。

\(~~~~\) 形式化地,即对于字符串 \(s\) ,正整数 \(p\) 满足 \(s\) 可被表示为 \(pre(s,p)^x\) ,则称 \(p\)\(s\) 的周期。同时定义 \(per(s)\)\(s\) 的最小周期。

\(~~~~\) 2.弱周期定理

\(~~~~~~~~\) ①.内容 :若 \(p,q\)\(s\) 的周期,且 \(p+q \leq |s|\) ,则 \(\gcd(p,q)\)\(s\) 的周期。

\(~~~~~~~~\) ②.证明 :若 \(i\geq p\) ,由周期定义应有:\(s_i=s_{i-p}\)

\(~~~~~~~~~~~~~~~~~~~~~~~~\)\(i+q\leq |s|\) ,由周期定义应有:\(s_i=s_{i+q}\)

\(~~~~~~~~~~~~~~~~~~~~~~~~\) 综上有:\(s_{i-p}=s_{i+q} \Rightarrow\) \(q-p\) 也是一个周期。

\(~~~~~~~~~~~~~~~~~~~~~~~~\) 注意到这就可以用更相减损来迭代下去,进而得到 \(\gcd\)

二、Border

\(~~~~\) 1.定义 :若字符串 \(s\) 其长为 \(p\) 的前缀与长为 \(q\) 的后缀相同,则 \(p\)\(s\) 的一个border.

\(~~~~\) 形式化地,若对于字符串 \(s\),有正整数 \(p\) 满足 \(pre(s,p)=suf(s,p)\) ,则 \(p\)\(s\) 的一个border。

\(~~~~\) 2.求法——KMP: 定义 \(nxt_i\) 表示字符串 \(s\) 的长为 \(i\) 的前缀的 border,注意到这其实类似于串与自己作匹配,所以我们暴力匹配,当匹配不上时利用已求得的 \(nxt\) 减少需要重新匹配的即可。

三、失配树

\(~~~~\) 我也不太知道这东西有什么其他用处。

\(~~~~\) 1.例题: 给定一个字符串,\(q\) 组询问,每次询问该字符串长为 \(x\) 的前缀和长为 \(y\) 的前缀的最长公共border.

\(~~~~\) 注意到某个前缀的 border 的 border 还是这个前缀的 border ,那么我们就可以不停地跳 border,并且注意到这个过程类似于跳树上LCA,所以直接倍增处理即可。

四、Border Theory

\(~~~~\) 1. Lemma: 字符串 \(s\) 的所有不小于 \(\frac{|s|}{2}\) 的 border 构成等差数列。

\(~~~~\) 证明: 记:\(s\) 最大的 border 为 \(n-p\) ,另有一个 border 为 \(n-q\) ,(\(p,q\leq \frac{|s|}{2}\)),则 \(p,q\)\(s\) 的两个周期,由弱周期定理可知:\(\gcd(p,q)\) 也是周期,故 \(n-\gcd(p,q)\) 也是 border 。又因为 \(\gcd(p,q)\leq p\) ,且 \(n-p\) 为最大的 border,即 \(p\) 为最小的周期,故 \(\gcd(p,q)=p\) ,故 \(p|q\) 。故字符串 \(s\) 所有不小于 \(\frac{|s|}{2}\) 的构成等差数列,且公差为 \(p\)

\(~~~~\) 2. 推论: 字符串 \(s\) 的所有 border 按长度排序后可被划为 \(\log |s|\) 段等差数列。

\(~~~~\) 证明: 暂且利用上面的引理,每次减去一半感性证明,具体待填坑。

posted @ 2022-01-03 12:12  Azazеl  阅读(186)  评论(0编辑  收藏  举报