线性询问最小后缀(中)

来到了中篇,我们的要求就提高了一点(雾),这次我们的计算目标是:\mathrm{MinSuf}(v,w)

本篇的目的只是说明得出算法的思路,所有证明都是窝随口乱说的如果哪里民科了请把窝拍醒QAQ

原文:[1601.08051] Minimal Suffix and Rotation of a Substring in Optimal Time


定义

\mathrm{Suf}(v)=\{v[i:|v|]|i\in [1,|v|]\}

\mathrm{MinSuf}(v,w)=\{sw|s\in \mathrm{Suf}(v)\}

\mathrm{rank}_A(x)=\min\{i|A_i>w\}-1


Lyndon 串分解(待填)


Significant Suffix

定义 s\in\mathrm{Suf}(v) 为 Significant Suffix(下简称SS),当且仅当存在 w\in\bar{\Sigma}^* 使得 sw=\mathrm{MinSuf}(v,w)

我们从 Lyndon 串分解里可以看出一些性质。

v=v_1^{p_1}\ldots v_m^{p_m}v\in \Sigma^+ 的 LF。定义 s_j=v_j^{p_j}\ldots v_m^{p_m},s_{m+1}=\epsilon 。令 \lambda 为最小的下标使得 \forall \lambda\leqslant i\leqslant ms_{i+1}s_i 的前缀,显然 s_{\lambda}>\ldots >s_m>s_{m+1} 。令 \Lambda(v)=\{s_{\lambda},\ldots.s_m,s_{m+1}\}

那么这样的话若 s 是 SS ,则必然 s\in\Lambda(v)

我们可以注意到一个性质,就是若 s_{i+1}s_i 的前缀,则其必然也是 v_i 的前缀。

Proof.


v_i=ab,s_{i+1}=aba ,由于 v_i=ab 是 Lyndon 串,所以整个串 LF 必然是 (ab)^2a ,故 s_{i+1} 不可能是 aba

从这里我们可以看出 |\Lambda(v)|=O(\log n)

定义 y_i 使得 v_i=s_{i+1}y_i ,注意到 s_i=v_i^{p_i}s_{i+1}=(s_{i+1}y_i)^{p_i}s_{i+1}=s_{i+1}(y_is_{i+1})^{p_i}=s_{i+1}x_i^{p_i} ,其中 x_i=y_is_{i+1}

X(w)=\{x_{\lambda}^{\infty},\ldots ,x_m^{\infty} \}X'(w)=\{x_{\lambda}^{p_{\lambda}},\ldots ,x_m^{p_m} \}

我们可以证明 x,y 的有序性: x_{\lambda}^\infty>x_\lambda^{p_\lambda}\geqslant y_\lambda>x_{\lambda+1}^\infty>x_{\lambda+1}^{p_{\lambda+1}}\geqslant y_{\lambda+1}>\ldots>x_m^\infty>x_m^{p_m}\geqslant y_m

Proof.

u_{i+1}^{q_{i+1}}s_{i+2}x_{i+1}^\infty=u_{i+1}s_{i+2}(y_{i+1}s_{i+2})^\infty=u_{i+1}^\infty s_{i+2}

u_{i+1}^{q_{i+1}}s_{i+2}y_i=s_{i+1}y_i=u_i

这里我们有一个性质:若 v,w\in\Sigma^+w 是 Lyndon 串且 v<w ,则 v^\infty<w

Proof. 反证法,否则必然有 v<w<v^\infty ,则 vw 的前缀。令 w=v^ks ,由于 w 的 Lyndon 剖分只有它自己,因此必然有 s>v ,与假设不符,证毕。

从而必然 u_i<u_{i+1}^\infty s_{i+2}


我们注意到 s_iw=x_m^{p_m}\ldots x_i^{p_i}w ,于是我们只需要二分 wx_i^{p_i}w 的大小关系即可。

有引理: 令 u\in \Sigma^+,v\in \Sigma^* ,若 v<u^\inftyv<u^1v<u^2v<\ldots ;若 v>u^\infty ,则 v>u^1v>u^2v>\ldots

Proof. u^kvu^{k+1}v 的大小关系显然等价于 vuv 的大小关系,这是显然的。

于是我们就可以得出 \mathrm{MinSuf}(v,w) 的表达式:

\mathrm{MinSuf}(v,w)=\begin{cases} s_\lambda w & \text{if } w>x_\lambda^\infty \\ s_iw & \text{if } x_{i-1}^\infty>w>x_i^\infty \text{ for } \lambda\leqslant i\leqslant m \\ s_{m+1}w & \text{if } x_m^\infty>w \end{cases}

\mathrm{MinSuf}(v,w)=s_{m-r+1}w ,其中 r=\mathrm{rank}_{X(v)}(w)


MaxSuf

进行一些观察可以发现, \max\{\Lambda(v)\}=\mathrm{MaxSuf}^R(v),\Lambda(v)=\Lambda(\mathrm{MaxSuf}^R(v))

同时,(窝觉得)有 \Lambda(v)\subseteq\Lambda(t)\cup \{\mathrm{MaxSuf}^R(v)\},t=\max\{\Lambda(v)-\{\mathrm{MaxSuf}^R(v)\}\} ,而 2|t|\leqslant |\mathrm{MaxSuf}^R(v)\}| ,所以就有:

s\in\mathrm{Suf}(v)2|s|\geqslant |v|\Lambda(v)\subseteq \Lambda(s)\cup \{\mathrm{MaxSuf}^R(v)\}

我们还希望能更精确一点,直接求出 \Lambda(v) ,于是可以推出:

u,v\in \Sigma^+,|u|\leqslant |v| ,令 s'=\mathrm{MaxSuf}^R(u,v)s_i\Lambda(v) 中最长的,且是 s' 前缀的后缀,则:

\Lambda(uv)=\begin{cases} \{s_\lambda,\ldots,s_{m+1}\}& \text{if } s'\leqslant^R s_\lambda\ \\ \{s',s_{i+1},\ldots,s_{m+1} \} & \text{if } s'>^R s_\lambda,i\leqslant m \text{ and } |s_i|-|s_{i+1}| \text{ is a period of } s' \\ \{s',s_i,s_{i+1},\ldots,s_{m+1}\} & \text{otherwise}\end{cases}

尽管证明可能并不容易,但是这个结论本身是比较显然明了的,只要注意一连串的 period 要缩在一起就行了。

于是最后需要做的事情就是,求 \mathrm{MaxSuf}^R(u,v)

然而这件事情我们上篇已经说过怎么做了(捂脸


求Lambda(s[l:r])

每次把区间劈成两半,求 \mathrm{MaxSuf}^R(u,v) 然后递归到右一半,最后合并起来即可。

复杂度 O(\log n)


其实中篇早就开始写了,然而莫名其妙被吞掉了(摊手

然而bb了半天还是只能做到 O(n)-O(\log n) ,但是这个做法用到的性质已经多很多了。

下一篇就是,最小后缀/最小表示/最大表示的 O(n)-O(1) 做法啦


我才不会告诉你们最小表示就是 \mathrm{MinSuf}(vv\$)[1:|v|] 呢哈哈哈

编辑于 2017-07-29

文章被以下专栏收录