(ps:暑假集训,中途回家休息了一周多的时间,没A什么题,只弱弱地看了丁点的数学书。最后一天觉得实在过意不去,便看了小会儿算法:后缀数组。回学校后对模板的使用更有解了下,照着标程A了两水题。半个多月没学懂新算法了,思维一直停滞,现机械地学会了字符串匹配的最后一个重、难点算法:后缀数组。也算是以完成张教主下达的字符串的任务。)
后缀数组 后缀数组的原理MS有点难,本人还没能深入地去理解领悟,只能机械地套用模板。
下面,我清楚地将模板中的所有关键:r[],sa[],rank[],height[]。详细说明: (写完后发现还有点小细节仍需推敲:???) r[] 表示输入的字符串的数字表示。 r[0->maxn-1] 。r[]的大小为(1->m) 其中?? r[maxn]=0 Sa[] 表示后缀排在第几位。 Sa[1->8] 。 sa[]的大小为(0->maxn-1 ?? 1->maxn) Rank[] 表示串中的字符排在第几名。Rank[1->maxn] rank[]的大小为(1->maxn) Height[] 表示相邻后缀的最长前缀。 Height[2->maxn] height[]的大小为(0->oxffffff)
简单的说,后缀数组( sa[] )是“排第几的是谁?”,名次数组( rank[] )是“你排第几?”。 直观理解需从下图中体会:
|
字符串匹配:后缀树组模板(关键点理解)
最新推荐文章于 2022-08-10 07:47:47 发布