首页 > 其他分享 >border 性质梳理

border 性质梳理

时间:2024-10-22 19:10:04浏览次数:4  
标签:nxt 周期 后缀 pos border 梳理 等差数列 性质

建议看到结论之后直接画图自己推

目前定义 \(s[l,r]\) 为字符串 \(s\) 的 \([l,r]\),定义 \(nxt_i\) 为 KMP 算法所得。

定义: \(s[1,i]=s[n-i+1,n]\),则称 \(s[1,i]\) 是 \(s\) 的一个 border

可能证明会比较浅显,但仅供笔者理解。

nxt树定义:连边 \(nxt_i\to i\) 的一棵树。

  1. 周期性

周期定义:对于 \(s[1,n]\),一个周期 \(t\) 等价于满足 \(\forall i,i+t\in [1,n],s[i]=s[i+t]\)
因此有 \(s[1,i]\) 为一个 border 等价于存在一个周期 \(t=n-i\)

Kmp的 \(nxt_i\) 表示 \(s[1,nxt_i]=s[i-nxt_i+1,i]\),是一个前缀的最大 \(border\)。

  1. 总和性

对于 \(s[1,n]\) 的所有 \(border\) 长度由以下代码给出:
int t=nxt[n];vector<int>border;while(t)border.push_back(t),t=nxt[t]
这等价于 nxt 树上 \(n\) 的所有祖先。

证明仅需考虑假设一个 \(nxt_{nxt_i}<k<nxt_i\),那么可以推出 \(k=nxt_{nxt_i}\) 即可。

应用:\(s[1,i]\) 在 \(s[1,k]\) 的出现次数,等价于 nxt 树上的点 \(i\) 的子树中所有 \(\le k\) 的节点个数。

变形:在 \(t[1,m]\) 中,\(s[1,n]\) 的出现次数。构造 \(G=s+?+t\) 即可。

  1. 匹配性:

对于 \(j<k\) 为两个 border。
那么对于原串 \(s\),任意一个位置满足 \(s[pos-k+1,pos]=s[1,k]\),就有 \(s[pos-j+1,pos]=s[1,j]\)
证明:因为 \(j<k\),所以 \(s[1,j]=s[k-j+1,k]\),后续自证不难。
同时在 nxt 树上的视角,\(j\) 是 \(k\) 的祖先,且 \(pos\) 属于子树 \(k\)。自然属于子树 \(j\)。

  1. 最小表示可行性

对于一个字符串 \(s[1,n]\),若 \(p\) 为这个字符串循环最小表示的开头位置,一个必要条件是:
存在一个字符串 \(t\),满足 \(s[p,n]+t\) 是 \(s[1,n]+t,s[2,n]+t,\dots s[n,n]+t\) 最小值。

证明:这等价于对于后缀 \(s[k,n],k<p\),需要满足 \(s[p,n]<s[k,k+n-p]\),对于后缀 \(s[k,n],k>p\),需要满足 \(s[p,p+n-k]<s[k,n]\)

  1. 最小后缀相关

记后缀 \(suf_i=s[i,n]\)。
记最小后缀为 \(minsuf\)
设集合 \(P\) 为在所有后缀后追加一个字符串 \(t\),可能成为最小后缀的后缀。

更详细地,这个可能成为最小后缀的后缀 \(suf_k\),满足对于 \(t<k\),\(s[t,t+n-k]<s[k,n]\),对于 \(t>k\),\(s[t,n]>s[k,k+n-t]\)
性质:

  • \(P\) 中串互为前缀(因为仅凭当前信息无法判断大小,所以长度较小串是长度较大串的前缀),同时长度较小串也是长度较大串的后缀,所以是 border 关系

  • \(\forall S,T\in P,|S|>|T|\),有 \(|S|>2|T|\)。

    证明:

    若 \(|T|<|S|\le 2|T|\),则显然有存在串 \(AB\),有 \(S=AB,T=AAB\)

    其中 \(A\) 可空。

    考虑往后加入一个串 \(U\) 进行比较,则 \(ABU,AABU\) 相当于比较 \(BU,ABU\)

    • 若 \(BU<ABU\),则可以推出 \(A\) 非空,且有后缀 \(B\) 优于 \(AB\) 也就是 \(S\),所以 \(S\) 并不是最小后缀,矛盾
  • 应用:「JSOI2019」节日庆典

