2025.7.11 闲话

\[\newcommand{\ord}[0]{\operatorname{ord}}\newcommand{\lcp}[0]{\operatorname{lcp}}\newcommand{\comp}[0]{\operatorname{comp}} \]

浅谈生成函数在字符串中的应用

记号

不会很详细的书写记号的定义,期望读者已经基本了解这些基本概念 .

字符串侧

字符集 \(\Sigma\) 是一个全序集,字符集内的元素 \(c\in\Sigma\) 被称为字符 .

一个字符串 \(S\) 是字符组成的序列,\(S_i\) 是序列的第 \(i\) 个元素(下标从 0 开始).

对于两个字符串 \(S,T\),二元关系 \(S<T\) 等比较字典序 .

对于两个字符串 \(S,T\),记 \(S\)\(T\) 的前缀为 \(S\sqsubseteq T\),进而若 \(S\neq T\)\(S\sqsubset T\) .

对于两个字符串 \(S,T\)\(\lcp(S,T)\) 是它们的最长公共前缀长度 .

对于一个字符串 \(S,T\)\(ST\) 是它们的拼接 . 对于字符串 \(S\) 和正整数 \(k\)\(S^k\)\(S\) 拼接 \(k\) 次后的结果,例如 \(S^2=SS\) . 特别的,\(S^{\infty}=SSSS\cdots\) .

对于一个字符串 \(S\)\(T\)\(S\) 的 border 当且仅当 \(S\) 同时是 \(T\) 的真前缀和真后缀 . 或者也说 \(k\)\(S\) 的 border 当且仅当 \(S\) 长度为 \(k\) 的前缀是 \(S\) 的 border .

对于一个字符串 \(S\)\(T\)\(S\) 的 period 当且仅当 \(S\)\(T^{\infty}\) 的前缀 . 或者也说 \(k\)\(S\) 的 period 当且仅当 \(S\) 长度为 \(k\) 的前缀是 \(S\) 的 period .

形式幂级数侧

对于形式幂级数 \(f\)\(\ord(f)\) 是最大的 \(k\) 使得 \(x^k\mid f\) .

字符串的生成函数

对于一个长度为 \(n\) 的字符串 \(S\),定义其生成函数

\[\mathcal I(S)(x)=\sum_{i=0}^{n-1}S_ix^i \]

