- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
IOI2009 国家集训队论文 后缀数组 罗穗骞
信息学奥林匹克
China Nation Olympiad In Informatics
国家集训队论文
题 目: 后缀数组——处理字符串的有力工具
作 者: 罗穗骞
指导教师: 张学东
学 校: 华南师范大学附属中学
完成时间: 2009 年 1 月
IOI2009 国家集训队论文 后缀数组 罗穗骞
目录
摘要 …………………………………………………………………………………4
关键字 ………………………………………………………………………………4
正文 …………………………………………………………………………………4
一、后缀数组的实现 …………………………………………………………………4
1.1 基本定义 …………………………………………………………………4
1.2 倍增算法 …………………………………………………………………6
1.3 DC3 算法 …………………………………………………………………9
1.4 倍增算法与 DC3 算法的比较 ……………………………………………14
二、后缀数组的应用 ………………………………………………………………15
2.1 最长公共前缀 ……………………………………………………………15
例 1:最长公共前缀 ……………………………………………………17
2.2 单个字符串的相关问题 …………………………………………………17
2.2.1 重复子串 ………………………………………………………17
例 2:可重叠最长重复子串 ………………………………………17
例 3:不可重叠最长重复子串(pku1743)…………………………18
例 4:可重叠的最长重复子串(pku3261)…………………………19
2.2.2 子串的个数 ……………………………………………………19
例 5:不相同的子串的个数(spoj694,spoj705)………………19
2.2.3 回文子串 ………………………………………………………19
例 6:最长回文子串(ural1297)…………………………………19
2.2.4 连续重复子串 …………………………………………………20
例 7:连续重复子串(pku2406)……………………………………20
例 8:重复次数最多的连续重复子串(spoj687,pku3693)………21
2.3 两个字符串的相关问题 …………………………………………………21
2.3.1 公共子串 ………………………………………………………22
例 9:最长公共子串(pku2774,ural1517) ………………………22
2.3.2 子串的个数 ……………………………………………………23
2
IOI2009 国家集训队论文 后缀数组 罗穗骞
例 10:长度不小于 k 的公共子串的个数(pku3415) ……………23
2.4 多个字符串的相关问题 …………………………………………………23
例 11:不小于 k 个字符串中的最长子串(pku3294) ……………………24
例 12:每个字符串至少出现两次且不重叠的最长子串(spoj220)……24
例 13:出现或反转后出现在每个字符串中的最长子串(pku3294)……24
三、结束语 …………………………………………………………………………25
3.1 总结 ………………………………………………………………………25
3.2 参考文献 …………………………………………………………………25
3.3 致谢 ………………………………………………………………………25
3
IOI2009 国家集训队论文 后缀数组 罗穗骞
后 缀 数 组
----处理字符串的有力工具
【摘要】
后缀数组是处理字符串的有力工具。后缀数组是后缀树的一个非常精巧的
替代品,它比后缀树容易编程实现,能够实现后缀树的很多功能而时间复杂度也
并不逊色,而且它比后缀树所占用的内存空间小很多。可以说,在信息学竞赛中
后缀数组比后缀树要更为实用。本文分两部分。第一部分介绍两种构造后缀数组
的方法,重点介绍如何用简洁高效的代码实现,并对两种算法进行了比较。第二
部分介绍后缀数组在各种类型题目中的具体应用。
【关键字】
字符串 后缀 后缀数组 名次数组 基数排序
【正文】
一、后缀数组的实现
本节主要介绍了后缀数组的两种实现方法:倍增算法和 DC3 算法,并对两种
算法进行了比较。可能有的读者会认为这两种算法难以理解,即使理解了也难以
用程序实现。本节针对这个问题,在介绍这两种算法的基础上,还给出了简洁高
效的代码。其中倍增算法只有 25 行,DC3 算法只有 40 行。
1.1 基本定义
子串:字符串 S 的子串 r[i
原创力文档


文档评论(0)