字符串的处理真可谓是博大精深,后缀数组这种数据结构我花了两天时间才明白了其构造的过程。主要是代码不好理解。
数据结构:
1.sa数组,就是后缀数组,按照字典序排列,其意义为:sa[i]=k,排第i名的子串是从k位开始的。
2.rank名次数组,其意义为:rank[i]=k,以i为起点的子串排名为k。
很容易看出来两者可以相互转化。
求这两个数组的过程是基于基数排序,计数排序的方法。
下...
分类:
编程语言 时间:
2014-11-22 12:07:41
阅读次数:
199
#include #include #define MAX 1000 //函数原型 void counting_sort(int A[],int length_A,int B[],int k); //测试代码 void main() { int A[]={-3,2...
分类:
编程语言 时间:
2014-11-22 10:32:42
阅读次数:
200
举个来说明桶排序的过程,假设现在有A={0.78,0.17,0.39,0.26,0.72,0.94,0.21,0.12,0.23,0.68},桶排序如下所示:
研究过计数排序我们知道了————计数排序是假设输入是由一个小范围内的整数构成,而桶排序则假设输入由一个随机过程产生的,该过程将元素均匀而独立地分布在区间[0,1)上。当桶排序的输入符合均匀分布时,即可以线性期望时间运行。...
分类:
编程语言 时间:
2014-11-19 11:08:36
阅读次数:
312
如给定数组{1,3,51,5,512,671,9,67},设计程序,输出{9,671,67,512,51,5,3,1}基本思想是给每一位数字定权重,然后使用如W[671] = 6 * w1 + 7 * w2 + 1 * w3;W的个数由数组中位数最长的数字决定。由数组中数字对应的权值来排序即可程序如...
分类:
编程语言 时间:
2014-11-18 23:59:09
阅读次数:
264
计数排序假设n个输入元素中的每一个都介于0和k之间的整数,k为n个数中最大的元素。当k=O(n)时,计数排序的运行时间为θ(n)。计数排序的基本思想是:对n个输入元素中每一个元素x,统计出小于等于x的元素个数,根据x的个数可以确定x在输出数组中的最终位置。此过程需要引入两个辅助存放空间,存放结果的B[1...n],用于确定每个元素个数的数组C[0...k]。算法的具体步骤如下:
(1)根据输...
分类:
编程语言 时间:
2014-11-17 09:17:02
阅读次数:
225
http://www.lydsy.com/JudgeOnline/problem.php?id=1031很容易想到这就是将字符串复制到自己末尾然后后缀数组搞出sa然后按区间输出即可。然后换了下模板,将基数排序放到外边#include #include #include #include #inclu...
分类:
编程语言 时间:
2014-11-13 14:16:56
阅读次数:
251
桶排序 (Bucket sort)工作的原理是将阵列分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递回方式继续使用桶排序进行排序)。#includestruct barrel { int node[10]; int count; };void bucket_sort(in....
分类:
编程语言 时间:
2014-11-11 22:33:01
阅读次数:
290
当数据太大,内存要求紧,整数范围小时,存在不能用快排的情况,这时可用计数排序。
#include
#include
#include
inline int readint(){
char c=getchar();
while(!isdigit(c)) c=getchar();
int x=0;
while(isdigit(c)) {
x=x*10+c-'0...
分类:
编程语言 时间:
2014-11-08 15:19:58
阅读次数:
194
1 #include 2 #include 3 const int N = 10000; 4 const int RADIX = 10; 5 int a[N]; 6 int count[RADIX]; 7 void radixSort(int n) 8 { 9 int *bucket ...
分类:
编程语言 时间:
2014-11-06 21:32:10
阅读次数:
178
1 //计数排序的思想是这样的,如果小于等于a的数字有n个,那么就把a放在第n+1个位置,从而达到排序的目的 2 //关键是怎么统计小于等于a的数字有多少个, 3 /* 4 可以采用这样一个办法,将数组元素的值映射为下标,统计该下标出现了多少次,然后再统计比该下标小或者等的下标出现了多少次, 5 ....
分类:
编程语言 时间:
2014-11-06 19:15:58
阅读次数:
208