初学后缀数组记录(然而并不是很会。。&&很水。。)

两篇很赞的博文:

后缀数组 最详细讲解 (这一篇代码注释很详细,可以好好研读一番)

知识点 后缀数组

orz后缀数组代码

后缀数组主要实现思想就是倍增法+基数排序,代码难也是因为这两者要同时运用。

如果对基数排序还不懂,可以参考一下这篇博文:

基数排序

今后还是要继续学这个神仙操作,继续加油。

原文地址:https://www.cnblogs.com/acboyty/p/9520959.html

时间: 2024-08-26 05:20:48

初学后缀数组记录(然而并不是很会。。&&很水。。)的相关文章

初学后缀数组

后缀排序 Description Tim正在自学<数据结构>,他刚刚学会如何比较两个字符串大小.书上是这么说的(和Pascal语言中的比较规则相同,学习过Pascal语言的同学可以跳过这段): 比较两个不同字符串s1=’p1p2p3…pN’和s2=’q1q2q3…qM’的大小,设N<=M. 若s1是s2的前缀,则s1<s2.否则设pi<>qi,且i最小:若pi<qi,则s1<s2,否则s1>s2. Tim想通过练习熟练运用这个规则,于是打算出许多字符串

POJ 2774 Long Long Message(最长公共子串 -初学后缀数组)

后缀数组的两篇神论文: 国家集训队2004论文集 许智磊 算法合集之<后缀数组--处理字符串的有力工具> 很多人的模版都是用论文上的 包括kuangbin的模版:(DA算法) 模版中比较难理解的地方有两点1.按关键词排序 2.把字符串长度增加一位 按关键词排序的意思其实是基数排序中相当把两位数排序时先排个位,再排十位 这里也一样先排后2^k长度的字符串,再排前2^k长度的字符串,最终排成2^(k+1)字符长度的后缀数组sa 把字符串增加一位,是为了让有意义的串的rank从1开始,还有便于后边不

【BZOJ4566】找相同字符(后缀数组)

[BZOJ4566]找相同字符(后缀数组) 题面 BZOJ 题解 后缀数组的做法,应该不是很难想 首先看到两个不同的串,当然是接在一起求\(SA,height\) 那么,考虑一下暴力 在两个串各枚举一个后缀,他们的\(lcp\)就是对答案产生的贡献 现在优化一下,按照\(SA\)的顺序枚举来处理\(lcp\) 利用一个单调栈维护一下,每次记录一下前面有多少个的贡献和当前答案一样就好啦 只是有点难写... #include<iostream> #include<cstdio> #in

后缀数组(1)

感觉跟字符串有关的算法都难飞了:) 首先入坑是noi day2t2,舔题解开启后缀数组副本 首先自然是模板题刷水,因为(爱情怎莫会有沧桑)懒,所以没写过基数排序,所以舔模板也舔地十分困难,最后还是跪求zl老爷讲解,,,然而当时也是美得朦胧... 不过还好之前舔了集训队论文->算法合集之<后缀数组——处理字符串的有力工具> 1 #include<stdio.h> 2 #include<string.h> 3 #define maxn 100005 4 char st

UVA 题目1223 - Editor(后缀数组求出现次数超过两次的最长子串的长度)

Mr. Kim is a professional programmer. Recently he wants to design a new editor which has as many functions as possible. Most editors support a simple search function that finds one occurrence (or all occurrences successively) of a query pattern strin

【POJ-1743】后缀数组训练记录

POJ-1743 题目大意:给定一个字符串,求最长的重复的子串,且两个串不能重叠,且长度至少为5 思路: 题目中的重复,为同时加上减去同一个整数,仍算重复 转化成完全重复来判断,即每个字符为这个字符与它下一个字符的差值,这样可以拿后缀数组求解 判断是否有长度为k的子串是相同的,且不重叠,那么求最优,可以利用二分+判定 考虑利用height数组来求解,对于height值求解,对于排序后的Suffix分组,使每组的间的后缀值都不小于k 那么答案一定在同一组中,判断每组的SA最大和最小是否>=k,如果

hdu5769--Substring(后缀数组)

题意:求含有某个字母的某个字符串的不同子串的个数 题解:后缀数组,记录每个位置距离需要出现的字母的距离就可以了.因为不太了解后缀模版卡了一会,还是很简单的. 记住sa和height数组都是1-n的下标. //后缀数组 #include <stdio.h> #include <cstring> #include <iostream> #include <algorithm> using namespace std; typedef long long ll;

后缀数组-Codevs1500

后缀数组的原理很简单,将一个字符串S的所有后缀组成一个字符串数组,并排序,则以后每次判断某个字符串D是不是S的子串只需要strlen(D)*log(strlen(s))的时间复杂度.Codevs1500这题就是一道裸题,考后缀数组的生成,如果一个一个将S的后缀加入到后缀数组中并快速排序需要的时间复杂度为(n的平方*log n),效率极低.一般可以用倍增法将生成后缀数组的时间复杂度优化到(n*log n*log n).      倍增法的思想一开始觉得有点难理解,先只比较每个后缀的第一个字母,得到

初学awk数组会遇到的几个常见问题

原题目: 处理以下文件内容,将域名取出并根据域名进行计数排序处理:(百度和sohu面试题) 答案的详细讲解请参考: http://lidao.blog.51cto.com/3388056/1912219 文件内容: http://www.etiantian.org/index.html http://www.etiantian.org/1.html http://post.etiantian.org/index.html http://mp3.etiantian.org/index.html h