后缀数组求 LCP 和相关证明
后缀数组求 LCP 和相关证明
一些定义
性质1
对于
定理 1
对于
证明:
引理
对于
证明:
设
则
所以
所以
又因为
设
则有
若
又根据
若
则有
综上有
结合
根据引理,可推出:
归纳可得:
得证。
转化
这样
现在的问题就转化为了求
定理 2
对于
证明:
性质2
对于
定理 1 的引理的推论
对于
证明:根据定理 1 的引理,显然成立。
当
当
可推出
令
因为
即
根据定理 1 的引理的推论得:
又因为
具体求法
有了定理 2 后,就可求出
先考虑暴力的代码,即从头开始暴力匹配,时间复杂度
根据定理 2,
因为
代码
void get_height() {
for (int i = 1, k = 0, j; i <= n; i ++) {
if (rk[i] == 1) continue; // height[1]=0
k = k ? k - 1 : k; // h[i-1]-1
for (j = sa[rk[i] - 1];
i + k <= n && j + k <= n
&& S[i + k] == S[j + k]; k ++);
height[rk[i]] = k; // k=h[i]=height[rk[i]]
}
}
本文来自博客园,作者:maniubi,转载请注明原文链接:https://www.cnblogs.com/maniubi/p/18520423,orz
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】