首页 > 其他分享 >border 的一些性质

border 的一些性质

时间:2023-01-17 10:55:39浏览次数:52  
标签:pre suf 周期 leq 字符串 一些 border 性质

有时候一些神仙字符串题会用到 border 的性质来转化或者证明复杂度,记一下这些有用的结论。

记号:

  1. 字符串:\(s_{1, ..., n}\),长度为 \(|s|\)

  2. 子串:\(s_{[l, r]}\)

  3. 前 / 后缀:\(pre(s, i), suf(s, i)\) 分别表示字符串 \(s\) 长度为 \(i\) 的前 / 后缀。

  4. 最小周期:\(pre(s)\) 表示字符串 \(s\) 的最小周期。

令:

  1. \(P(u, v) = \{ k \mid pre(u, k) = suf(v, k) \}\)

  2. \(LP(u, v) = \{ k \in P(u, v), k \geq \frac{|u|}{2}\)


定义:

周期:\(\forall 0 \leq p < |s|\),如果 \(\forall 1 \leq i \leq |s| - p\) 有 \(s_i = s_{i + p}\),则称 \(p\) 是字符串 \(s\) 的一个周期。

border:若 \(\forall 0 \leq r < |s|\),有 \(pre(s, r) = suf(s, r)\),则称 \(pre(s, r)\) 是 \(s\) 的一个 border.

注意有时 border 的定义是 \(pre(s, r)\) 的长度。


border 和周期:

  1. \(pre(s, k)\) 是 \(s\) 的 border \(\Leftrightarrow\) \(|s| - k\) 是 \(s\) 的周期。

  2. 若 \(p, q\) 都是 \(s\) 的周期,且 \(p + q \leq |s|\),则 \(\gcd(p, q)\) 也是 \(s\) 的周期。

  3. 若 \(p, q\) 都是 \(s\) 的周期,且 \(p + q - \gcd(p, q) \leq |s|\),则 \(\gcd(p, q)\) 也是 \(s\) 的周期。


字符串匹配:

  1. 若字符串 \(u, v\) 满足 \(2 |u| \geq |v|\),则 \(u\) 在 \(v\) 中匹配的位置是一个公差为 \(per(u)\) 的等差数列。此时 \(v\) 是 \(u\) 最小周期的重复。

border 的结构:

  1. 字符串 \(s\) 的所有不短于 \(\frac{|s|}{2}\) 的 border 长度构成等差数列。
    等价:本质不同的短于 \(\frac{|s|}{2}\) 的 border 只有一个。

  2. 将 \(s\) 的 border 按长度划分成 \([2^i, 2^{i + 1} - 1), ..., [2^k, |s|)\) 等集合,则一个 border 集合可以表示成 \(LP(pre(s, 2^i), suf(s, 2^i))\)

  3. \(LP(u, v)\) 构成一个等差数列。

  4. 推论:\(s\) 的所有 border 排序后可以划分成 \(O(\log |s|)\) 段,每段是一个等差数列。

这个可以推出 P4482 [BJWC2018]Border 的四种求法 的 \(O(n \log n)\) 做法,非常强大。

标签:pre,suf,周期,leq,字符串,一些,border,性质
From: https://www.cnblogs.com/lingspace/p/border.html

相关文章

  • 【问题记录】【VUE】【vue-pure-admin】ElPagination你使用了一些已被废弃的方法,导致
    1 问题描述最近在看vue-pure-admin(一个前端框架),框架挺好的正常该有的都有,主要是使用比较简单,使用表格组件的时候,会出现一个报错,分页组件会莫名的报错。2 解决办......
  • 售前解决方案的一些工作小技巧
     在汇报工作的时候,该怎么讲清楚这个项目:1、有几个售前交流2、和谁配合3、什么情况4、关键节点5、关键人物6、需求7、结合点8、风险点9、下一步:之前有没有类似的......
  • javaScript中的一些简写,请备好!
    废话不多说,直接列举一些JavaScript中的简写语法,仅供大家参考!1、当我们确实有一个对象数组并且我们想要根据对象属性查找特定对象时,find方法确实很有用。constdata=[......
  • 一些shell小脚本
    1.两数相加1#!/bin/bash23sum=$(($1+$2))4echo$sum  第3行解析:从$1开始才是输入参数,$0是文件名(包含其路径)  2.$#,$*,$@的区别$#:代表所有参数的......
  • border树模板
    P5829【模板】失配树关键这里的前缀和后缀是不能包含自己的,其他就是板子代码#include<bits/stdc++.h>usingnamespacestd;constintM=1e6+5;chars[M];intne......
  • 腾讯客户端安全菁英班的一些学习资料
    本博客主要收藏一些我可能用到的资料作业1报告作业2DLL注入作业3作业4作业5大作业1FPS游戏:实现D3D劫持透视(APIHook)......
  • 服务器Raid配置的一些思考
    背景随着公司软件的发展.客户越来越多.测试环境和兼容环境也越来越多.不管是虚拟化,还是裸金属做数据库存储都是绕不开的一道门槛.最近又上架了几台服务器,所以想趁......
  • 49、商品服务---品牌管理---保存SKU基本信息的一些注意事项
    对于关联实体类,比如Skus实体类中关联了Image实体类而Skus中的skuId是自增的,所以我们只有先调用service保存了Skus之后,才会生成自增的id,再保存Image时设置关联的skuId才会......
  • 欧拉函数的一些题
    欧拉函数及相关定理1.P2158[SDOI2008]仪仗队原题链接题目大意在一个从\((0,0)\)到\((n-1,n-1)\)的方阵中,有多少点能从原点“看到”分析一个点\(D\)能从原点“看......
  • 关于假期刷题的一些计划
    以下一些图是当时用qq截屏翻到的一篇博客的一些图,虽然不知道对不对,就先按照他是对的情况下刷题吧,实在记不住这是谁的了,就不标注来源了争取这个假期能到D题以上的水准吧,下......