后缀数组(suffix array) 模板(1)
来源:互联网 发布:淘宝巴拉巴拉羽绒服 编辑:程序博客网 时间:2024/06/07 08:00
贴一波计算sa数组的模板
void get_sa() { int *x = s1, *y = s2 ; int i, j, k, p = 1 ; memset ( c, 0, sizeof(c) ) ; // 清空桶 for ( i = 1 ; i <= n ; i ++ ) c[x[i] = s[i]] ++ ; // 入桶 for ( i = 1 ; i <= m ; i ++ ) c[i] += c[i-1] ; // 从个数到排名 for ( i = n ; i ; i -- ) sa[ c[x[i]]-- ] = i ; // 从后往前方便统计 for ( k = 1 ; k <= n ; k <<= 1 ) { // 倍增长度 p = 0 ; //先排第二关键字 for ( i = n-k+1 ; i <= n ; i ++ ) y[++p] = i ; // 无第二关键字入桶 for ( i = 1 ; i <= n ; i ++ ) if ( sa[i] > k ) y[++p] = sa[i]-k ; // 入桶 //再排第一关键字 memset ( c, 0, sizeof(c) ) ; for ( i = 1 ; i <= n ; i ++ ) c[ x[y[i]] ] ++ ; for ( i = 1 ; i <= m ; i ++ ) c[i] += c[i-1] ; for ( i = n ; i ; i -- ) sa[ c[x[y[i]]]-- ] = y[i] ; // 注意是y[i] swap(x, y) ; p = 1 ; x[sa[1]] = 1 ; for ( i = 2 ; i <= n ; i ++ ) x[sa[i]] = y[sa[i]]==y[sa[i-1]]&&y[sa[i]+k]==y[sa[i-1]+k] ? p : ++p ; // 相同则是相同的排名 if ( p >= n ) break ; m = p ; }}
0 0
- 后缀数组(suffix array) 模板(1)
- 后缀数组(suffix array)模板(2)
- 后缀数组(Suffix Array)
- 后缀数组suffix array
- Suffix Array 后缀数组
- 后缀数组suffix模板
- 后缀数组(Suffix Array)
- 【SPOJ-SARRAY】Suffix Array【后缀数组】
- Tyvj 1860 后缀数组 [Suffix Array 裸题]
- [置顶]后缀数组(suffix array)详解
- 后缀数组(Suffix Array)学(复)习小记
- 数据库应用-后缀树及后缀数组(Suffix-Bäume&Suffix-Arraz)-1
- 后缀树(suffix Tree)和后缀数组
- 后缀自动机,SAM,suffix automaton 模板
- 【BZOJ4319】cerc2008 Suffix reconstruction【构造】【后缀数组】
- suffix array
- 数据库应用-后缀树及后缀数组(Suffix-Bäume&Suffix-Arraz)-2
- 【后缀数组】后缀数组模板
- 第一篇博客——BitmapFactory Unable to decode stream 问题解决
- ubuntu hosts
- 浅谈jQuery源码(六)——$.map
- Java使用Comparable接口自定义排序
- 【Android 一般进阶】动态广播注册注销时机
- 后缀数组(suffix array) 模板(1)
- spring(一)---bean的学习上篇
- 包装类和日期操作
- Java 数组去重复值
- 获取一定范围内的随机小数
- Android的RecyclerView
- Debug版本和Release版本区别
- 计算机网络(自顶向下方法)(原书第4版)课后复习题解答(第一章)
- openwrt路由器不断重启问题原因