当前位置: 首页 > news >正文

字符串 I:border 理论 I

字符串:\(\text{border}\) 理论

\(\text{border}\) 具有非常多的理论与性质。

\(周期与\ \text{border}\ \text{的关系}\)

对于一个周期为 \(p\),长度为 \(n\) 的字符串 \(s\):存在公共前后缀使得 \((\lfloor\frac{n}{p}\rfloor-1) p+n\bmod p\)

思考如下的字符串:

\[\tt BiliBiliBiliBiliBi \]

其具有一个 \(\text{border}\)\(\tt BiliBiliBiliBiliBi\)

由此得出:

对于一个周期为 \(p\),长度为 \(n\) 的字符串 \(s\):存在公共前后缀使得 \((\lfloor\frac{n}{p}\rfloor-1) p+n\bmod p\)

进一步地,最长的周期对应公共前后缀,最短的周期对应最长公共前后缀,即 \(\text{border}\)

证明:

周期的定义,对于所有的 \(1\leq i\leq n-p\)\(S_i=S_{i+p}\)

公共前后缀的定义,\(S[1,n-p]=S[1+p,n]\),两个子串的字符位置差恰好为 \(p\),因为 \(S_i=S_{i+p}\),所以两者等价。

\(\text{弱周期引理}\)

对于字符串 \(S\)\(|S|=n\),存在长度为 \(p\)\(q\) 的周期且 \(p\neq q,p+q\leq n\),则 \(\gcd(p,q)\) 同为字符串的周期。

证明:

  • 假设 \(p<q\),设 \(d=q-p\)。对于 \(1\leq i\leq |S|\),对于字符串的任意下标 \(x\),若 \(x>p\),则 \(S_x=S_{x_p}=S_{x-p+q}=S_{x+d}\)
  • 反之,若 \(x\leq p\),则 \(S_x=S_{x+q}=S_{x+q-p}=S_{x+d}\)
  • \(d\)\(S\) 的一个周期,根据最大公约数的性质,可得 \(\text{gcd(p,q)}\) 同为 \(S\) 的周期。

\(\text{周期引理}\)

\(|S|=n\),存在长度为 \(p\)\(q\) 的周期且 \(p\neq q,p+q\leq n+\gcd(p,q)\),则 \(\gcd(p,q)\) 同为字符串的周期。

证明略,使用生成函数等方法较为复杂。

\(\text{border}\ \text{的等差性}\)

我们定义字符串 \(S\) 的最小周期为 \(\text{per(S)}=p\),另一个周期为 \(q\),且 \(p,q\leq \frac{n}{2}\)。则所有的长度 \(len\) 满足 \(2len\geq |S|\)\(\text{border}\) 长度构成等差数列。

证明:则由弱周期引理,\(\gcd(p,q)\) 为一个周期,又因为 \(p\) 是最小周期,所以 \(\gcd(p,q)\geq p\)

又因为 \(\gcd(p,q)\leq p\)\(\gcd(p,q)=p\)

所以 \(q\)\(p\) 的倍数。

我们注意到对于一个长度为 \(p\) 的周期,对于任意 \(kp\)\(k\) 为正整数,字符串存在长度为 \(kp\) 的周期。

又因为 \(q=kp\) 恒成立,所以所有的 \(q\) 构成等差数列。

对应的,存在长度为 \(n-q\)\(\text{border}\),构成等差序列。

证毕。

http://www.jsqmd.com/news/519295/

相关文章:

  • 计算机毕设 java基于微信小程序点餐系统的设计与实现 微信小程序智能点餐平台开发 基于 SpringBoot 的餐饮在线点餐系统设计
  • 避坑指南:WRF下垫面数据替换中的5个常见错误及解决方法(基于GDAL转换经验)
  • 从西工大网安导论出发:构建网络空间安全的知识体系与实践视角
  • Hyper-V虚拟机安装Deepin避坑指南:从镜像选择到循环安装解决
  • Flink内存管理实战:如何用堆外内存提升大数据处理性能(附配置参数详解)
  • 一、安装Redis(win11环境下)
  • MinIO 宣布彻底闭源后,RustFS “偷家”成功:二进制替换,一步完成平滑迁移!
  • 网络安全新手必看:Kill Chain攻击链的7个阶段详解与防御要点(2023最新版)
  • Carsim与Matlab/Simulink联合仿真:五次多项式实时规划在四车道直道场景的应用
  • 生成引擎优化GEO提升内容创作价值与用户体验协同发展的新路径
  • 2026.3 ~ 2026.4
  • 5G小基站开发实战:用XC7Z100+ADRV9009搭建双收双发射频板卡(附完整配置流程)
  • crewAI CLI 与项目结构:从原型到生产的工程化规范
  • 荣耀云调试实战:如何用免费真机资源搞定多机型兼容性测试
  • crewAI 可观测性体系:Langfuse/Phoenix 集成与执行链路追踪
  • 计算机毕设 java基于微信小程序奶茶点单系统设计与实现 微信小程序智能奶茶点单平台开发 基于 SpringBoot 的奶茶在线点餐系统设计
  • 两台T型三电平功率均分 - VSG控制探索
  • I2C协议详解:从理论到实践驱动0.96寸OLED屏幕
  • 2026年 苏州热门租赁孵化器推荐榜单:创新空间与创业生态深度解析,助力企业高效成长 - 品牌企业推荐师(官方)
  • EuRoC数据集在视觉惯性里程计(VIO)中的实战应用指南
  • 李述铜10课集合嵌入式,其中包含Linux+RTOS+汇编+编译器使用 Linux_ 1.李述铜虚拟机设计:从0写8051虚拟机 2.李述铜从0手写自己的Linux x86操作系统 3.李述铜从0手写
  • 轴比
  • crewAI 部署形态:本地、Docker、K8s 与 Serverless 化实践
  • VisionPro实战:5个工业视觉检测案例详解(附代码片段)
  • crewAI AMP Suite 企业架构:控制平面、多租户与 RBAC 权限模型
  • BLE广播包里的隐藏彩蛋:从iBeacon到阿里云IoT的厂商自定义数据实战
  • React15 - 在React15项目中使用类组件还是函数式组件
  • 探索2024新算法:CPO-VMD基于冠豪猪优化算法优化VMD分解
  • 当拆分学习遇上图神经网络:在PyG里保护社交网络数据隐私的实战思路
  • 用Qt/CPP打造多平台图形编辑器:探索与实践