\(|P|\le \log n\)。

  1. 弱周期定理

若 \(p,q,p>q\) 为 \(s[1,n]\) 的周期,\(p+q\le n\),那么 \(p-q\) 也是 \(s[1,n]\) 的周期。
推论:更相减损术得 \(\gcd(p,q)\) 是 \(s[1,n]\) 的周期。
证明:\(s_i=s_{i+p}=s_{i+q}\implies s_i=s_{i+p-q}\)

  1. 周期定理

若 \(p,q\) 为 \(s[1,n]\) 周期,\(p+q-\gcd(p,q)\le n\),则 \(\gcd(p,q)\) 为 \(s[1,n]\) 周期。

证明类同。

  1. 前缀周期定理

若 \(s[1,i]\) 有周期 \(d\),\(s[1,n]\) 有周期 \(a\),若 \(d|a,i\ge a\),则 \(s[1,n]\) 也有周期 \(d\)。
证明很简单,考虑 \(s[1,a]\) 由若干个 \(s[1,b]\) 重复组成。

  1. 等差数列定理 - version 1

对于 \(2|S|\ge |T|\),串 \(S\) 在串 \(T\) 中的匹配位置为等差数列。
设匹配位置为 \(b_1\sim b_m\)。
我们考虑只保留串 \(T\) 的 \([b_1-|S|+1,|b_m|]\) 部分,则简化为了一个 \(S\) 为 \(T\) 的border的问题。
这样的话,我们不妨令这个新的串代替 \(T\),下面表述以新串为主。
可以知道由于 \(2|S|>|T|\),所以这些匹配位置所代表的区间有交。
那么对于 \(i,j\),\(T[b_i-|S|+1,b_i]=T[b_j-|S|+1,b_j]\),因此 \(b_j-b_i\) 就成为了一个周期,且完全覆盖。
根据弱周期定理,可以得到匹配位置是一个等差数列。

另一种想法:考虑两个周期 \(p,q,p<q\),可知 \(q=kp\)。因此这些个匹配位置之差都是一个周期,进而都是周期。

  1. 9.的重要推论:

考虑两个串 \(S,T\),定义集合 \(G=\lbrace k_1\sim k_n\rbrace,k\ge |S|/2,S[1,k]=T[n-k+1,n]\)。

那么这也是个等差数列。

证明很简单,取出最大的 \(k\),然后很明显剩下的全是 \(S[1,k]\) 的border。

  1. 等差数列定理 - version 2

一个串的 \(border\) 按长度排序后,可以划分为 \(O(\log n)\) 个等差序列,也即周期同样可以。
反复运用 10.

将字符串划分为 \([2^{i-1},2^i-1]\) 若干段,这样可以遍历完所有的border。按照这样分组后每组贡献一条 border 等差数列链。

  1. 设 \([1,i]\) 的所有 border 长度为 \(S(i)\),则 \(x\in S(i),x\neq 1\implies x-1\in S(i-1)\)

这个感觉挺显然的,因为 若 \([1,x]=[i-x+1,i]\),则 \([1,x-1]=[(i-1)-(x-1)+1,i-1]=[i-x+1,i-1]\)

  1. 延续 12. 的定义,则有 \(S(nxt_i)\subseteq S(i)\),且差的那一部分恰可以从 \(S(i-1)\) 里 \(\ge nxt_i\) 的那部分元素补上来

    应用:QOJ 9372

标签:nxt,周期,后缀,pos,border,梳理,等差数列,性质
From: https://www.cnblogs.com/spdarkle/p/18493563

