后缀数组模板
来源:互联网 发布:linux hadoop 下载 编辑:程序博客网 时间:2024/06/05 21:59
最近复习了一下后缀数组,在这里放一下模板。
在这里用的是书上的模板,貌似没有网上那么有没。
部分模板
void build_sa(int m){ int *x=t1,*y=t2; for(int i=0;i<m;i++) c[i]=0; for(int i=0;i<n;i++) c[x[i]=s[i]]++; for(int i=0;i<m;i++) c[i]+=c[i-1]; for(int i=n-1;i>=0;i--) sa[--c[x[i]]]=i; for(int k=1;k<=n;k<<=1) { int p=0; for(int i=n-k;i<n;i++) y[p++]=i; for(int i=0;i<n;i++) if(sa[i]>=k) y[p++]=sa[i]-k; for(int i=0;i<m;i++) c[i]=0; for(int i=0;i<n;i++) c[x[i]]++; for(int i=0;i<m;i++) c[i]+=c[i-1]; for(int i=n-1;i>=0;i--) sa[--c[x[y[i]]]]=y[i]; swap(x,y); p=1,x[sa[0]]=0; for(int i=1;i<n;i++) x[sa[i]]= y[sa[i]]==y[sa[i-1]]&&y[sa[i]+k]==y[sa[i-1]+k] ? p-1 : p++; if(p>=n) break; m=p; } }void get_height(){ int j,k=0; for(int i=0;i<n;i++) rank[sa[i]]=i; for(int i=0;i<n;i++) { if(k) k--; j=sa[rank[i]-1]; while(s[i+k]==s[j+k]) k++; height[rank[i]]=k; }}
0 0
- 【后缀数组】后缀数组模板
- 后缀数组【模板】
- 【后缀数组模板】
- 后缀数组模板
- 后缀数组模板
- 【模板】后缀数组
- 后缀数组模板
- 后缀数组模板
- 后缀数组模板
- 【省选】【后缀数组】模板
- 后缀数组 模板
- 后缀数组 模板
- 后缀数组模板
- 后缀数组模板
- 后缀数组模板
- 后缀数组模板
- 后缀数组模板
- 模板-后缀数组
- 继承、封装、多态
- 03-S3C2440u-boot学习之u-boot分析之u-boot命令实现
- 关于localtime()函数在多线程中的core问题
- C实例---文件操作(打开文件)
- JAVA jsoup 架包安装
- 后缀数组模板
- 对象继承训练(2):继承后可以调用父类方法
- .Net程序员学用Oracle系列(11):系统函数(下)
- POJ1182【种类并查集】
- 《程序员自我修养》--动态链接
- 在win7上安装ft232r usb uart 驱动
- Java容器(五):LinkedHashMap实现原理
- IOS网络问题
- Git学习使用(四):远程仓库