注意由于字符并不能做代数运算,所以在操作的时候需要注意不能让一个 \(x^i\) 的系数上出现多个 \(S_i\) . 或者也可以看成每个 \(S_i\) 都是形式变元,相加也不会合并(

后将 \(\mathcal I(S)(x)\) 简写为 \(\mathcal I(S)\) .

最长公共前缀

容易发现(需要时刻注意,此处的字符串下标从 0 开始):

\[\lcp(S,T)=\ord(\mathcal I(S)-\mathcal I(T)) \]

\(S^{\infty}\) 与 Period

容易发现,对于长度为 \(n\) 的字符串 \(S\)

\[\mathcal I(S^{\infty})=\dfrac{\mathcal I(S)}{1-x^n} \]

对于长度为 \(n\) 的字符串 \(S\) 和长度为 \(m\) 的字符串 \(T\)

\[T\text{ is period of }S\iff \dfrac{\mathcal I(T)}{1-x^m}\equiv\mathcal I(S)\pmod{x^n} \]

可以试一下使用生成函数推导,明显还是比较方便的:

\(S^{\infty}\) 有关 LCP 的计算

对于两个字符串 \(X,Y\)\(\comp(X,Y)=\begin{cases}-1&X<Y\\0&X=Y\\1&X>Y\end{cases}\) .

对于字符串 \(X,Y\),有:

  • \(\comp(X,YX)=\comp(X,Y^{\infty})\)
  • \(\lcp(X,YX)=\lcp(X,Y^{\infty})\) .

对于字符串 \(X,Y\),有:

  • \(\comp(XY,YX)=\comp(X^{\infty},Y^{\infty})\) .
  • \(XY\neq YX\)\(\lcp(XY,YX)=\lcp(X^{\infty},Y^{\infty})\) .
证明

第一部分

\(n=|X|,\,m=|Y|,\,A=\mathcal I(X),\,B=\mathcal I(Y)\) .

则:

\[\begin{aligned}&A-(B+Ax^m)=C\\\iff&A(1-x^m)-B=C\\\iff&A-\dfrac{B}{1-x^m}=\dfrac{C}{1-x^m}\end{aligned} \]

此处 \(\ord C=\ord\dfrac{C}{1-x^m}\) 且其符号即为 \(\comp(X,YX)\) .

第二部分

\(n=|X|,\,m=|Y|,\,A=\mathcal I(X),\,B=\mathcal I(Y)\) .

\[\begin{aligned}&A+Bx^n-(B+Ax^m)=C\\\iff&A(1-x^m)-B(1-x^n)=C\\\iff&\dfrac{A}{1-x^n}-\dfrac{B}{1-x^m}=\dfrac{C}{(1-x^n)(1-x^m)}\end{aligned} \]

此处 \(\ord C=\ord\dfrac{C}{(1-x^n)(1-x^m)}\) 且其符号即为 \(\comp(XY,YX)\) .

Periodicity Lemma

\(p,q\) 都为字符串 \(S\) 的 period,且 \(p+q-\gcd(p,q)\le|S|\),则 \(\gcd(p,q)\) 也是 \(S\) 的 period .

证明

\[\dfrac{\mathcal I(P)}{1-x^p}\equiv \dfrac{\mathcal I(Q)}{1-x^q}\equiv\mathcal I(S)\pmod{x^n} \]

考察:

\[\dfrac{\mathcal I(P)}{1-x^p}-\dfrac{\mathcal I(Q)}{1-x^q}\equiv\dfrac{1-x^{\gcd(p,q)}}{(1-x^p)(1-x^q)}\left(\dfrac{\mathcal I(P)(1-x^p)}{1-x^{\gcd(p,q)}}-\dfrac{\mathcal I(Q)(1-x^q)}{1-x^{\gcd(p,q)}}\right)\pmod{x^n} \]

令上式 \(\mathrm{RHS}\) 括号里面等于 \(F(x,y)\),那么容易发现 \(F(x,y)\) 是关于 \(x\) 的多项式且 \(\deg F(x,y)<p+q-\gcd(p,q)\) .

由于 \(\mathrm{RHS}=\mathrm{LHS}\equiv0\pmod{x^n}\),而 \(\dfrac{1-x^{\gcd(p,q)}}{(1-x^p)(1-x^q)}\not\equiv0\pmod{x^n}\),从而 \(F(x,y)\equiv 0\pmod{x^n}\) .

由于 \(\deg F(x,y)<p+q-\gcd(p,q)\le n\),根据多项式推理法可以得到 \(F(x,y)=0\),进而可以简单推得 \(\dfrac{\mathcal I(P)}{1-x^p}=\dfrac{\mathcal I(Q)}{1-x^q}\),也即长度为 \(p,q\) 的 period \(P,Q\) 满足 \(P^{\infty}=Q^{\infty}\) .

接下来可以通过调用 WPL 来完成证明,而 WPL 的证明是(相对于 PL 来说)简单很多的(?

平方串

对于平方串来说除了方便写过程可能就没啥优势了 .

平方串间的前缀关系

对于字符串 \(U,V\) 满足 \(U^2\sqsubseteq V^2\)\(2|U|\ge|V|\),则 \(|V|-|U|\)\(U\) 的 period .

证明

\(U^2\sqsubseteq V^2\) 就相当于:

\[\begin{aligned}&\mathcal I(U)(1+x^u)\equiv \mathcal I(V)(1+x^v)&\pmod{x^{2u}}\\\iff&\mathcal I(V)-\mathcal I(U)\equiv x^u(\mathcal I(U)-x^{v-u}\mathcal I(V))&\pmod{x^{2u}}\\\iff&\frac{\mathcal I(V)-\mathcal I(U)}{x^u}\equiv \mathcal I(U)-x^{v-u}\mathcal I(V)&\pmod{x^u}\\\iff&\dfrac{\mathcal I(V)-\mathcal I(U)}{x^u}+x^{v-u}\mathcal I(V)\equiv \mathcal I(U)&\pmod{x^u}\end{aligned} \]

第三步:需要注意到由于 \(U\sqsubseteq V\) 那么 \(P=\dfrac{\mathcal I(V)-\mathcal I(U)}{x^u}\) 一定是整式 .

那么令 \(P\) 对应的字符串是 \(C\),则相当于 \(C+V\sqsubseteq U\),也即 \(C+U+C\sqsubseteq U\) 所以 \(C\) 显然是 \(U\) 的 period .

关于 \(2|U|\ge|V|\),只是用来保证 \(|V|-|U|\le |U|\)

此结论可以导出 Three Squares Lemma:若 \(U^2,V^2,W^2\) 是本原平方串且 \(U^2\sqsubset V^2\sqsubset W^2\),则 \(|W|\ge|U|+|V|\) . 由于和本文关系不大故不展开说明,有兴趣者可自行查阅相关资料 .

总结

好像应用面有点过于狭窄(

关于涉及到这种周期或者 \(a^{\infty}\),只刻画前缀关系的的字符串问题,我们在明天明天中讨论了它的一种扩展,其中借助了本文所述的技术来辅助进行证明(不用也行).

关于明天明天怎么做

明天明天

对于字符串 \(S\),定义 \(\operatorname{shuffle}_k(S)\) 是将 \(S\) 中的每个字符向后循环移位 \(k\) 位得到的字符串。对于字符串 \(S\) 和非负整数 \(k\),按如下方法生成字符串序列 \(T\)

\[T_i=\begin{cases}S&i=0\\T_{i-1}\operatorname{shuffle}_{ik}(S)&i>0\end{cases} \]

进而定义 \(S\) 关于 \(k\) 的的自描述字符串 \(f_k(S)=T_{10^{36}}\)

现在给定 \(n\) 个字符串 \(S_1,S_2,\cdots,S_n\),构造一个长度为 \(n\) 的非负整数序列 \(a\),最大化:

\[V=\sum_{i=1}^n\sum_{j=1}^{i-1}\operatorname{lcp}(f_{a_j}(S_i),f_{a_i}(S_j)) \]

的值。你只需要输出最大的 \(V\) 即可。如果最大的 \(V>10^{18}\) 输出 TAT

数据范围:\(1\le n,\sum|S_i|\le5\times10^5\)。保证每个字符串长度都形如 \(2^k\)\(2^{k+1}\)

后将 \(\operatorname{shuffle}_k(S)\) 简写为 \(\operatorname{shu}_k(S)\)。所述 Lemma 1/2 在文末附证明。

首先将自描述字符串的定义 \(f_k(S)=T_{10^{36}}\) 中的 \(R=10^{36}\) 看做一个充分大的数,也即若改变 \(R\) 的取值可以使得 \(V\) 任意大则输出 TAT,否则答案一定和 \(R\) 没有关系。容易证明修改后的题意和原题意等价。

Lemma 1\(\quad\)\(f_p(A)\neq f_q(B)\),则 \(\operatorname{lcp}(A\operatorname{shu}_p(B),B\operatorname{shu}_q(A))=\operatorname{lcp}(f_p(A),f_q(B))\)

从而如果答案不是 TAT,就只需要构造非负整数序列 \(a\) 并最大化:

\[V=\sum_{i<j}\operatorname{lcp}(S_i\operatorname{shu}_{a_j}(S_j),S_j\operatorname{shu}_{a_i}(S_i)) \]

那么考虑首先特判 TAT 的情况,只需要判断是否存在 \(S_i,S_j\) 使得存在 \(p,q\)\(f_p(S_i)=f_q(S_j)\)。那么类似 Lemma 1 也就相当于 \(S_i\operatorname{shu}_p(S_j)=S_j\operatorname{shu}_q(S_i)\)

\(n=|S_i|\le m=|S_j|\),那么 \(u_1=S_i\operatorname{shu}_p(S_j),\,u_2=S_j\operatorname{shu}_q(S_i)\) 大概是这样的一个结构:

image

对于前面长度为 \(n\) 的位置必须匹配,所以这里要求 \(S_i\)\(S_j\) 的前缀。可以在 Trie 树上找出每组本质不同的有前后缀关系的串,容易发现只有 \(O(\sum|S_i|)\) 组这样的串。(此前可能需要特判相同串)

那么只需要对于每个 \(S_i,S_j\) 计算中间长度为 \(m-n\) 的位置是否能通过 \(\mathrm{shuffle}\) 变换得到以及变换后后面长度为 \(n\) 的位置是否能通过 \(\mathrm{shuffle}\) 变换得到即可。

那么就变成对于两个字符串 \(A,B\) 找出一个 \(k\) 使得 \(A=\operatorname{shu}_k(B)\) 或报告不存在这样的 \(k\) 了。这里可以考虑对于每种字符 \(c\) 分别计算它在 \(A\) 中的位置和 \(B\) 中的位置,那么只需要判断是否存在一个 \(k\) 使得 \(c\)\(A\) 中的位置和 \(c\) 平移 \(k\) 位后在 \(B\) 中的位置一样即可。

假设我们已经求出了每种字符 \(c\)\(A\) 中的位置 \(p_c\)\(B\) 中的位置 \(q_c\),那么问题相当于找出让 \(q\) 循环移位多少位能得到 \(p\),只需要把 \(p\) 复制两遍然后让 \(q\) 在上面做字符串匹配就可以了。

关于如何求每种字符 \(c\)\(A,B\) 中的位置,可以考虑计算位置序列对应的 Hash 值,由于需要重标号下标所以此处最好使用 BKDR Hash(就是那个 \(\sum b^is_i\) 的 Hash)。

那么现在已经处理掉 TAT 的情况了,也就是对于每个 \(S_i,S_j\) 都不存在 \(p,q\) 使得 \(f_p(S_i)=f_q(S_j)\)

注意到如果 \(S_i,S_j\) 没有前后缀关系那么 \(a_i,a_j\) 不会对 LCP 产生任何影响,此时需要计算 \(\sum_{i<j}\operatorname{lcp}(S_i,S_j)\)。注意到将 \(S\) 按字典序排序后有 \(\operatorname{lcp}(S_i,S_j)=\operatorname{min}_{k\in[i,j)}\operatorname{lcp}(S_k,S_{k+1})\)(在 Trie 树上考虑就是 NOIP2024 T4 的结论),那么问题转为计算一个序列每个区间的最小值之和。这是一个经典问题,可以使用你喜欢的算法解决。

对于有前后缀关系的 \(S_i,S_j\),只需要考虑它们能让 LCP 之和增加多少。不妨令 \(S_i\)\(S_j\) 的前缀,可以类似处理 TAT 的方法考虑,重新放一下那个图:

image

\(n\) 位必然匹配,那么可以分几种情况(二分匹配长度可以计算出限制中的具体数值):

  • 可以通过调整 \(a_i\) 使得中间长度为 \(m-n\) 的部分匹配 \(c\) 个元素,但是没有匹配满。
  • 可以通过调整 \(a_i\) 使得中间长度为 \(m-n\) 的部分匹配满,进而可以通过调整 \(a_j\) 使得后面长度为 \(n\) 的部分匹配 \(c\) 个元素,但是没有匹配满。

注意这里最后一段不可能匹配满,要不然就是 TAT 的情况了。于是问题转化为对于序列 \(a\) 有若干个形式如下的限制:

  • 限制 \((i,c,v)\):若 \(a_i=c\) 则可以收益 \(v\)
  • 限制 \((i,j,c_1,c_2,v)\):若 \(a_i=c_1,\,a_j=c_2\) 则可以收益 \(v\)

问最大能得到多少收益。对于任意的限制,这个问题被称为 Max-SAT 问题。很遗憾,这是一个 NPC 问题。所以需要进一步寻找限制结构的性质。

Lemma 2\(\quad\)长度为 \(p,q,n\) 的字符串 \(P,Q,S\) 满足 \(f_a(P)\) 的前 \(n\) 位为 \(S\)\(f_b(Q)\) 的前 \(n\) 位也为 \(S\)。若 \(p+q-\gcd(p,q)\le n\),则 \(f_a(P)=f_b(Q)\)

可以发现如果存在第二种限制 \((i,j,c_1,c_2,v)\),那么 \(f_{c_1}(S_i)\) 的前 \(|S_j|\) 位必然为 \(S_j\)(可以通过观察图片得到),若存在两个限制 \((i_1,j,c_1,c_2,v_1),\,(i_2,j,d_1,d_2,v_2)\) 其中 \(i_1\neq i_2\),那么根据上述 Lemma 2 可以得出 \(f_{c_1}(S_{i_1})=f_{d_1}(S_{i_2})\),这与答案不为 TAT 矛盾!从而每个限制 \((i,j,c_1,c_2,v)\)\(j\) 都互不相同。

Remark. 此处为什么能使用 Lemma 2?注意题目中的重要性质:字符串的长度必然形如 \(2^k\)\(2^k+2^{k+1}\),也就是形如 \(2^k\)\(3\cdot 2^k\)。令 \(S\) 是所有可能的字符串长度构成的集合,则需要证明对于任意 \(p,q,r\in S\)\(p,q<r\) 都有 \(p+q-\gcd(p,q)\le r\)(这是 Lemma 2 的适用条件)。分类讨论:

  • \(p,q\) 中至少一个没有因子 \(3\):可以发现此时显然有 \(p+q\le r\)
  • \(p,q\) 都有因子 \(3\):令 \(p=3\cdot 2^x,\,q=3\cdot 2^y\),则 \(p+q-\gcd(p,q)=3\cdot(2^x+2^y-2^{\min\{x,y\}})=3\cdot2^{\max\{x,y\}}=\max\{p,q\}<r\)

那么也就证明了结论,也即在本题中任意串之间都满足 Lemma 2 的使用条件。

那么也就表明对于每个限制 \((i,j,c_1,c_2,v)\) 连边 \(i-j\) 可以得到一棵森林结构。对每棵树分别考虑,可以直接在树上进行 DP:令 \(dp_{u,c}\) 表示只考虑 \(u\) 的子树,且 \(a_u=c\) 的最大收益。转移平凡不表。

假设 \(n\)\(\sum|s_i|\) 同阶,那么问题在 \(O(n|\Sigma|\log n)\) 的时间复杂度内得到解决。

(数据没有针对任何合理的 Hash 算法做任何针对性的构造)


那么 Lemma 1/2 如何证明呢?

对于下标从 \(0\) 开始的长度为 \(n\) 的字符串 \(S\),考察系数在 \(\Z/|\Sigma|\Z\) 上的二元形式幂级数:

\[\mathcal I(S)=\sum_{i=0}^{n-1}(1+S_iy)x^i \]

注意到 \((1+ay)(1+by)\equiv (1+(a+b)y)\pmod{y^2}\),那么有 \(\displaystyle\mathcal I(f_k(S))=\dfrac{\mathcal I(S)}{1-(1+ky)x^n}\)

找到了对 \(f\) 的一个良好的刻画,就可以着手证明结论了。

Lemma 1\(\quad\)\(f_p(S)\neq f_q(T)\),则 \(\operatorname{lcp}(S\operatorname{shu}_p(T),T\operatorname{shu}_q(S))=\operatorname{lcp}(f_p(S),f_q(T))\)

对于关于 \(x\) 的形式幂级数 \(f\),令 \(\operatorname{ord}(f)\) 是最大的 \(n\) 使得 \(x^n\mid f\),那么 \(\operatorname{lcp}(S,T)=\operatorname{ord}([y^1](\mathcal I(S)-\mathcal I(T)))\)

从而令 \(A=\mathcal I(S),B=\mathcal I(T)\),则有:

\[\begin{aligned}\mathrm{RHS}&=\operatorname{ord}\left([y^1]\left(\dfrac{A}{1-(1+py)x^n}-\dfrac{B}{1-(1+qy)x^m}\right)\right)\\&=\operatorname{ord}\left([y^1]\dfrac1{(1-(1+py)x^n)(1-(1+qy)x^m)}\left(A(1-(1+qy)x^m)-B(1-(1+py)x^n)\right)\right)\\&=\operatorname{ord}([y^1](A(1-(1+qy)x^m)-B(1-(1+py)x^n)))\\&=\operatorname{ord}([y^1]((A+B(1+py)x^n)-(B+A(1+qy)x^m)))\\&=\operatorname{ord}(([y^1]A+x^n([y^1]B+p[y^0]B))-([y^1]B+x^m([y^1]A+q[y^0]A)))\end{aligned} \]

由于对于任意字符串 \(S\)\([y^0]\mathcal I(S)\) 有值的位置系数一定为 \(1\),那么可以看出:

\[\sum_{i=0}^{|A|+|B|-1}(A\operatorname{shu}_p(B))_ix^i=[y^1]A+x^n([y^1]B+p[y^0]B) \]

从而可以简单得到 \(\mathrm{RHS}=\mathrm{LHS}\)。证明完毕。

Lemma 2\(\quad\)长度为 \(p,q,n\) 的字符串 \(P,Q,S\) 满足 \(f_a(P)\) 的前 \(n\) 位为 \(S\)\(f_b(Q)\) 的前 \(n\) 位也为 \(S\)。若 \(p+q-\gcd(p,q)\le n\),则 \(f_a(P)=f_b(Q)\)

对于限制 \(f_a(P)\) 的前 \(n\) 位为 \(S\)\(f_b(Q)\) 的前 \(n\) 位也为 \(S\),无非就是:

\[\dfrac{\mathcal I(P)}{1-(1+ay)x^p}\equiv \dfrac{\mathcal I(Q)}{1-(1+by)x^q}\equiv\mathcal I(S)\pmod{x^n} \]

考察:

\[\dfrac{\mathcal I(P)}{1-(1+ay)x^p}-\dfrac{\mathcal I(Q)}{1-(1+by)x^q}\equiv\dfrac{1-x^{\gcd(p,q)}}{(1-(1+ay)x^p)(1-(1+by)x^q)}\left(\dfrac{\mathcal I(P)(1-(1+ay)x^p)}{1-x^{\gcd(p,q)}}-\dfrac{\mathcal I(Q)(1-(1+by)x^q)}{1-x^{\gcd(p,q)}}\right)\pmod{x^n} \]

令上式 \(\mathrm{RHS}\) 括号里面等于 \(F(x,y)\),那么容易发现 \(F(x,y)\) 是关于 \(x\) 的多项式且 \(\deg F(x,y)<p+q-\gcd(p,q)\)

由于 \(\mathrm{RHS}=\mathrm{LHS}\equiv0\pmod{x^n}\),而 \(\dfrac{1-x^{\gcd(p,q)}}{(1-(1+ay)x^p)(1-(1+by)x^q)}\not\equiv0\pmod{x^n}\),从而 \(F(x,y)\equiv 0\pmod{x^n}\)

由于 \(\deg F(x,y)<p+q-\gcd(p,q)\le n\),根据多项式推理法可以得到 \(F(x,y)=0\),进而可以简单推得 \(\dfrac{\mathcal I(P)}{1-(1+ay)x^p}=\dfrac{\mathcal I(Q)}{1-(1+by)x^q}\),这意味着 \(f_a(P)=f_b(Q)\),证明完毕。

posted @ 2025-07-10 20:06  yspm  阅读(183)  评论(3)    收藏  举报
😅​