Trie上的后缀数组
程序员文章站
2022-05-12 09:18:50
...
亦称为广义后缀数组
Definition
LCS=Longest Common Suffix
LCP=Longest Common Preffix
表示Trie上节点v到根的路径形成的字符串
Intro
由于在Trie上,自带去重功能
显然
我们要实现后缀数组的功能,即把都求出来
很好求,类比序列情形,倍增,将两个长度的信息双关键字排序得到长度的信息。这里,我们只需取出每个点的级祖先。
其余部分类似于序列上的做法。
然后我们要兹磁查询
一个思路是求出,即
一个方法是二分+哈希,但是有更简单的做法,我们对倍增过程每个点的保留下来(据说这叫波兰表),那么我们可以倍增求任意两个点的,代码大概长这样
int LCP(int u , int v) {
if (u == v)
dep[u];
int l = 0;
per (i , lg , 0) if (rk[u][i] == rk[v][i]) {
l += 1 << i;
u = pa[u][i] , v = pa[v][i];
}
return l;
}
然后类似地,使用ST表支持RMQ即可O(1)询问任意两点LCP
上一篇: 网络爬虫之scrapy框架详解
下一篇: Android导航栏音量调节
推荐阅读
-
基于原生JS封装数组原型上的sort方法
-
动态规划-03要从二维数组的左上角走到右下角,请找出路径上的所有数字之和最小的路径java实现
-
处理Excel的Python算法_3_:数组计算的数学模块——NumPy(上)
-
洛谷P5108 仰望半月的夜空(后缀数组)
-
js实现数组内数据的上移和下移的实例
-
给出每日上了几个台阶放到每日数组里面,求出20年上的台阶总数
-
【求教】请教,有没有可能在LAMP环境上使得没有.php后缀名的文件成为可执行的脚本
-
在php中,有个多维数组$b=array();,有个字符串$a='[1][1]';有木有办法从$b中取出$a位置上的值?
-
文件夹下(包含子文件夹和文件),取文件夹和子文件夹下所有后缀为JPG的文件的,路径和文件名 ,把路径和文件名放在数组中
-
七牛上的图片使用版本号后缀, 老版本图片就能自动被覆盖吗?