相关文章

  • 矩阵的秩性质总结
    矩阵的秩用法实在过于灵活,写篇随笔记录一下。矩阵的秩定义矩阵的秩常见定义有以下两种:非零子式的最高阶数。行(列)向量空间的极大无关组向量个数。矩阵的秩基本性质从定义出发不难得到以下性质:\(0\ler(A)\le\min(m,n)\)。\(r(A^T)=r(A)\)。\(r(kA)=r(A)\),要求\(k\n......
  • 2024年PDF转JPG新趋势,4款常用编辑工具梳理,不容错过
    嘿,大家好,我是你们的老朋友,今天咱们聊个超实用的技巧——把PDF文件变成JPG图片,这样分享起来就方便多了。不管是工作汇报、学习资料还是生活照片,这招都能让你事半功倍。1.福昕PDF编辑器闪现✚ https://editor.foxitsoftware.cn/操作教程“https://mp.weixin.qq.com/s/8okEw......
  • 【LaTeX】13表格梳理:基本表格、跨行(multirow)和跨列(multicolumn)表格
    【LaTeX】表格梳理:基本表格、跨行(multirow)和跨列(multicolumn)表格写在最前面一、基本表格1.表头标题2.常用选项[htbp]3.其他二、表格美化1.跨列(multicolumn)2.跨行(multirow)三、全部latex代码四、小结......
  • k8s和ipvs、lvs、ipvsadm,iptables,底层梳理,具体是如何实现的
    计算节点的功能:提供容器运行的环境kube-proxy的主要功能:术业有专攻,kube-proxy的主要功能可以概括为4个字网络规则那么kube-proxy自己其实是个daemonset控制器跑的每个节点上都有个的pod它负责网络规则其实呢它还是个小领导它不直接去搞网络规则而是告诉别人,网络规......
  • 零基础学大模型——大模型技术学习过程梳理
    “学习是一个从围观到宏观,从宏观到微观的一个过程”学习大模型技术也有几个月的时间了,之前的学习一直是东一榔头,西一棒槌,这学一点那学一点,虽然弄的乱七八糟,但对大模型技术也算有了一个初步的认识。因此,今天就来整体梳理一下大模型技术的框架,争取从大模型所涉及的理论,技术,......
  • 大模型技术学习过程梳理
    “学习是一个从围观到宏观,从宏观到微观的一个过程”学习大模型技术也有几个月的时间了,之前的学习一直是东一榔头,西一棒槌,这学一点那学一点,虽然弄的乱七八糟,但对大模型技术也算有了一个初步的认识。因此,今天就来整体梳理一下大模型技术的框架,争取从大模型所涉及的理论,技......
  • 高等数学 5.1 定积分的概念与性质
    目录一、定积分的定义1.定义2.定积分的几何意义二、定积分的近似计算1.矩形法2.梯形法3.抛物线法三、定积分的性质一、定积分的定义1.定义定义设函数\(f(x)\)在\([a,b]\)上有界,在\([a,b]\)中任意插入若干个分点\[a=x_0<x_1<x_2<\cdots<x_{n-1}<x_n=......
  • 【系统架构设计师】案例专题六(8大系统架构设计之8): 大数据架构设计考点梳理
    更多内容请见:备考系统架构设计师-核心总结目录文章目录一、传统数据处理系统存在的问题二、大数据处理系统架构分析1、大数据处理系统面临挑战2、大数据处理系统架构特征三、Lambda架构1、Lambda架构对大数据处理系统的理解2、Lambda架构应用场景3、......
  • 2024版最新AI大模型知识点大梳理,零基础入门到精通,收藏这篇就够了
    文章目录AI大模型是什么AI大模型发展历程AI大模型的底层原理AI大模型解决的问题大模型的优点和不足影响个人观点AI大模型是什么AI大模型是指具有巨大参数量的深度学习模型,通常包含数十亿甚至数万亿个参数。这些模型可以通过学习大量的数据来提高预测能力,从而在自然语言......
  • 量化交易中常见技术指标梳理和总结
    量化交易中常见技术指标梳理和总结一、移动平均线(MA,MovingAverage)基本概念和由来​移动平均线是一种通过计算一段时间内价格的平均值来平滑价格数据的指标,用于识别价格趋势。​移动平均线的出现,很难追溯到某一个特定的人,它是在长期的市场实践和统计分析中逐渐形成......