• 【学习笔记】border与period


    其实只是抄抄博客啦

    弱周期定理

    1.1 1.1 1.1 p p p q q q s s s的周期, p + q ≤ ∣ s ∣ p+q\le |s| p+qs,则 gcd ⁡ ( p , q ) \gcd(p,q) gcd(p,q)也为 s s s的周期

    证明:
    不妨设 p < q pp<q,记 d = q − p d=q-p d=qp
    由于 p + q ≤ ∣ s ∣ p+q\le |s| p+qs,对于 ∀ i ∈ [ 1 , ∣ s ∣ − d ] , i − p ≥ 1 ∨ i + q ≤ n \forall i\in [1,|s|-d],i-p\ge 1\lor i+q\le n i[1,sd],ip1i+qn
    若前者成立, s i = s i − p = s i − p + q = s i + d s_i=s_{i-p}=s_{i-p+q}=s_{i+d} si=sip=sip+q=si+d
    若后者成立, s i = s i + q = s i + q − p = s i + d s_i=s_{i+q}=s_{i+q-p}=s_{i+d} si=si+q=si+qp=si+d
    d d d s s s的周期
    显然最终可以得到 gcd ⁡ ( p , q ) \gcd(p,q) gcd(p,q) s s s的周期

    border的结构

    1.2 1.2 1.2 2 ∣ S ∣ ≥ ∣ T ∣ 2|S|\ge |T| 2∣ST,则 S S S T T T中的匹配位置必为等差数列。

    证明:
    先将 T T T中没有被 S S S覆盖的部分去掉
    考虑匹配为大于 2 2 2的情况
    S S S T T T中第一二次的匹配位差为 d d d,第二次与后面的某一次匹配位差为 q q q,那么 d , q d,q d,q均为 S S S的周期,并且 d + q ≤ ∣ S ∣ d+q\le |S| d+qS,根据弱周期定理 r = gcd ⁡ ( d , q ) r=\gcd(d,q) r=gcd(d,q) S S S的周期,设 S S S的最小周期为 p p p,那么 p ∣ r p|r pr(否则可以使用WPL构造更小的周期)。此时 p ∣ r ∣ d p|r|d prd
    在这里插入图片描述

    p < d pp<d,由于 p p p S S S的循环,因此可以找到一个距离第一匹配位更近的匹配位,与 d d d的定义矛盾

    在这里插入图片描述
    因此只有可能 p = r = d p=r=d p=r=d,并且 d ∣ q d|q dq,所以匹配位在处理后的 T T T上,每 d d d出现一次,匹配位就是公差为 d d d的等差数列了。

    1.3 1.3 1.3 字符串 s s s所有不小于 ∣ s ∣ 2 \frac{|s|}{2} 2s border \text{border} border构成一个等差数列

    s s s最大的 border \text{border} border n − p ( p ≤ ∣ s ∣ 2 ) n-p(p\le \frac{|s|}{2}) np(p2s),另一个 border \text{border} border n − q ( q ≤ ∣ s ∣ 2 ) n-q(q\le \frac{|s|}{2}) nq(q2s)
    因为 p p p, q q q s s s的周期,所以 gcd ⁡ ( p , q ) \gcd(p,q) gcd(p,q) s s s的周期
    所以 n − gcd ⁡ ( p , q ) n-\gcd(p,q) ngcd(p,q) s s s border \text{border} border
    所以 p ∣ q p|q pq
    又因为 p p p s s s的周期,所以 s s s的长相可以画出来
    s s s所有不小于 ∣ s ∣ 2 \frac{|s|}{2} 2s border \text{border} border构成一个等差数列,公差为 p p p

    1.4 1.4 1.4 推论:字符串 s s s的所有 border \text{border} border长度排序后可分成 O ( log ⁡ ∣ s ∣ ) O(\log |s|) O(logs)段,每段是一个等差数列

    s s s border \text{border} border按长度 x x x分成 log ⁡ ∣ s ∣ \log|s| logs类,记 2 k 2^k 2k为最大不超过 n n n 2 2 2的次幂
    x ∈ [ 1 , 2 ) , [ 2 , 4 ) , . . . , [ 2 k − 1 , 2 k ) , [ 2 k , n ) x\in [1,2),[2,4),...,[2^{k-1},2^k),[2^k,n) x[1,2),[2,4),...,[2k1,2k),[2k,n)
    对于 x ∈ [ 2 k , n ) x\in [2^k,n) x[2k,n),显然 2 k ≥ n 2 2^k\ge \frac{n}{2} 2k2n,那么该段构成一个等差数列
    对于 x ∈ [ 2 i − 1 , 2 i ) x\in [2^{i-1},2^i) x[2i1,2i),考虑一个巧妙的构造
    直接放图吧应该看得懂233
    在这里插入图片描述
    两个公差为d1,d2的数列求交过后公差应该是lcm(d1,d2)吧

    然后就可以切掉 Mivik 的标题 了。

  • 相关阅读:
    pytorch的自动微分、计算图 | 代码解析
    设计模式-享元模式
    Pantera联创:读懂想做web3版Discord的加密原生聊天协议Comm
    【亲测可用】SpringBoot使用Redis的Lettuce连接池报RedisCommandTimeoutException
    devops学习(八) 搭建镜像仓库---jenkins推送镜像
    阿里云短信验证接口调用
    matplotlib图表的样式
    【QT】Windows下QT下载安装
    [CSP-J 2022] 解密
    Linux上编译sqlite3库出现undefined reference to `sqlite3_column_table_name‘
  • 原文地址:https://blog.csdn.net/cqbzlydd/article/details/126001310