博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
后缀数组
阅读量:6034 次
发布时间:2019-06-20

本文共 1223 字,大约阅读时间需要 4 分钟。

 

两篇论文:   

贴两模版:

DA:

/*	*后缀数组,倍增算法实现,复杂度O(nlogn)	*sa[i]: 第i小的后缀是在字符串位置,即后缀sa[i]	*rank[i]: 后追i在sa数组下标,即第rank[i]小	*height[i]: LCP (suffix (sa[i-1], sa[i]))*/int sa[N], rank[N], height[N];int ws[N], wa[N], wb[N];bool cmp(int *r, int a, int b, int l) {    return (r[a] == r[b] && r[a+l] == r[b+l]);}//r数组为读入的字符串,m = max (r[i]) + 1,一般字符128足够了//n为strlen (s) + 1,加上最后一个'\0'void DA(char *r, int n, int m = 128) {    int i, j, p, *x = wa, *y = wb;    for (i=0; i
=0; --i) sa[--ws[x[i]]] = i; for (j=1, p=1; p
= j) y[p++] = sa[i] - j; for (i=0; i
=0; --i) sa[--ws[x[y[i]]]] = y[i]; std::swap (x, y); for (p = 1, x[sa[0]] = 0, i=1; i
r) swap (l, r); l++;*/

DC3:

/*    *后缀数组,DC3算法实现,复杂度O(n)*/int wa[N],wb[N],wv[N],ws[N];int rank[N],height[N];   int sa[N],r[N];int c0(int *y,int a,int b) {    return y[a]==y[b]&&y[a+1]==y[b+1]&&y[a+2]==y[b+2];}int c12(int k,int *y,int a,int b) {    if(k==2) return y[a]
=0;i--) b[--ws[wv[i]]]=a[i];}void DC3(int *r,int *sa,int n,int m) { int i,j,*rn=r+n,*san=sa+n,ta=0,tb=(n+1)/3,tbc=0,p; r[n]=r[n+1]=0; for(i=0;i

  

 

转载于:https://www.cnblogs.com/Running-Time/p/5450483.html

你可能感兴趣的文章
Hadoop中HDFS和MapReduce节点基本简介
查看>>
我在上海IT运维的日子
查看>>
zabbix使用percona监控mysql
查看>>
mysql主从同步配置详解
查看>>
使用Photoshop+960 Grid System模板进行网页设计
查看>>
04 python基础-变量及如果语句的作业
查看>>
qsort用法
查看>>
BZOJ2744:[HEOI2012]朋友圈(最大团,乱搞)
查看>>
4199. [NOI2015]品酒大会【后缀数组+并查集】
查看>>
2017 计蒜之道 初赛 第一场 B.阿里天池的新任务
查看>>
CSS3实现鼠标移动到图片上图片变大(缓慢变大,有过渡效果,放大的过程是有动画过渡的,这个过渡的时间可以自定义)...
查看>>
centos6.6 安装MariaDB
查看>>
Bootstrap3基础 navbar 导航条 简单示例
查看>>
南阳58--最小步数(BFS)
查看>>
(转)微软牛津计划介绍——屌爆了的自然数据处理解决方案(人脸/语音识别,计算机视觉与语言理解)...
查看>>
欧几里得&扩展算法&扩展欧几里得
查看>>
js常用通用函数(++++验证)
查看>>
如何使用C#开发“类ActiveX组件”
查看>>
[转] Java关键字final、static使用总结
查看>>
setTimeout,setInterval的使用小结
查看>>