{算法}所谓ExKmp
来源:互联网 发布:高达ma 知乎 编辑:程序博客网 时间:2024/06/05 06:45
你想学会ExKmp吗?
首先 在心中说:
ExKmp其实很简单的
Preparations
毕竟名字里还有个KMP 所以没有学过KMP的同学请参见
M67大神的KMP{看得懂}
本蒟蒻的辣鸡广告{点一下 或更多}
Analysis
首先 ExKmp的核心任务相同于KMP
也就是判断T串是否为S串的子串
还是从暴力开始考虑
设a[i]表示满足
O(nm)暴力显然 枚举即可
为了表述方便 我们称两字符串”全等”当且仅当它们完全相同
观察匹配过程
如图 已知红色部分是全等的 现在 我们希望得到蓝色部分的全等
注意到它们有公共部分 换一张复杂些的图
简单解释一下 令绿色部分长度等于黄色部分
黄色部分是红串中同一区域 所以它们已知全等
同理 绿色部分已知全等
我们发现 S串中绿色部分与T串中黄色部分是需要判断是否全等的
如果全等 就可以延续这继续往后做了
尝试总结一下我们需要求的
S串 已匹配[红色] 与 其后缀[红蓝交集]中 最长的公共前缀[绿色部分]
也就是说 对于被匹配的部分 我们需要求其后缀的最长公共前缀
其中 显然的 绿色部分可以小于黄色部分
这就是ExKmp的核心思想
Code?
所以 具体做法中
1. 记载一个尾尽量远的串[红串]
2. 保存一个其本身与后缀[黄串]的最长公共前缀[绿串]
3. 不断更新它们
O(n) Proving
你看这几根指针都没有后退欸
所以说勒…
Ending
本以为ExKmp是什么高级玩意儿 打算消化一两天
然而 大失所望
ExKmp究竟比Kmp强在哪里呢?
你看它多算了很多很奇怪的东西啊
Q:我们有Kmp 为什么要用ExKmp
A:当即出一道题”求字符串中后缀的最长公共前缀”
The rest is silence.
- {算法}所谓ExKmp
- kmp与exkmp算法讲解
- exkmp
- Exkmp
- POJ3974 回文串。EXKMP模板和马拉车算法模板
- EXKMP 模板
- 字符串模式匹配(所谓的kmp)算法
- HDU 4763 EXKMP
- hdu4333 Revolving Digits - exkmp
- bzoj3670 Noi2014动物园 - exkmp
- HDU 4763 KMP/EXKMP
- 【jzoj4876】【基因突变】【exkmp】
- KMP,EXKMP 扩展KMP
- 关于KMP和exKMP
- 拓展kmp&Exkmp
- [caioj1462][exkmp]回文串
- 拓展kmp&Exkmp
- hdu 6153(kmp || exkmp)
- 17、SQL Server:动态SQL拼接字符串,使用变量,函数等5
- java中使用队列:java.util.Queue
- Java 8 lambda表达式示例
- export frames as pictures
- maven仓库阿里云配置
- {算法}所谓ExKmp
- annotation方式的事务注解和bean配置
- Java02-char字符串_ boolean
- bzoj 2946: [Poi2000]公共串 后缀自动机
- 两年多工作心得和体会
- Oracle11g服务详细介绍及哪些服务是必须开启的?
- 基础算法-归并排序
- “创业七年,一分股份没拿” 技术出身CEO分享那些分股份的坑
- 深入学习的艺术——每一个程序员都必不可少的技能