- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
PAGE 1
PAGE 1
多串匹配算法及其启示
[关键字] 模式串 单词前缀树 后缀树 串匹配
[摘要]
字符串处理在实际应用中具有重要地位,其看似简单,但随着研究的深入,各类思想精华涌现其中,难度也变得深不可测。因此信息学竞赛中常以字符串处理为题,锻炼选手的创新能力。
本文第一章提出问题并进行朴素的分析,第二、三、五章分别介绍三个辅助算法:KMP模式匹配算法、自创的单词前缀树算法,以及后缀树算法。另外基于KMP算法的核心思想,在第四章中,面向“多串匹配”问题提出一个线性算法。但本文并没有满足于线性时间复杂度,接着在第六章提出了平均性能更好的算法。最后第七章对算法的构思进行了剖析,并将这种思想方法上升到理论高度。
[目录]
HYPERLINK §1 问题的提出
HYPERLINK §1.1 问题描述
HYPERLINK §1.2 最初想法
HYPERLINK §2 Knuth-Morris-Pratt算法
HYPERLINK §2.1 定义
HYPERLINK §2.2 模式串的前缀函数(Prefix Function)
HYPERLINK §2.3 kmp主算法
HYPERLINK §3 单词前缀树
HYPERLINK §3.1 单词查找树(Trie)的定义
HYPERLINK §3.2 单词树的建立
HYPERLINK §3.3 前缀指针的定义
HYPERLINK §3.4 前缀指针的生成
HYPERLINK §4 主算法一(线性算法)
HYPERLINK §4.1 kmp算法的启发
HYPERLINK §4.2 单词前缀树的使用及附加标记
HYPERLINK §4.3 单词前缀树的时间复杂度
HYPERLINK §4.4 主过程
HYPERLINK §4.5 时空复杂度
HYPERLINK §4.6 该算法的一些扩展
HYPERLINK §5 后缀树和McCreight算法
HYPERLINK §5.1 数据结构
HYPERLINK §5.2 一些定义
HYPERLINK §5.3 建立后缀树(初步)
HYPERLINK §5.4 后缀链接
HYPERLINK §5.5 建立后缀树
HYPERLINK §6 主算法二(平均性能更好的算法)
HYPERLINK §6.1 单词前缀树的使用和扩展
HYPERLINK §6.2 后缀树的使用和扩展
HYPERLINK §6.3 TreeA和TreeB上的两个函数
HYPERLINK §6.4 主过程
HYPERLINK §6.5 一个例子
HYPERLINK §6.6 时间复杂度分析
HYPERLINK §7 启示和总结
HYPERLINK §7.1 算法分析
HYPERLINK §7.2 启示
HYPERLINK §7.3 总结
[正文]
§1 问题的提出
§1.1 问题描述
所谓多串匹配,就是给定一些模式串,在一段文章(只出现小写a到z这26个字母)中,找出第一个出现的任意一个模式串的位置。具体来说就是:
给定m个长度分别为L1、L2……Lm的模式串数组P1[1..L1]、P2[1..L2]……Pm[1..Lm],假设正文为一个长度为n的数组T[1..n],限定。我们要找到一个最小的整数,满足
使得 都有
注:如模式串为cdefg与efg,正文为abcdefgh时,会造成匹配目标的不明确,因此我们一般将“求所有模式串的所有出现位置”这一任务模糊,转而求“第一个”(不过接下来将介绍的算法,可以在不改变复杂度的情况下完全接受此任务)。
含逻辑关键字的搜索引擎是这个问题的实际应用。医学家们在DNA序列中,搜索可能为变异的几种模式,也是这类问题的典型。因此用有效算法解决该问题能大大提高各行各业的工作效率!
§1.2 最初想法
For i ? 1 to n Do For
For i ? 1 to n Do
For j ? 1 to m Do If i+Lj-1=n Then
If T[i..i+Lj-1]=Pj[1..Lj] Then
输出位置i,并退出循环
该算法从小到大枚举每一个位置,并且进行检查。最坏情况下时间复杂度为。
For
For i ? 1 to m Do
Xi ? Pi在T中第一次出现的位置,如果没出现返回∞
write min(X)
其中Pi在T中第一次出现的位置,可以通过kmp算法(下一章将提到),在内完成。因此总复杂度为。
可惜这两种方法面对我们即将解决的数据量,是力不从心的,我们
原创力文档


文档评论(0)