后缀数组模板
来源:互联网 发布:网络直播工作室招主播 编辑:程序博客网 时间:2024/06/06 21:47
void built(int *s,int *sa,int n,int m){int *x=t1,*y=t2;//要注意谁是引用,已经手残打错了几回了= =int i,j,k,p;for(i=0;i<m;i++)c[i]=0;for(i=0;i<n;i++)c[x[i]=s[i]]++;for(i=1;i<m;i++)c[i]+=c[i-1];for(i=n-1;i>=0;i--)sa[--c[x[i]]]=i;for(k=1;k<n;k<<=1){//倍增 for(i=n-k,p=0;i<n;i++)y[p++]=i;for(i=0;i<n;i++)if(sa[i]>=k)y[p++]=sa[i]-k;for(i=0;i<m;i++)c[i]=0;for(i=0;i<n;i++)c[x[y[i]]]++;for(i=1;i<m;i++)c[i]+=c[i-1];for(i=n-1;i>=0;i--)sa[--c[x[y[i]]]]=y[i];swap(x,y);p=1;x[sa[0]]=0;for(i=1;i<n;i++){if(y[sa[i]]==y[sa[i-1]]&&y[sa[i]+k]==y[sa[i-1]+k])x[sa[i]]=p-1;//注意数组else x[sa[i]]=p++;}if(p>=n)return ;m=p;}}void get_height(int *s,int n){int i,j,tot=0;for(i=1;i<=n;i++)rank[sa[i]]=i;for(i=0;i<n;i++){if(tot)tot--; else tot=0;j=sa[rank[i]-1];while(s[j+tot]==s[i+tot])tot++;height[rank[i]]=tot;}}
0 0
- 【后缀数组】后缀数组模板
- 后缀数组【模板】
- 【后缀数组模板】
- 后缀数组模板
- 后缀数组模板
- 【模板】后缀数组
- 后缀数组模板
- 后缀数组模板
- 后缀数组模板
- 【省选】【后缀数组】模板
- 后缀数组 模板
- 后缀数组 模板
- 后缀数组模板
- 后缀数组模板
- 后缀数组模板
- 后缀数组模板
- 后缀数组模板
- 模板-后缀数组
- 【HDFS】hdfs如何打开回收站机制trash,恢复删除的文件
- 学会怎样尊重一个程序员
- 1.1、从 C 到 C++
- HTML5初学者福利!11个在线学习网站推荐
- 12 网络与数据库编程
- 后缀数组模板
- shell入门教程(2)-变量和参数
- gFStu常用功能、分析
- 第18,19讲学习,sharp多边形点选高亮
- Java实现树结构数据的递归与非递归遍历
- Docker的大坑小洼(二)
- Java 8新特性探究(四)类型注解 复杂还是便捷
- 通过Python处理Android API Doc离线访问
- 应用之星:免费的傻瓜式在线制作电子书平台